From 439c49f98bbb10e1b4afd6cc416e7db9ddaee897 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Oct 2023 16:26:59 +0000 Subject: [PATCH] deploy: 225a20e833697945c3661957e8caa20f7dd49e6b --- 404.html | 12 ++++----- assets/css/styles.3b060ee5.css | 1 + assets/css/styles.f8d81ff5.css | 1 - ...-mask-b568419b7df0309b5b523a2f09ac6db4.png | Bin 0 -> 14008 bytes ...e24f4.6bbc21b6.js => 17fe24f4.5860b656.js} | 2 +- assets/js/28fe6e5c.2b45be28.js | 1 + ...590b1.92560781.js => 343590b1.a58dd406.js} | 2 +- assets/js/4bb6553e.94001f9d.js | 1 + ...0b79e.3d581c35.js => 7560b79e.02bd4c56.js} | 2 +- assets/js/814f3328.c49d5854.js | 1 - assets/js/814f3328.d9adc629.js | 1 + ...675dd.f26c7d9d.js => b2b675dd.9d59e11b.js} | 2 +- assets/js/b2f554cd.46bc512f.js | 1 - assets/js/b2f554cd.d176fbcf.js | 1 + assets/js/bf700409.2debeec5.js | 1 + ...c45c0.9a4cba71.js => ef9c45c0.6542cce9.js} | 2 +- assets/js/f82e026f.d56b260e.js | 1 + assets/js/main.3e05aacb.js | 2 ++ ...CENSE.txt => main.3e05aacb.js.LICENSE.txt} | 0 assets/js/main.8a88cc2a.js | 2 -- assets/js/runtime~main.4d56891a.js | 1 + assets/js/runtime~main.c285774c.js | 1 - blog.html | 23 +++++++++++----- blog/2023/08/03/release-notes-0.19.html | 14 +++++----- blog/2023/08/31/release-notes-0.20.html | 14 +++++----- blog/2023/08/31/release-notes-0.21.html | 22 +++++++++++++++ blog/2023/08/31/release-notes-0.22.html | 21 +++++++++++++++ blog/archive.html | 12 ++++----- blog/atom.xml | 25 ++++++++++++++++++ blog/deploy-s3gw-digital-ocean.html | 12 ++++----- blog/does-your-pv-need-s3-access.html | 12 ++++----- blog/epinio-meets-s3gw.html | 12 ++++----- blog/introduction-to-s3gw.html | 12 ++++----- blog/release-notes-v0.10.html | 12 ++++----- blog/release-notes-v0.11.html | 12 ++++----- blog/release-notes-v0.12.html | 12 ++++----- blog/release-notes-v0.13.html | 12 ++++----- blog/release-notes-v0.14.html | 12 ++++----- blog/release-notes-v0.15.html | 12 ++++----- blog/release-notes-v0.16.html | 12 ++++----- blog/release-notes-v0.17.html | 12 ++++----- blog/release-notes-v0.18.html | 12 ++++----- blog/release-notes-v0.3.html | 12 ++++----- blog/release-notes-v0.4.html | 12 ++++----- blog/release-notes-v0.5.html | 12 ++++----- blog/release-notes-v0.6.html | 12 ++++----- blog/release-notes-v0.7.html | 12 ++++----- blog/release-notes-v0.8.html | 12 ++++----- blog/release-notes-v0.9.html | 12 ++++----- blog/rss.xml | 25 ++++++++++++++++++ blog/s3gw-rados-gateway-standalone.html | 12 ++++----- blog/tags.html | 12 ++++----- blog/tags/blog.html | 12 ++++----- blog/tags/digital-ocean.html | 12 ++++----- blog/tags/epinio.html | 12 ++++----- blog/tags/introduction.html | 12 ++++----- blog/tags/longhorn.html | 12 ++++----- blog/tags/rancher.html | 12 ++++----- blog/tags/release-notes.html | 12 ++++----- blog/tags/s-3-gw.html | 12 ++++----- img/icon-docs-mask.png | Bin 0 -> 665 bytes img/icon-github-mask.png | Bin 0 -> 6393 bytes img/icon-longhorn-mask.png | Bin 0 -> 4058 bytes img/icon-rancher-mask.png | Bin 0 -> 4665 bytes img/icon-rd-mask.png | Bin 0 -> 8307 bytes img/icon-suse-mask.png | Bin 0 -> 14008 bytes img/logo-dark.svg | 5 ++++ index.html | 12 ++++----- sitemap.xml | 2 +- 69 files changed, 342 insertions(+), 231 deletions(-) create mode 100644 assets/css/styles.3b060ee5.css delete mode 100644 assets/css/styles.f8d81ff5.css create mode 100644 assets/images/icon-suse-mask-b568419b7df0309b5b523a2f09ac6db4.png rename assets/js/{17fe24f4.6bbc21b6.js => 17fe24f4.5860b656.js} (97%) create mode 100644 assets/js/28fe6e5c.2b45be28.js rename assets/js/{343590b1.92560781.js => 343590b1.a58dd406.js} (97%) create mode 100644 assets/js/4bb6553e.94001f9d.js rename assets/js/{7560b79e.3d581c35.js => 7560b79e.02bd4c56.js} (97%) delete mode 100644 assets/js/814f3328.c49d5854.js create mode 100644 assets/js/814f3328.d9adc629.js rename assets/js/{b2b675dd.f26c7d9d.js => b2b675dd.9d59e11b.js} (55%) delete mode 100644 assets/js/b2f554cd.46bc512f.js create mode 100644 assets/js/b2f554cd.d176fbcf.js create mode 100644 assets/js/bf700409.2debeec5.js rename assets/js/{ef9c45c0.9a4cba71.js => ef9c45c0.6542cce9.js} (97%) create mode 100644 assets/js/f82e026f.d56b260e.js create mode 100644 assets/js/main.3e05aacb.js rename assets/js/{main.8a88cc2a.js.LICENSE.txt => main.3e05aacb.js.LICENSE.txt} (100%) delete mode 100644 assets/js/main.8a88cc2a.js create mode 100644 assets/js/runtime~main.4d56891a.js delete mode 100644 assets/js/runtime~main.c285774c.js create mode 100644 blog/2023/08/31/release-notes-0.21.html create mode 100644 blog/2023/08/31/release-notes-0.22.html create mode 100644 img/icon-docs-mask.png create mode 100644 img/icon-github-mask.png create mode 100644 img/icon-longhorn-mask.png create mode 100644 img/icon-rancher-mask.png create mode 100644 img/icon-rd-mask.png create mode 100644 img/icon-suse-mask.png create mode 100644 img/logo-dark.svg diff --git a/404.html b/404.html index b7b11a3..7c3df89 100644 --- a/404.html +++ b/404.html @@ -4,14 +4,14 @@ Page Not Found | s3gw Project - - - + + +
-
Skip to main content

Page Not Found

We could not find what you were looking for.

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

- - +
Skip to main content

Page Not Found

We could not find what you were looking for.

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

+ + \ No newline at end of file diff --git a/assets/css/styles.3b060ee5.css b/assets/css/styles.3b060ee5.css new file mode 100644 index 0000000..637b6e8 --- /dev/null +++ b/assets/css/styles.3b060ee5.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)}.btn.navbar__github,.button{-webkit-user-select:none;vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.btn.navbar__github,.button,code{vertical-align:middle}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}*,.wrap_T5Hr{box-sizing:border-box}.markdown li,body,pre{word-wrap:break-word}img,pre{max-width:100%}pre,table{overflow:auto}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#06527a;--ifm-color-primary-dark:#06527a;--ifm-color-primary-darker:#054668;--ifm-color-primary-darkest:#043955;--ifm-color-primary-light:#075a86;--ifm-color-primary-lighter:#075e8c;--ifm-color-primary-lightest:#086b9f;--ifm-color-secondary:#067ac4;--ifm-color-secondary-light:#2dbdbd;--dark:#33313b;--light:#f3f3f3;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:inherit}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.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;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol,ol 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{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0;background-image:-webkit-linear-gradient(left,#f3f3f3,#adadb1,#f3f3f3);margin:0 auto}.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,[data-theme=dark] .intro_q4os a,h4,h5,h6{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]: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;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}.content_knG7 a,.intro_q4os a{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto}.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)}.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.navbar__items--center .navbar__brand,body{margin:0}.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)}.gridDynamic_yZrM,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;position:fixed;transition-timing-function:ease-in-out;visibility:hidden;left:0;top:0;opacity:0}.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__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;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-duration:.1s;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,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.getStarted_D36F,.intro_q4os{grid-template-columns:repeat(6,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,.sidebarItemTitle_pO2u,.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)}.navbar__docs:hover:before,.navbar__github:hover:before{background-color:var(--ifm-link-color)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}.navbar__icon{font-size:16px}.navbar__icon:before{background-color:var(--ifm-navbar-link-color);content:"";display:inline-flex;height:20px;margin-right:4px;padding-bottom:7px;width:35px}.navbar__docs,.navbar__github{font-size:18px}.navbar__docs:before{height:20px;-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACYElEQVRYR+2YgVHDMAxF6QSwAdkAmIAyAWxAmACYgLIBbNARYALKBMAGYQPYAD1O6rk+OW6b4PS4+E7XNla+vr9kxelkb8fHZMf57Y0Eu2ZoVPCvFTyQAEdOkA+59rVh8BTWaxuOl+JzueFCbCpWtdzcyNxC7EnsOeEHxqXYsVoKLokVEqzl7rsMqbYADzL5qA6QmnXAutWFL9sMK3xzopPKdzFWaINUoYyXevxIPXjxAGuh8yEWvqeO/wmxTUECvqgTQKhB6nJ1VosP5gUAjvqar4lFWc2ChZ+xII/gvTo6i0peYoGAG1EWeUOATUAUgzJj9EoQQEhaFlKLrMTnUAl8yyflEw4WWZQghMKu4AkKySslW5wgKQ7rM+6fNvebziFSTNBGjA2HeYNdzGbEr7iCtKRcJxi0Bi249ToIm6EY5KlBe9wVV5BWcy1WJdJrlwetQTbCp24CVKMuGZDGaNDWM4srSEAIGamMkOU3SY5QPF9cQQhwspmKeUcuUs4m4fTC9+IESW3qIBGqN+gmYSNwOoJs/OxlDnWZG0RB0hqTaqvL4iluI+PNrU2QlFA7Vth0fxvW/e0JYI8yUpU6boHFPHgeFunlaVKLZY9bOFMb6w4OAXMxznchwYX85ilCI95mJA+s24BxD0qG6myLY/etEET6+KWJV0lUIJV8MiCAbyU2VbMTcooQyqIyGI3ihWUBFiqDtx+ArLw0cR2nWsEANJBUYLvOPVjc7+zla54D0HkWbxzYA3Do9d8twI3MTL4TpPPo+88jVMCazswUoG+CffFa4owEu0o6KvjvFfwBR3ngKfPfsYgAAAAASUVORK5CYII=) no-repeat 100% 100%;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoCAYAAACM/rhtAAACYElEQVRYR+2YgVHDMAxF6QSwAdkAmIAyAWxAmACYgLIBbNARYALKBMAGYQPYAD1O6rk+OW6b4PS4+E7XNla+vr9kxelkb8fHZMf57Y0Eu2ZoVPCvFTyQAEdOkA+59rVh8BTWaxuOl+JzueFCbCpWtdzcyNxC7EnsOeEHxqXYsVoKLokVEqzl7rsMqbYADzL5qA6QmnXAutWFL9sMK3xzopPKdzFWaINUoYyXevxIPXjxAGuh8yEWvqeO/wmxTUECvqgTQKhB6nJ1VosP5gUAjvqar4lFWc2ChZ+xII/gvTo6i0peYoGAG1EWeUOATUAUgzJj9EoQQEhaFlKLrMTnUAl8yyflEw4WWZQghMKu4AkKySslW5wgKQ7rM+6fNvebziFSTNBGjA2HeYNdzGbEr7iCtKRcJxi0Bi249ToIm6EY5KlBe9wVV5BWcy1WJdJrlwetQTbCp24CVKMuGZDGaNDWM4srSEAIGamMkOU3SY5QPF9cQQhwspmKeUcuUs4m4fTC9+IESW3qIBGqN+gmYSNwOoJs/OxlDnWZG0RB0hqTaqvL4iluI+PNrU2QlFA7Vth0fxvW/e0JYI8yUpU6boHFPHgeFunlaVKLZY9bOFMb6w4OAXMxznchwYX85ilCI95mJA+s24BxD0qG6myLY/etEET6+KWJV0lUIJV8MiCAbyU2VbMTcooQyqIyGI3ihWUBFiqDtx+ArLw0cR2nWsEANJBUYLvOPVjc7+zla54D0HkWbxzYA3Do9d8twI3MTL4TpPPo+88jVMCazswUoG+CffFa4owEu0o6KvjvFfwBR3ngKfPfsYgAAAAASUVORK5CYII=) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;padding-bottom:9px;padding-right:1px;width:30px}.navbar__github:before{height:19px;-webkit-mask:url(data:image/png;base64,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) no-repeat 100% 100%;mask:url(data:image/png;base64,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) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;padding-bottom:4px;padding-right:1px;width:22px}.navbar__rancher:hover:before{background-color:#2e68e9}.navbar__rancher:before{height:14px;-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAABsCAMAAABJnz43AAAAxnpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio6AHwF7HNJQqRt0/BrsREmUQxzGB4dx6r/vJ70GEDjxUqVoKdnAyorNAsmONhkyT57oJTS45lN5h4CWIlvJtxIXYM/DYeBLs2g5GUkYwXoVlMNfbkbxEI2K0IItjDSMCF2AMGj+rVxU6vkLa89XiM80iOr0Pkzue67WvW2xJCF2AsrGROwF0JiUqA3BGIntINhodkgnS1RiDXnq0470B4C/WYgcuQpIAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9bpVIqgnYo4pChdrJQVMRRq1CECqFWaNXB5NIvaGJIUlwcBdeCgx+LVQcXZ10dXAVB8APE1cVJ0UVK/F9SaBHjwXE/3t173L0D/M0aU82eJKBqlpFNp4R8YUUIviKEKAYRR1Jipj4rihl4jq97+Ph6l+BZ3uf+HP1K0WSATyCeYbphEa8TT21aOud94girSArxOfGYQRckfuS67PIb57LDfp4ZMXLZOeIIsVDuYrmLWcVQiSeJY4qqUb4/77LCeYuzWquz9j35C8NFbXmJ6zRHkMYCFiFCgIw6qqjBQoJWjRQTWdpPefiHHb9ILplcVTByzGMDKiTHD/4Hv7s1SxPjblI4BfS+2PbHKBDcBVoN2/4+tu3WCRB4Bq60jn+jCUx/kt7oaLEjYGAbuLjuaPIecLkDRJ90yZAcKUDTXyoB72f0TQVg6BYIrbq9tfdx+gDkqKvMDXBwCMTLlL3m8e6+7t7+PdPu7wfKinLK5II1MgAADXhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6YTU4YmJiNmMtYzU0ZC00NGEyLWJjMWEtNGZlZDAwN2E0MGUxIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2OTUxNWExLTQ5ZGUtNDY4My04OWE0LTE5NGMzOTI1YmNiNCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjdmMjVlYmYwLWU0NDEtNDM3Yy04MzIyLTM4M2Y3Yzg3ZWYzYSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTY5ODE3Mjc3ODIyMzQwMSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMDoyNFQxMTozOTozOC0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTA6MjRUMTE6Mzk6MzgtMDc6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMGI3NTQwMy1lZDE0LTRkOTMtYWZhNC1hYjZkNDNlMjRjNDkiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTEwLTI0VDExOjM5OjM4LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnMv85IAAABjUExURWQ1NgAAACRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT//SapeEAAAABdFJOUwBA5thmAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cKGBInJg/ips0AAAFpSURBVHja7dtBksMgDERRVd//0LNPahxIGiTEZ52ieTHYoLIjKjXJ3WEUbHIz7R2aBmUelio67UzBzFWqdo8wYW5hqqDSOiiYL6HrmyPxS6a2NkfmN0wpwSm/syFTD4waSnlCJ5mCeRJzaN2ex9S/jhrKJUxdwRxdtpuZzv1UTCzb8y7mw791J1NXMAWzD1NXMDOVrudm8Yu5j6lcZqxjRiWm5WBd9S77WJKaHNhE+RBmjlNOplTTaZwV+cotk/8apq5g6kpm9GS+/bglc035qTbz6LU6zIwrmNGYGfYDUekHSnRnvr6o2HhPW3ZX5D1vVmUGzD7MgAkTJkyYMGHChAkTJsxSBQGYNzID5gHMWKMsx4z2zHFnNGCGH1mtHP15WD9+MLpkqswGr/8udrdyszNNOfKiaF/mImiecms0TJgwYcKECRMmTJgwYcKECRMmTJgwYdaNzmMGTH90mnJzdJpye3SKcVX0Hw2EcsvNTNo0AAAAAElFTkSuQmCC) no-repeat 100% 100%;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOYAAABsCAMAAABJnz43AAAAxnpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVDbDcMgDPxnio6AHwF7HNJQqRt0/BrsREmUQxzGB4dx6r/vJ70GEDjxUqVoKdnAyorNAsmONhkyT57oJTS45lN5h4CWIlvJtxIXYM/DYeBLs2g5GUkYwXoVlMNfbkbxEI2K0IItjDSMCF2AMGj+rVxU6vkLa89XiM80iOr0Pkzue67WvW2xJCF2AsrGROwF0JiUqA3BGIntINhodkgnS1RiDXnq0470B4C/WYgcuQpIAAABhGlDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV9bpVIqgnYo4pChdrJQVMRRq1CECqFWaNXB5NIvaGJIUlwcBdeCgx+LVQcXZ10dXAVB8APE1cVJ0UVK/F9SaBHjwXE/3t173L0D/M0aU82eJKBqlpFNp4R8YUUIviKEKAYRR1Jipj4rihl4jq97+Ph6l+BZ3uf+HP1K0WSATyCeYbphEa8TT21aOud94girSArxOfGYQRckfuS67PIb57LDfp4ZMXLZOeIIsVDuYrmLWcVQiSeJY4qqUb4/77LCeYuzWquz9j35C8NFbXmJ6zRHkMYCFiFCgIw6qqjBQoJWjRQTWdpPefiHHb9ILplcVTByzGMDKiTHD/4Hv7s1SxPjblI4BfS+2PbHKBDcBVoN2/4+tu3WCRB4Bq60jn+jCUx/kt7oaLEjYGAbuLjuaPIecLkDRJ90yZAcKUDTXyoB72f0TQVg6BYIrbq9tfdx+gDkqKvMDXBwCMTLlL3m8e6+7t7+PdPu7wfKinLK5II1MgAADXhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6YTU4YmJiNmMtYzU0ZC00NGEyLWJjMWEtNGZlZDAwN2E0MGUxIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjY2OTUxNWExLTQ5ZGUtNDY4My04OWE0LTE5NGMzOTI1YmNiNCIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjdmMjVlYmYwLWU0NDEtNDM3Yy04MzIyLTM4M2Y3Yzg3ZWYzYSIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTY5ODE3Mjc3ODIyMzQwMSIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMDoyNFQxMTozOTozOC0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTA6MjRUMTE6Mzk6MzgtMDc6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMGI3NTQwMy1lZDE0LTRkOTMtYWZhNC1hYjZkNDNlMjRjNDkiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTEwLTI0VDExOjM5OjM4LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PnMv85IAAABjUExURWQ1NgAAACRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT/yRT//SapeEAAAABdFJOUwBA5thmAAAAAWJLR0QAiAUdSAAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB+cKGBInJg/ips0AAAFpSURBVHja7dtBksMgDERRVd//0LNPahxIGiTEZ52ieTHYoLIjKjXJ3WEUbHIz7R2aBmUelio67UzBzFWqdo8wYW5hqqDSOiiYL6HrmyPxS6a2NkfmN0wpwSm/syFTD4waSnlCJ5mCeRJzaN2ex9S/jhrKJUxdwRxdtpuZzv1UTCzb8y7mw791J1NXMAWzD1NXMDOVrudm8Yu5j6lcZqxjRiWm5WBd9S77WJKaHNhE+RBmjlNOplTTaZwV+cotk/8apq5g6kpm9GS+/bglc035qTbz6LU6zIwrmNGYGfYDUekHSnRnvr6o2HhPW3ZX5D1vVmUGzD7MgAkTJkyYMGHChAkTJsxSBQGYNzID5gHMWKMsx4z2zHFnNGCGH1mtHP15WD9+MLpkqswGr/8udrdyszNNOfKiaF/mImiecms0TJgwYcKECRMmTJgwYcKECRMmTJgwYdaNzmMGTH90mnJzdJpye3SKcVX0Hw2EcsvNTNo0AAAAAElFTkSuQmCC) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;padding-bottom:2px}.navbar__rd:hover:before{background-color:#0081be}.navbar__rd:before{height:22px;-webkit-mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFKCAYAAAAzGgmFAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBtDsMgCP3vKXYEvqpwHLt2yW6w4w8Fk3bZS+AhTwEp5+f9Ko8BQimyNa1WKzjExKh7oBDo0yPI9BO2Irzni/QMyZmdOQStwbjy+WAxjnfbpZA+U9jvgkkw6U+hbMRjIvLgyEKWhZhCwCzQ41tQTdv1C/sJd2hYGU4F9tm9pfZzlubbOzbvw0QnI4N7ZokBeBgX7kNw7we/iFxnxmbGchJfyL89LZQvaIRZwn57syoAAAGFaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBiG37ZKpVQELSjikKGKgwVREUetQhEqhFqhVQeTS/+gSUOS4uIouBYc/FmsOrg46+rgKgiCPyCuLk6KLlLid0mhRYx3HPfw3ve+3H0H+Otlppod44CqWUYqERcy2VUh+IoQ+mn2YlRipj4nikl4jq97+Ph+F+NZ3nV/jm4lZzLAJxDPMt2wiDeIpzctnfM+cYQVJYX4nHjMoAsSP3JddvmNc8FhP8+MGOnUPHGEWCi0sdzGrGioxFPEUUXVKN+fcVnhvMVZLVdZ8578heGctrLMdVpDSGARSxAhQEYVJZRhIUa7RoqJFJ3HPfyDjl8kl0yuEhg5FlCBCsnxg//B796a+ckJNykcBzpfbPtjGAjuAo2abX8f23bjBAg8A1day1+pAzOfpNdaWvQI6NkGLq5bmrwHXO4AA0+6ZEiOFKDlz+eB9zP6pizQdwuE1ty+Nc9x+gCkqVfJG+DgEBgpUPa6x7u72vv2b02zfz+OuHKyFIjAqwAADXhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6YzFlMWViZTktOTQyOS00YWFiLTg5ZDMtYjM2N2U3ODRlMTk4IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI1NGI3NmM0LWUxZjQtNDM5Ni1hZWUxLTE1MDdkNGU4ODhmNSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjQ0ODY3YzliLTA1OTMtNDNkZi1iZTViLWEzN2RlNWU3MGFkYyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTY5ODEwMzE2OTQyMTMzMiIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMDoyM1QxNjoxOToyOS0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTA6MjNUMTY6MTk6MjktMDc6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphY2RmM2ZiNi1hMGI2LTQxN2UtODczZi01ZTRhYWM5YjNlZjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTEwLTIzVDE2OjE5OjI5LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PrJSgCsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAAHYcAAB2HAY/l8WUAAAAHdElNRQfnChcXEx1ba26jAAAQGklEQVR42u3de5CddX3H8c9zdrMLIYHcgDDWG1pCaotIYsUpFHYDgrQ6ddqiqUrH3qzV8R8odqSYs9g6heK0xWkddJjpaKGKneoQ6yCXjYIUWxYQewnhJqKFBHJPSLKb3fPrHwmSBEiym2T3XF6vGSYk2ezZ/T7POe/9Peec56kyleq3zkl6z0itnJJGtTBVFiTlxCQzksza/WtPADrTSJKtSTbu+rVak5JVqZWVaVSPJMMPpH7h+qn64qpJvbXrvtWbDb39SZYkVV+S05PU7CMAE9JI8oOUajBVYzCzhwfz8YuG2ysgVw0uSiOXpMrSJMfb5gBHxMYky1OqL2XZuXemqkprBuT6oWlZs+X9KeUTSU61XQEmU1mZqnZNTpx5Yz68eGdrBKR+c0+qub+fVJcneZ2NCDClnkzKNSnrbkj94pHmDchVg+ek5B+S/IJt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) no-repeat 100% 100%;mask:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFKCAYAAAAzGgmFAAAAxXpUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjabVBtDsMgCP3vKXYEvqpwHLt2yW6w4w8Fk3bZS+AhTwEp5+f9Ko8BQimyNa1WKzjExKh7oBDo0yPI9BO2Irzni/QMyZmdOQStwbjy+WAxjnfbpZA+U9jvgkkw6U+hbMRjIvLgyEKWhZhCwCzQ41tQTdv1C/sJd2hYGU4F9tm9pfZzlubbOzbvw0QnI4N7ZokBeBgX7kNw7we/iFxnxmbGchJfyL89LZQvaIRZwn57syoAAAGFaUNDUElDQyBwcm9maWxlAAB4nH2RPUjDQBiG37ZKpVQELSjikKGKgwVREUetQhEqhFqhVQeTS/+gSUOS4uIouBYc/FmsOrg46+rgKgiCPyCuLk6KLlLid0mhRYx3HPfw3ve+3H0H+Otlppod44CqWUYqERcy2VUh+IoQ+mn2YlRipj4nikl4jq97+Ph+F+NZ3nV/jm4lZzLAJxDPMt2wiDeIpzctnfM+cYQVJYX4nHjMoAsSP3JddvmNc8FhP8+MGOnUPHGEWCi0sdzGrGioxFPEUUXVKN+fcVnhvMVZLVdZ8578heGctrLMdVpDSGARSxAhQEYVJZRhIUa7RoqJFJ3HPfyDjl8kl0yuEhg5FlCBCsnxg//B796a+ckJNykcBzpfbPtjGAjuAo2abX8f23bjBAg8A1day1+pAzOfpNdaWvQI6NkGLq5bmrwHXO4AA0+6ZEiOFKDlz+eB9zP6pizQdwuE1ty+Nc9x+gCkqVfJG+DgEBgpUPa6x7u72vv2b02zfz+OuHKyFIjAqwAADXhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+Cjx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDQuNC4wLUV4aXYyIj4KIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIgogICAgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6YzFlMWViZTktOTQyOS00YWFiLTg5ZDMtYjM2N2U3ODRlMTk4IgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjI1NGI3NmM0LWUxZjQtNDM5Ni1hZWUxLTE1MDdkNGU4ODhmNSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjQ0ODY3YzliLTA1OTMtNDNkZi1iZTViLWEzN2RlNWU3MGFkYyIKICAgZGM6Rm9ybWF0PSJpbWFnZS9wbmciCiAgIEdJTVA6QVBJPSIyLjAiCiAgIEdJTVA6UGxhdGZvcm09IkxpbnV4IgogICBHSU1QOlRpbWVTdGFtcD0iMTY5ODEwMzE2OTQyMTMzMiIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjM0IgogICB0aWZmOk9yaWVudGF0aW9uPSIxIgogICB4bXA6Q3JlYXRvclRvb2w9IkdJTVAgMi4xMCIKICAgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMzoxMDoyM1QxNjoxOToyOS0wNzowMCIKICAgeG1wOk1vZGlmeURhdGU9IjIwMjM6MTA6MjNUMTY6MTk6MjktMDc6MDAiPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDphY2RmM2ZiNi1hMGI2LTQxN2UtODczZi01ZTRhYWM5YjNlZjEiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTGludXgpIgogICAgICBzdEV2dDp3aGVuPSIyMDIzLTEwLTIzVDE2OjE5OjI5LTA3OjAwIi8+CiAgICA8L3JkZjpTZXE+CiAgIDwveG1wTU06SGlzdG9yeT4KICA8L3JkZjpEZXNjcmlwdGlvbj4KIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAKPD94cGFja2V0IGVuZD0idyI/PrJSgCsAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAAHYcAAB2HAY/l8WUAAAAHdElNRQfnChcXEx1ba26jAAAQGklEQVR42u3de5CddX3H8c9zdrMLIYHcgDDWG1pCaotIYsUpFHYDgrQ6ddqiqUrH3qzV8R8odqSYs9g6heK0xWkddJjpaKGKneoQ6yCXjYIUWxYQewnhJqKFBHJPSLKb3fPrHwmSBEiym2T3XF6vGSYk2ezZ/T7POe/9Peec56kyleq3zkl6z0itnJJGtTBVFiTlxCQzksza/WtPADrTSJKtSTbu+rVak5JVqZWVaVSPJMMPpH7h+qn64qpJvbXrvtWbDb39SZYkVV+S05PU7CMAE9JI8oOUajBVYzCzhwfz8YuG2ysgVw0uSiOXpMrSJMfb5gBHxMYky1OqL2XZuXemqkprBuT6oWlZs+X9KeUTSU61XQEmU1mZqnZNTpx5Yz68eGdrBKR+c0+qub+fVJcneZ2NCDClnkzKNSnrbkj94pHmDchVg+ek5B+S/IJt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) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover}.navbar__longhorn:hover:before{background-color:#5f224a}.navbar__longhorn:before{height:20px;-webkit-mask:url(data:image/png;base64,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) no-repeat 100% 100%;mask:url(data:image/png;base64,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) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;padding-bottom:9px}.navbar__suse:hover:before{background-color:#30ba78}.navbar__suse:before{height:15px;-webkit-mask:url(/assets/images/icon-suse-mask-b568419b7df0309b5b523a2f09ac6db4.png) no-repeat 100% 100%;mask:url(/assets/images/icon-suse-mask-b568419b7df0309b5b523a2f09ac6db4.png) no-repeat 100% 100%;-webkit-mask-size:cover;mask-size:cover;padding-bottom:4px}@font-face{font-family:Poppins;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/poppins-regular-f61407da33b59324fbefe468ce6917ab.woff) format("woff2"),url(data:font/woff2;base64,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) format("woff"),}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/roboto-mono-regular-498042b7fe9cd07b4fd11a0965093e55.woff) format("woff2"),url(/assets/fonts/roboto-mono-regular-535bc89d4af715503b01afd761501e58.woff2) format("woff"),}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/lato-regular-292725486219768e62259f7286dc73cc.woff) format("woff2"),url(/assets/fonts/lato-regular-be36596da218e1eec01c5c600b1c13ef.woff2) format("woff"),}[data-theme=dark]{--ifm-color-primary:#06527a;--ifm-color-primary-dark:#ffbf00;--ifm-color-primary-darker:#f1b400;--ifm-color-primary-darkest:#c69400;--ifm-color-primary-light:#ffcd38;--ifm-color-primary-lighter:#ffd146;--ifm-color-primary-lightest:#ffdb71;--ifm-color-secondary-dark:#fe7c3f;--ifm-color-secondary:#4f57a8;--ifm-color-secondary-light:#075a86;--light:#33313b;--dark:#f3f3f3}[data-theme=dark] .footer--dark{background-color:var(--light);color:var(--ifm-color-primary)}.intro_src-pages-index-module h4,.intro_src-pages-index-module p,[data-theme=dark] .intro_src-pages-index-module h1{color:#fff}.button--static{background-color:#06527a;color:#f3f3f3}body{font-family:Lato,sans-serif}h1,h2,h3,h4,h5,h6{font-family:Poppins,sans-serif}code{font-family:Roboto Mono,monospace}.navbar__brand{height:40px}.btn.navbar__github{background-color:initial;color:#212529;display:inline-block;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;user-select:none}.btn.navbar__github,a.btn.navbar__github{border:2px solid #0000;border-radius:3px;font-size:1rem;font-weight:400;line-height:1.66}a.btn.navbar__github{align-items:center;font-family:poppins,sans-serif;padding:8px 20px 7px 47px;position:relative;text-decoration:none}.clear-btn{padding:100px}.btn-secondary.navbar__github:hover{background-color:#273230;border-color:#222a29;color:#fff}a.btn.navbar__github:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20.5 20'%3E%3Cpath fill='%23fff' d='M10.3 0C4.6 0 0 4.6 0 10.3c0 4.4 2.8 8.3 7 9.7.5.1.7-.2.7-.5v-1.9c-2.6.5-3.2-.6-3.4-1.2-.2-.6-.6-1.1-1-1.5-.4-.2-.9-.7 0-.7.7.1 1.3.5 1.6 1 .6 1.1 1.9 1.4 3 .8 0-.5.3-1 .7-1.4-2.3-.3-4.7-1.1-4.7-5.1 0-1 .4-2 1.1-2.8-.5-.6-.5-1.6-.1-2.5 0 0 .9-.3 2.8 1.1 1.7-.5 3.4-.5 5.1 0 2-1.3 2.8-1.1 2.8-1.1.4.9.5 1.9.2 2.8.7.7 1.1 1.7 1.1 2.8 0 3.9-2.4 4.8-4.7 5.1.5.5.7 1.2.7 1.9v2.8c0 .3.2.6.7.5 5.4-1.8 8.3-7.6 6.5-13C18.6 2.8 14.7 0 10.3 0z'/%3E%3C/svg%3E");content:"";height:20px;left:15px;position:absolute;top:10px;width:20px}.icon-github.navbar__github{margin-left:20px}.btn-secondary.navbar__github{background-color:#384745;border-color:#384745;box-shadow:inset 0 1px #ffffff26,0 1px 1px #00000014;color:#fff!important}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.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}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s 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:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.landing_V_Km h2,.textCenter_vU5G{text-align:center}.codeLineNumber_Tfdd:before{content:counter(a);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{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;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)}.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:"#"}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.bgPrimary_wt5q{background-color:var(--ifm-color-secondary)}[data-theme=dark] .bgPrimary_wt5q{background-color:var(--ifm-color-primary)}.bgLight_K4GO{background-color:var(--light)}.wrap_T5Hr{margin:0 auto;max-width:1200px;padding-top:8rem;width:75%}.landing_V_Km{font-family:roboto,sans-serif;font-size:10px}.landing_V_Km p{font-size:1.5em;line-height:1.5rem;margin-bottom:2rem}.landing_V_Km h1{color:#fff;font-size:5em}.landing_V_Km h1,.landing_V_Km h2{line-height:4rem;margin-bottom:3rem}.landing_V_Km h2{font-size:3em}.landing_V_Km h3{font-size:2.5em;line-height:3.5rem;margin-bottom:3rem}.landing_V_Km h2.learn_more_oZtu,.landing_V_Km h3.learn_more_oZtu{color:#fff;margin-bottom:1rem}.landing_V_Km h4{font-size:2em;line-height:2rem;margin-bottom:1rem}.landing_V_Km h5{font-size:1.75em;line-height:2.75rem;margin-bottom:2rem}.landing_V_Km h6{font-size:1.4em;line-height:2.25rem;margin-bottom:2rem}.intro_q4os{align-items:end;column-gap:2rem;display:grid;padding:0;position:relative}.intro_q4os .gridTwo_s48r{grid-template-columns:60% auto}.intro_q4os .wrap_T5Hr{padding:5rem 0 15rem}.intro_q4os .folder_FnMF{grid-column:2/span 4;grid-row:5/span 3;z-index:2}.intro_q4os .bgPrimary_wt5q{color:var(--dark);grid-column:1/span 6;grid-row:3/span 4}.folder_FnMF h5,[data-theme=dark] .folder_FnMF h5,[data-theme=dark] .intro_q4os h1,[data-theme=dark] .intro_q4os h4,[data-theme=dark] .intro_q4os p{color:var(--dark)}.getStarted_D36F{display:grid;padding-top:3rem;position:relative}.getStarted_D36F .white_vU21{background:var(--light);box-shadow:0 0 20px #33313b80;grid-column:2/span 4;grid-row:2/span 4;padding:5rem;z-index:2}.getStarted_D36F .bgPrimary_wt5q{grid-column:1/span 6;grid-row:5/span 3;padding:10rem 0 5rem}[data-theme=dark] .learnMore_oBG3{background-color:var(--ifm-color-primary);color:var(--light)}.folder_FnMF h4{background-color:var(--ifm-color-primary-dark);color:var(--light);display:inline-block;margin:0;padding:10px 20px;position:relative}[data-theme=dark] .folder_FnMF h4{background-color:var(--ifm-color-secondary-light);color:var(--dark)}.folder_FnMF .bgLight_K4GO{background-color:var(--light);border-top:14px solid var(--ifm-color-primary-dark);box-shadow:0 0 20px #33313b80;padding:40px}[data-theme=dark] .folder_FnMF .bgLight_K4GO{border-top:14px solid var(--ifm-color-secondary-light)}.gridTwo_s48r{grid-gap:2rem;align-items:center;display:grid;grid-template-columns:repeat(2,1fr)}.gridThree__deY{grid-gap:2rem;display:grid;grid-template-columns:repeat(3,1fr)}.gridFour_wPQw{grid-gap:2rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.gridDynamic_yZrM h5{flex-basis:0;flex-grow:1;margin:0}pre{border-radius:3px;display:block;font-family:monospace;font-size:15px;line-height:1.6;margin-bottom:1.6em;overflow-wrap:break-word;padding:1em 1.5em;page-break-inside:avoid;white-space:pre-wrap}.imgBorder_ME4r{border:1px solid #33313b80}.tableOfContents_bqdL{position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}@media (min-width:997px){:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media screen and (max-width:1536px){.gridFour_wPQw{grid-template-columns:repeat(2,1fr)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.getStarted_D36F{grid-template-columns:repeat(8,1fr)}.getStarted_D36F .white_vU21{grid-column:2/span 6}.getStarted_D36F .bgPrimary_wt5q{grid-column:1/span 8}.gridFour_wPQw,.gridThree__deY,.gridTwo_s48r,.intro_q4os .gridTwo_s48r{grid-template-columns:1fr}}@media (max-width:768px){#theme-main h1{font-size:50px!important;font-weight:700;line-height:3rem!important}#theme-main .header-docs{margin-bottom:20px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (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 print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/css/styles.f8d81ff5.css b/assets/css/styles.f8d81ff5.css deleted file mode 100644 index 2383755..0000000 --- a/assets/css/styles.f8d81ff5.css +++ /dev/null @@ -1 +0,0 @@ -.col,.container{padding:0 var(--ifm-spacing-horizontal);width:100%}.markdown>h2,.markdown>h3,.markdown>h4,.markdown>h5,.markdown>h6{margin-bottom:calc(var(--ifm-heading-vertical-rhythm-bottom)*var(--ifm-leading))}blockquote,pre{margin:0 0 var(--ifm-spacing-vertical)}.breadcrumbs__link,.button{transition-timing-function:var(--ifm-transition-timing-default)}.btn.navbar__github,.button{-webkit-user-select:none;vertical-align:middle}.button--outline.button--active,.button--outline:active,.button--outline:hover,:root{--ifm-button-color:var(--ifm-font-color-base-inverse)}.menu__link:hover,a{transition:color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.navbar--dark,:root{--ifm-navbar-link-hover-color:var(--ifm-color-primary)}.menu,.navbar-sidebar{overflow-x:hidden}:root,html[data-theme=dark]{--ifm-color-emphasis-500:var(--ifm-color-gray-500)}.btn.navbar__github,.button,code{vertical-align:middle}.toggleButton_gllP,html{-webkit-tap-highlight-color:transparent}.clean-list,.containsTaskList_mC6p,.details_lb9f>summary,.dropdown__menu,.menu__list{list-style:none}*,.wrap_T5Hr{box-sizing:border-box}.markdown li,body,pre{word-wrap:break-word}img,pre{max-width:100%}pre,table{overflow:auto}:root{--ifm-color-scheme:light;--ifm-dark-value:10%;--ifm-darker-value:15%;--ifm-darkest-value:30%;--ifm-light-value:15%;--ifm-lighter-value:30%;--ifm-lightest-value:50%;--ifm-contrast-background-value:90%;--ifm-contrast-foreground-value:70%;--ifm-contrast-background-dark-value:70%;--ifm-contrast-foreground-dark-value:90%;--ifm-color-primary:#3578e5;--ifm-color-secondary:#ebedf0;--ifm-color-success:#00a400;--ifm-color-info:#54c7ec;--ifm-color-warning:#ffba00;--ifm-color-danger:#fa383e;--ifm-color-primary-dark:#306cce;--ifm-color-primary-darker:#2d66c3;--ifm-color-primary-darkest:#2554a0;--ifm-color-primary-light:#538ce9;--ifm-color-primary-lighter:#72a1ed;--ifm-color-primary-lightest:#9abcf2;--ifm-color-primary-contrast-background:#ebf2fc;--ifm-color-primary-contrast-foreground:#102445;--ifm-color-secondary-dark:#d4d5d8;--ifm-color-secondary-darker:#c8c9cc;--ifm-color-secondary-darkest:#a4a6a8;--ifm-color-secondary-light:#eef0f2;--ifm-color-secondary-lighter:#f1f2f5;--ifm-color-secondary-lightest:#f5f6f8;--ifm-color-secondary-contrast-background:#fdfdfe;--ifm-color-secondary-contrast-foreground:#474748;--ifm-color-success-dark:#009400;--ifm-color-success-darker:#008b00;--ifm-color-success-darkest:#007300;--ifm-color-success-light:#26b226;--ifm-color-success-lighter:#4dbf4d;--ifm-color-success-lightest:#80d280;--ifm-color-success-contrast-background:#e6f6e6;--ifm-color-success-contrast-foreground:#003100;--ifm-color-info-dark:#4cb3d4;--ifm-color-info-darker:#47a9c9;--ifm-color-info-darkest:#3b8ba5;--ifm-color-info-light:#6ecfef;--ifm-color-info-lighter:#87d8f2;--ifm-color-info-lightest:#aae3f6;--ifm-color-info-contrast-background:#eef9fd;--ifm-color-info-contrast-foreground:#193c47;--ifm-color-warning-dark:#e6a700;--ifm-color-warning-darker:#d99e00;--ifm-color-warning-darkest:#b38200;--ifm-color-warning-light:#ffc426;--ifm-color-warning-lighter:#ffcf4d;--ifm-color-warning-lightest:#ffdd80;--ifm-color-warning-contrast-background:#fff8e6;--ifm-color-warning-contrast-foreground:#4d3800;--ifm-color-danger-dark:#e13238;--ifm-color-danger-darker:#d53035;--ifm-color-danger-darkest:#af272b;--ifm-color-danger-light:#fb565b;--ifm-color-danger-lighter:#fb7478;--ifm-color-danger-lightest:#fd9c9f;--ifm-color-danger-contrast-background:#ffebec;--ifm-color-danger-contrast-foreground:#4b1113;--ifm-color-white:#fff;--ifm-color-black:#000;--ifm-color-gray-0:var(--ifm-color-white);--ifm-color-gray-100:#f5f6f7;--ifm-color-gray-200:#ebedf0;--ifm-color-gray-300:#dadde1;--ifm-color-gray-400:#ccd0d5;--ifm-color-gray-500:#bec3c9;--ifm-color-gray-600:#8d949e;--ifm-color-gray-700:#606770;--ifm-color-gray-800:#444950;--ifm-color-gray-900:#1c1e21;--ifm-color-gray-1000:var(--ifm-color-black);--ifm-color-emphasis-0:var(--ifm-color-gray-0);--ifm-color-emphasis-100:var(--ifm-color-gray-100);--ifm-color-emphasis-200:var(--ifm-color-gray-200);--ifm-color-emphasis-300:var(--ifm-color-gray-300);--ifm-color-emphasis-400:var(--ifm-color-gray-400);--ifm-color-emphasis-600:var(--ifm-color-gray-600);--ifm-color-emphasis-700:var(--ifm-color-gray-700);--ifm-color-emphasis-800:var(--ifm-color-gray-800);--ifm-color-emphasis-900:var(--ifm-color-gray-900);--ifm-color-emphasis-1000:var(--ifm-color-gray-1000);--ifm-color-content:var(--ifm-color-emphasis-900);--ifm-color-content-inverse:var(--ifm-color-emphasis-0);--ifm-color-content-secondary:#525860;--ifm-background-color:#0000;--ifm-background-surface-color:var(--ifm-color-content-inverse);--ifm-global-border-width:1px;--ifm-global-radius:0.4rem;--ifm-hover-overlay:#0000000d;--ifm-font-color-base:var(--ifm-color-content);--ifm-font-color-base-inverse:var(--ifm-color-content-inverse);--ifm-font-color-secondary:var(--ifm-color-content-secondary);--ifm-font-family-base:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--ifm-font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--ifm-font-size-base:100%;--ifm-font-weight-light:300;--ifm-font-weight-normal:400;--ifm-font-weight-semibold:500;--ifm-font-weight-bold:700;--ifm-font-weight-base:var(--ifm-font-weight-normal);--ifm-line-height-base:1.65;--ifm-global-spacing:1rem;--ifm-spacing-vertical:var(--ifm-global-spacing);--ifm-spacing-horizontal:var(--ifm-global-spacing);--ifm-transition-fast:200ms;--ifm-transition-slow:400ms;--ifm-transition-timing-default:cubic-bezier(0.08,0.52,0.52,1);--ifm-global-shadow-lw:0 1px 2px 0 #0000001a;--ifm-global-shadow-md:0 5px 40px #0003;--ifm-global-shadow-tl:0 12px 28px 0 #0003,0 2px 4px 0 #0000001a;--ifm-z-index-dropdown:100;--ifm-z-index-fixed:200;--ifm-z-index-overlay:400;--ifm-container-width:1140px;--ifm-container-width-xl:1320px;--ifm-code-background:#f6f7f8;--ifm-code-border-radius:var(--ifm-global-radius);--ifm-code-font-size:90%;--ifm-code-padding-horizontal:0.1rem;--ifm-code-padding-vertical:0.1rem;--ifm-pre-background:var(--ifm-code-background);--ifm-pre-border-radius:var(--ifm-code-border-radius);--ifm-pre-color:inherit;--ifm-pre-line-height:1.45;--ifm-pre-padding:1rem;--ifm-heading-color:inherit;--ifm-heading-margin-top:0;--ifm-heading-margin-bottom:var(--ifm-spacing-vertical);--ifm-heading-font-family:var(--ifm-font-family-base);--ifm-heading-font-weight:var(--ifm-font-weight-bold);--ifm-heading-line-height:1.25;--ifm-h1-font-size:2rem;--ifm-h2-font-size:1.5rem;--ifm-h3-font-size:1.25rem;--ifm-h4-font-size:1rem;--ifm-h5-font-size:0.875rem;--ifm-h6-font-size:0.85rem;--ifm-image-alignment-padding:1.25rem;--ifm-leading-desktop:1.25;--ifm-leading:calc(var(--ifm-leading-desktop)*1rem);--ifm-list-left-padding:2rem;--ifm-list-margin:1rem;--ifm-list-item-margin:0.25rem;--ifm-list-paragraph-margin:1rem;--ifm-table-cell-padding:0.75rem;--ifm-table-background:#0000;--ifm-table-stripe-background:#00000008;--ifm-table-border-width:1px;--ifm-table-border-color:var(--ifm-color-emphasis-300);--ifm-table-head-background:inherit;--ifm-table-head-color:inherit;--ifm-table-head-font-weight:var(--ifm-font-weight-bold);--ifm-table-cell-color:inherit;--ifm-link-color:var(--ifm-color-primary);--ifm-link-decoration:none;--ifm-link-hover-color:var(--ifm-link-color);--ifm-link-hover-decoration:underline;--ifm-paragraph-margin-bottom:var(--ifm-leading);--ifm-blockquote-font-size:var(--ifm-font-size-base);--ifm-blockquote-border-left-width:2px;--ifm-blockquote-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-blockquote-padding-vertical:0;--ifm-blockquote-shadow:none;--ifm-blockquote-color:var(--ifm-color-emphasis-800);--ifm-blockquote-border-color:var(--ifm-color-emphasis-300);--ifm-hr-background-color:var(--ifm-color-emphasis-500);--ifm-hr-height:1px;--ifm-hr-margin-vertical:1.5rem;--ifm-scrollbar-size:7px;--ifm-scrollbar-track-background-color:#f1f1f1;--ifm-scrollbar-thumb-background-color:silver;--ifm-scrollbar-thumb-hover-background-color:#a7a7a7;--ifm-alert-background-color:inherit;--ifm-alert-border-color:inherit;--ifm-alert-border-radius:var(--ifm-global-radius);--ifm-alert-border-width:0px;--ifm-alert-border-left-width:5px;--ifm-alert-color:var(--ifm-font-color-base);--ifm-alert-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-alert-padding-vertical:var(--ifm-spacing-vertical);--ifm-alert-shadow:var(--ifm-global-shadow-lw);--ifm-avatar-intro-margin:1rem;--ifm-avatar-intro-alignment:inherit;--ifm-avatar-photo-size:3rem;--ifm-badge-background-color:inherit;--ifm-badge-border-color:inherit;--ifm-badge-border-radius:var(--ifm-global-radius);--ifm-badge-border-width:var(--ifm-global-border-width);--ifm-badge-color:var(--ifm-color-white);--ifm-badge-padding-horizontal:calc(var(--ifm-spacing-horizontal)*0.5);--ifm-badge-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-breadcrumb-border-radius:1.5rem;--ifm-breadcrumb-spacing:0.5rem;--ifm-breadcrumb-color-active:var(--ifm-color-primary);--ifm-breadcrumb-item-background-active:var(--ifm-hover-overlay);--ifm-breadcrumb-padding-horizontal:0.8rem;--ifm-breadcrumb-padding-vertical:0.4rem;--ifm-breadcrumb-size-multiplier:1;--ifm-breadcrumb-separator:url('data:image/svg+xml;utf8,');--ifm-breadcrumb-separator-filter:none;--ifm-breadcrumb-separator-size:0.5rem;--ifm-breadcrumb-separator-size-multiplier:1.25;--ifm-button-background-color:inherit;--ifm-button-border-color:var(--ifm-button-background-color);--ifm-button-border-width:var(--ifm-global-border-width);--ifm-button-font-weight:var(--ifm-font-weight-bold);--ifm-button-padding-horizontal:1.5rem;--ifm-button-padding-vertical:0.375rem;--ifm-button-size-multiplier:1;--ifm-button-transition-duration:var(--ifm-transition-fast);--ifm-button-border-radius:calc(var(--ifm-global-radius)*var(--ifm-button-size-multiplier));--ifm-button-group-spacing:2px;--ifm-card-background-color:var(--ifm-background-surface-color);--ifm-card-border-radius:calc(var(--ifm-global-radius)*2);--ifm-card-horizontal-spacing:var(--ifm-global-spacing);--ifm-card-vertical-spacing:var(--ifm-global-spacing);--ifm-toc-border-color:var(--ifm-color-emphasis-300);--ifm-toc-link-color:var(--ifm-color-content-secondary);--ifm-toc-padding-vertical:0.5rem;--ifm-toc-padding-horizontal:0.5rem;--ifm-dropdown-background-color:var(--ifm-background-surface-color);--ifm-dropdown-font-weight:var(--ifm-font-weight-semibold);--ifm-dropdown-link-color:var(--ifm-font-color-base);--ifm-dropdown-hover-background-color:var(--ifm-hover-overlay);--ifm-footer-background-color:var(--ifm-color-emphasis-100);--ifm-footer-color:inherit;--ifm-footer-link-color:var(--ifm-color-emphasis-700);--ifm-footer-link-hover-color:var(--ifm-color-primary);--ifm-footer-link-horizontal-spacing:0.5rem;--ifm-footer-padding-horizontal:calc(var(--ifm-spacing-horizontal)*2);--ifm-footer-padding-vertical:calc(var(--ifm-spacing-vertical)*2);--ifm-footer-title-color:inherit;--ifm-footer-logo-max-width:min(30rem,90vw);--ifm-hero-background-color:var(--ifm-background-surface-color);--ifm-hero-text-color:var(--ifm-color-emphasis-800);--ifm-menu-color:var(--ifm-color-emphasis-700);--ifm-menu-color-active:var(--ifm-color-primary);--ifm-menu-color-background-active:var(--ifm-hover-overlay);--ifm-menu-color-background-hover:var(--ifm-hover-overlay);--ifm-menu-link-padding-horizontal:0.75rem;--ifm-menu-link-padding-vertical:0.375rem;--ifm-menu-link-sublist-icon:url('data:image/svg+xml;utf8,');--ifm-menu-link-sublist-icon-filter:none;--ifm-navbar-background-color:var(--ifm-background-surface-color);--ifm-navbar-height:3.75rem;--ifm-navbar-item-padding-horizontal:0.75rem;--ifm-navbar-item-padding-vertical:0.25rem;--ifm-navbar-link-color:var(--ifm-font-color-base);--ifm-navbar-link-active-color:var(--ifm-link-color);--ifm-navbar-padding-horizontal:var(--ifm-spacing-horizontal);--ifm-navbar-padding-vertical:calc(var(--ifm-spacing-vertical)*0.5);--ifm-navbar-shadow:var(--ifm-global-shadow-lw);--ifm-navbar-search-input-background-color:var(--ifm-color-emphasis-200);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-800);--ifm-navbar-search-input-placeholder-color:var(--ifm-color-emphasis-500);--ifm-navbar-search-input-icon:url('data:image/svg+xml;utf8,');--ifm-navbar-sidebar-width:83vw;--ifm-pagination-border-radius:var(--ifm-global-radius);--ifm-pagination-color-active:var(--ifm-color-primary);--ifm-pagination-font-size:1rem;--ifm-pagination-item-active-background:var(--ifm-hover-overlay);--ifm-pagination-page-spacing:0.2em;--ifm-pagination-padding-horizontal:calc(var(--ifm-spacing-horizontal)*1);--ifm-pagination-padding-vertical:calc(var(--ifm-spacing-vertical)*0.25);--ifm-pagination-nav-border-radius:var(--ifm-global-radius);--ifm-pagination-nav-color-hover:var(--ifm-color-primary);--ifm-pills-color-active:var(--ifm-color-primary);--ifm-pills-color-background-active:var(--ifm-hover-overlay);--ifm-pills-spacing:0.125rem;--ifm-tabs-color:var(--ifm-font-color-secondary);--ifm-tabs-color-active:var(--ifm-color-primary);--ifm-tabs-color-active-border:var(--ifm-tabs-color-active);--ifm-tabs-padding-horizontal:1rem;--ifm-tabs-padding-vertical:1rem;--docusaurus-progress-bar-color:var(--ifm-color-primary);--ifm-color-primary:#06527a;--ifm-color-primary-dark:#06527a;--ifm-color-primary-darker:#054668;--ifm-color-primary-darkest:#043955;--ifm-color-primary-light:#075a86;--ifm-color-primary-lighter:#075e8c;--ifm-color-primary-lightest:#086b9f;--ifm-color-secondary:#067ac4;--ifm-color-secondary-light:#2dbdbd;--dark:#33313b;--light:#f3f3f3;--docusaurus-announcement-bar-height:auto;--docusaurus-tag-list-border:var(--ifm-color-emphasis-300)}.badge--danger,.badge--info,.badge--primary,.badge--secondary,.badge--success,.badge--warning{--ifm-badge-border-color:var(--ifm-badge-background-color)}.button--link,.button--outline{--ifm-button-background-color:#0000}*{box-sizing:inherit}html{-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;text-size-adjust:100%;background-color:var(--ifm-background-color);color:var(--ifm-font-color-base);color-scheme:var(--ifm-color-scheme);font:var(--ifm-font-size-base)/var(--ifm-line-height-base) var(--ifm-font-family-base);text-rendering:optimizelegibility}iframe{border:0;color-scheme:auto}.container{margin:0 auto;max-width:var(--ifm-container-width)}.container--fluid{max-width:inherit}.row{display:flex;flex-wrap:wrap;margin:0 calc(var(--ifm-spacing-horizontal)*-1)}.margin-bottom--none,.margin-vert--none,.markdown>:last-child{margin-bottom:0!important}.margin-top--none,.margin-vert--none{margin-top:0!important}.row--no-gutters{margin-left:0;margin-right:0}.margin-horiz--none,.margin-right--none{margin-right:0!important}.row--no-gutters>.col{padding-left:0;padding-right:0}.row--align-top{align-items:flex-start}.row--align-bottom{align-items:flex-end}.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;--ifm-heading-vertical-rhythm-bottom:1}.markdown:after,.markdown:before{content:"";display:table}.markdown:after{clear:both}.markdown h1:first-child{--ifm-h1-font-size:3rem;margin-bottom:calc(var(--ifm-h1-vertical-rhythm-bottom)*var(--ifm-leading))}.markdown>h2{--ifm-h2-font-size:2rem;margin-top:calc(var(--ifm-h2-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h3{--ifm-h3-font-size:1.5rem;margin-top:calc(var(--ifm-h3-vertical-rhythm-top)*var(--ifm-leading))}.markdown>h4,.markdown>h5,.markdown>h6{margin-top:calc(var(--ifm-heading-vertical-rhythm-top)*var(--ifm-leading))}.markdown>p,.markdown>pre,.markdown>ul{margin-bottom:var(--ifm-leading)}.markdown li>p{margin-top:var(--ifm-list-paragraph-margin)}.markdown li+li{margin-top:var(--ifm-list-item-margin)}ol,ul{margin:0 0 var(--ifm-list-margin);padding-left:var(--ifm-list-left-padding)}ol ol,ul ol{list-style-type:lower-roman}ol ol,ol 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{border-collapse:collapse;display:block;margin-bottom:var(--ifm-spacing-vertical)}table thead tr{border-bottom:2px solid var(--ifm-table-border-color)}table thead,table tr:nth-child(2n){background-color:var(--ifm-table-stripe-background)}table tr{background-color:var(--ifm-table-background);border-top:var(--ifm-table-border-width) solid var(--ifm-table-border-color)}table td,table th{border:var(--ifm-table-border-width) solid var(--ifm-table-border-color);padding:var(--ifm-table-cell-padding)}table th{background-color:var(--ifm-table-head-background);color:var(--ifm-table-head-color);font-weight:var(--ifm-table-head-font-weight)}table td{color:var(--ifm-table-cell-color)}strong{font-weight:var(--ifm-font-weight-bold)}a{color:var(--ifm-link-color);text-decoration:var(--ifm-link-decoration)}a:hover{color:var(--ifm-link-hover-color);text-decoration:var(--ifm-link-hover-decoration)}.button:hover,.text--no-decoration,.text--no-decoration:hover,a:not([href]){text-decoration:none}p{margin:0 0 var(--ifm-paragraph-margin-bottom)}blockquote{border-left:var(--ifm-blockquote-border-left-width) solid var(--ifm-blockquote-border-color);box-shadow:var(--ifm-blockquote-shadow);color:var(--ifm-blockquote-color);font-size:var(--ifm-blockquote-font-size);padding:var(--ifm-blockquote-padding-vertical) var(--ifm-blockquote-padding-horizontal)}blockquote>:first-child{margin-top:0}blockquote>:last-child{margin-bottom:0}hr{background-color:var(--ifm-hr-background-color);border:0;height:var(--ifm-hr-height);margin:var(--ifm-hr-margin-vertical) 0;background-image:-webkit-linear-gradient(left,#f3f3f3,#adadb1,#f3f3f3);margin:0 auto}.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,[data-theme=dark] .intro_q4os a,h4,h5,h6{color:var(--ifm-color-secondary)}.text--success{color:var(--ifm-color-success)}.text--info{color:var(--ifm-color-info)}.text--warning{color:var(--ifm-color-warning)}.text--danger{color:var(--ifm-color-danger)}.text--center{text-align:center}.text--left{text-align:left}.text--justify{text-align:justify}.text--right{text-align:right}.text--capitalize{text-transform:capitalize}.text--lowercase{text-transform:lowercase}.admonitionHeading_tbUL,.alert__heading,.text--uppercase{text-transform:uppercase}.text--light{font-weight:var(--ifm-font-weight-light)}.text--normal{font-weight:var(--ifm-font-weight-normal)}.text--semibold{font-weight:var(--ifm-font-weight-semibold)}.text--bold{font-weight:var(--ifm-font-weight-bold)}.text--italic{font-style:italic}.text--truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text--break{word-wrap:break-word!important;word-break:break-word!important}.clean-btn{background:none;border:none;color:inherit;cursor:pointer;font-family:inherit;padding:0}.alert,.alert .close{color:var(--ifm-alert-foreground-color)}.clean-list{padding-left:0}.alert--primary{--ifm-alert-background-color:var(--ifm-color-primary-contrast-background);--ifm-alert-background-color-highlight:#3578e526;--ifm-alert-foreground-color:var(--ifm-color-primary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-primary-dark)}.alert--secondary{--ifm-alert-background-color:var(--ifm-color-secondary-contrast-background);--ifm-alert-background-color-highlight:#ebedf026;--ifm-alert-foreground-color:var(--ifm-color-secondary-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-secondary-dark)}.alert--success{--ifm-alert-background-color:var(--ifm-color-success-contrast-background);--ifm-alert-background-color-highlight:#00a40026;--ifm-alert-foreground-color:var(--ifm-color-success-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-success-dark)}.alert--info{--ifm-alert-background-color:var(--ifm-color-info-contrast-background);--ifm-alert-background-color-highlight:#54c7ec26;--ifm-alert-foreground-color:var(--ifm-color-info-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-info-dark)}.alert--warning{--ifm-alert-background-color:var(--ifm-color-warning-contrast-background);--ifm-alert-background-color-highlight:#ffba0026;--ifm-alert-foreground-color:var(--ifm-color-warning-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-warning-dark)}.alert--danger{--ifm-alert-background-color:var(--ifm-color-danger-contrast-background);--ifm-alert-background-color-highlight:#fa383e26;--ifm-alert-foreground-color:var(--ifm-color-danger-contrast-foreground);--ifm-alert-border-color:var(--ifm-color-danger-dark)}.alert{--ifm-code-background:var(--ifm-alert-background-color-highlight);--ifm-link-color:var(--ifm-alert-foreground-color);--ifm-link-hover-color:var(--ifm-alert-foreground-color);--ifm-link-decoration:underline;--ifm-tabs-color:var(--ifm-alert-foreground-color);--ifm-tabs-color-active:var(--ifm-alert-foreground-color);--ifm-tabs-color-active-border:var(--ifm-alert-border-color);background-color:var(--ifm-alert-background-color);border:var(--ifm-alert-border-width) solid var(--ifm-alert-border-color);border-left-width:var(--ifm-alert-border-left-width);border-radius:var(--ifm-alert-border-radius);box-shadow:var(--ifm-alert-shadow);padding:var(--ifm-alert-padding-vertical) var(--ifm-alert-padding-horizontal)}.alert__heading{align-items:center;display:flex;font:700 var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.5rem}.alert__icon{display:inline-flex;margin-right:.4em}.alert__icon svg{fill:var(--ifm-alert-foreground-color);stroke:var(--ifm-alert-foreground-color);stroke-width:0}.alert .close{margin:calc(var(--ifm-alert-padding-vertical)*-1) calc(var(--ifm-alert-padding-horizontal)*-1) 0 0;opacity:.75}.alert .close:focus,.alert .close:hover{opacity:1}.alert a{text-decoration-color:var(--ifm-alert-border-color)}.alert a:hover{text-decoration-thickness:2px}.avatar{column-gap:var(--ifm-avatar-intro-margin);display:flex}.avatar__photo{border-radius:50%;display:block;height:var(--ifm-avatar-photo-size);overflow:hidden;width:var(--ifm-avatar-photo-size)}.card--full-height,.navbar__logo img,body,html{height:100%}.avatar__photo--sm{--ifm-avatar-photo-size:2rem}.avatar__photo--lg{--ifm-avatar-photo-size:4rem}.avatar__photo--xl{--ifm-avatar-photo-size:6rem}.avatar__intro{display:flex;flex:1 1;flex-direction:column;justify-content:center;text-align:var(--ifm-avatar-intro-alignment)}.badge,.breadcrumbs__item,.breadcrumbs__link,.button,.dropdown>.navbar__link:after{display:inline-block}.avatar__name{font:700 var(--ifm-h4-font-size)/var(--ifm-heading-line-height) var(--ifm-font-family-base)}.avatar__subtitle{margin-top:.25rem}.avatar--vertical{--ifm-avatar-intro-alignment:center;--ifm-avatar-intro-margin:0.5rem;align-items:center;flex-direction:column}.badge{background-color:var(--ifm-badge-background-color);border:var(--ifm-badge-border-width) solid var(--ifm-badge-border-color);border-radius:var(--ifm-badge-border-radius);color:var(--ifm-badge-color);font-size:75%;font-weight:var(--ifm-font-weight-bold);line-height:1;padding:var(--ifm-badge-padding-vertical) var(--ifm-badge-padding-horizontal)}.badge--primary{--ifm-badge-background-color:var(--ifm-color-primary)}.badge--secondary{--ifm-badge-background-color:var(--ifm-color-secondary);color:var(--ifm-color-black)}.breadcrumbs__link,.button.button--secondary.button--outline:not(.button--active):not(:hover){color:var(--ifm-font-color-base)}.badge--success{--ifm-badge-background-color:var(--ifm-color-success)}.badge--info{--ifm-badge-background-color:var(--ifm-color-info)}.badge--warning{--ifm-badge-background-color:var(--ifm-color-warning)}.badge--danger{--ifm-badge-background-color:var(--ifm-color-danger)}.breadcrumbs{margin-bottom:0;padding-left:0}.breadcrumbs__item:not(:last-child):after{background:var(--ifm-breadcrumb-separator) center;content:" ";display:inline-block;filter:var(--ifm-breadcrumb-separator-filter);height:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier));margin:0 var(--ifm-breadcrumb-spacing);opacity:.5;width:calc(var(--ifm-breadcrumb-separator-size)*var(--ifm-breadcrumb-size-multiplier)*var(--ifm-breadcrumb-separator-size-multiplier))}.breadcrumbs__item--active .breadcrumbs__link{background:var(--ifm-breadcrumb-item-background-active);color:var(--ifm-breadcrumb-color-active)}.breadcrumbs__link{border-radius:var(--ifm-breadcrumb-border-radius);font-size:calc(1rem*var(--ifm-breadcrumb-size-multiplier));padding:calc(var(--ifm-breadcrumb-padding-vertical)*var(--ifm-breadcrumb-size-multiplier)) calc(var(--ifm-breadcrumb-padding-horizontal)*var(--ifm-breadcrumb-size-multiplier));transition-duration:var(--ifm-transition-fast);transition-property:background,color}.breadcrumbs__link:any-link:hover,.breadcrumbs__link:link:hover,.breadcrumbs__link:visited:hover,area.breadcrumbs__link[href]: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;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}.content_knG7 a,.intro_q4os a{text-decoration:underline}.close{color:var(--ifm-color-black);float:right;font-size:1.5rem;font-weight:var(--ifm-font-weight-bold);line-height:1;opacity:.5;padding:1rem;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.close:hover{opacity:.7}.close:focus,.theme-code-block-highlighted-line .codeLineNumber_Tfdd:before{opacity:.8}.dropdown{display:inline-flex;font-weight:var(--ifm-dropdown-font-weight);position:relative;vertical-align:top}.dropdown--hoverable:hover .dropdown__menu,.dropdown--show .dropdown__menu{opacity:1;pointer-events:all;transform:translateY(-1px);visibility:visible}#nprogress,.dropdown__menu,.navbar__item.dropdown .navbar__link:not([href]){pointer-events:none}.dropdown--right .dropdown__menu{left:inherit;right:0}.dropdown--nocaret .navbar__link:after{content:none!important}.dropdown__menu{background-color:var(--ifm-dropdown-background-color);border-radius:var(--ifm-global-radius);box-shadow:var(--ifm-global-shadow-md);left:0;max-height:80vh;min-width:10rem;opacity:0;overflow-y:auto;padding:.5rem;position:absolute;top:calc(100% - var(--ifm-navbar-item-padding-vertical) + .3rem);transform:translateY(-.625rem);transition-duration:var(--ifm-transition-fast);transition-property:opacity,transform,visibility;transition-timing-function:var(--ifm-transition-timing-default);visibility:hidden;z-index:var(--ifm-z-index-dropdown)}.sidebar_re4s,.tableOfContents_bqdL{max-height:calc(100vh - var(--ifm-navbar-height) - 2rem);overflow-y:auto}.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)}.footer__item{margin-top:0}.admonitionContent_S0QG>:last-child,.collapsibleContent_i85q>:last-child,.footer__items{margin-bottom:0}.codeBlockStandalone_MEMb,[type=checkbox]{padding:0}.hero{align-items:center;background-color:var(--ifm-hero-background-color);color:var(--ifm-hero-text-color);display:flex;padding:4rem 2rem}.hero--primary{--ifm-hero-background-color:var(--ifm-color-primary);--ifm-hero-text-color:var(--ifm-font-color-base-inverse)}.hero--dark{--ifm-hero-background-color:#303846;--ifm-hero-text-color:var(--ifm-color-white)}.hero__title,.title_f1Hy{font-size:3rem}.hero__subtitle{font-size:1.5rem}.menu__list{margin:0;padding-left:0}.menu__caret,.menu__link{padding:var(--ifm-menu-link-padding-vertical) var(--ifm-menu-link-padding-horizontal)}.menu__list .menu__list{flex:0 0 100%;margin-top:.25rem;padding-left:var(--ifm-menu-link-padding-horizontal)}.menu__list-item:not(:first-child){margin-top:.25rem}.menu__list-item--collapsed .menu__list{height:0;overflow:hidden}.details_lb9f[data-collapsed=false].isBrowser_bmU9>summary:before,.details_lb9f[open]:not(.isBrowser_bmU9)>summary:before,.menu__list-item--collapsed .menu__caret:before,.menu__list-item--collapsed .menu__link--sublist:after{transform:rotate(90deg)}.menu__list-item-collapsible{display:flex;flex-wrap:wrap;position:relative}.menu__caret:hover,.menu__link:hover,.menu__list-item-collapsible--active,.menu__list-item-collapsible:hover{background:var(--ifm-menu-color-background-hover)}.menu__list-item-collapsible .menu__link--active,.menu__list-item-collapsible .menu__link:hover{background:none!important}.menu__caret,.menu__link{align-items:center;display:flex}.menu__link{color:var(--ifm-menu-color);flex:1;line-height:1.25}.menu__link:hover{color:var(--ifm-menu-color);text-decoration:none}.menu__caret:before,.menu__link--sublist-caret:after{filter:var(--ifm-menu-link-sublist-icon-filter);height:1.25rem;transform:rotate(180deg);transition:transform var(--ifm-transition-fast) linear;width:1.25rem;content:""}.menu__link--sublist-caret:after{background:var(--ifm-menu-link-sublist-icon) 50%/2rem 2rem;margin-left:auto;min-width:1.25rem}.navbar__items--center .navbar__brand,body{margin:0}.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)}.gridDynamic_yZrM,.navbar,.navbar>.container,.navbar>.container-fluid{display:flex}.navbar--fixed-top{position:sticky;top:0;z-index:var(--ifm-z-index-fixed)}.navbar-sidebar,.navbar-sidebar__backdrop{bottom:0;position:fixed;transition-timing-function:ease-in-out;visibility:hidden;left:0;top:0;opacity:0}.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__items--right{flex:1}.navbar__items--right{flex:0 0 auto;justify-content:flex-end}.navbar__items--right>:last-child{padding-right:0}.navbar__item{display:inline-block;padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}.navbar__link--active,.navbar__link:hover{color:var(--ifm-navbar-link-hover-color);text-decoration:none}.navbar--dark,.navbar--primary{--ifm-menu-color:var(--ifm-color-gray-300);--ifm-navbar-link-color:var(--ifm-color-gray-100);--ifm-navbar-search-input-background-color:#ffffff1a;--ifm-navbar-search-input-placeholder-color:#ffffff80;color:var(--ifm-color-white)}.navbar--dark{--ifm-navbar-background-color:#242526;--ifm-menu-color-background-active:#ffffff0d;--ifm-navbar-search-input-color:var(--ifm-color-white)}.navbar--primary{--ifm-navbar-background-color:var(--ifm-color-primary);--ifm-navbar-link-hover-color:var(--ifm-color-white);--ifm-menu-color-active:var(--ifm-color-white);--ifm-navbar-search-input-color:var(--ifm-color-emphasis-500)}.navbar__search-input{-webkit-appearance:none;appearance:none;background:var(--ifm-navbar-search-input-background-color) var(--ifm-navbar-search-input-icon) no-repeat .75rem center/1rem 1rem;border:none;border-radius:2rem;color:var(--ifm-navbar-search-input-color);cursor:text;display:inline-block;font-size:.9rem;height:2rem;padding:0 .5rem 0 2.25rem;width:12.5rem}.navbar__search-input::placeholder{color:var(--ifm-navbar-search-input-placeholder-color)}.navbar-sidebar{background-color:var(--ifm-navbar-background-color);box-shadow:var(--ifm-global-shadow-md);transform:translate3d(-100%,0,0);transition-duration:.25s;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-duration:.1s;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,.sidebarItemLink_mo7H:hover{text-decoration:none}.pagination-nav{grid-gap:var(--ifm-spacing-horizontal);display:grid;gap:var(--ifm-spacing-horizontal);grid-template-columns:repeat(2,1fr)}.getStarted_D36F,.intro_q4os{grid-template-columns:repeat(6,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,.sidebarItemTitle_pO2u,.tabs{font-weight:var(--ifm-font-weight-bold)}.pills{display:flex;gap:var(--ifm-pills-spacing);padding-left:0}.pills__item{border-radius:.5rem;cursor:pointer;display:inline-block;padding:.25rem 1rem;transition:background var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.pills__item--active{color:var(--ifm-pills-color-active)}.pills__item--active,.pills__item:not(.pills__item--active):hover{background:var(--ifm-pills-color-background-active)}.pills--block{justify-content:stretch}.pills--block .pills__item{flex-grow:1;text-align:center}.tabs{color:var(--ifm-tabs-color);display:flex;margin-bottom:0;overflow-x:auto;padding-left:0}.tabs__item{border-bottom:3px solid #0000;border-radius:var(--ifm-global-radius);cursor:pointer;display:inline-flex;padding:var(--ifm-tabs-padding-vertical) var(--ifm-tabs-padding-horizontal);transition:background-color var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.tabs__item--active{border-bottom-color:var(--ifm-tabs-color-active-border);border-bottom-left-radius:0;border-bottom-right-radius:0;color:var(--ifm-tabs-color-active)}.tabs__item:hover{background-color:var(--ifm-hover-overlay)}.tabs--block{justify-content:stretch}.tabs--block .tabs__item{flex-grow:1;justify-content:center}html[data-theme=dark]{--ifm-color-scheme:dark;--ifm-color-emphasis-0:var(--ifm-color-gray-1000);--ifm-color-emphasis-100:var(--ifm-color-gray-900);--ifm-color-emphasis-200:var(--ifm-color-gray-800);--ifm-color-emphasis-300:var(--ifm-color-gray-700);--ifm-color-emphasis-400:var(--ifm-color-gray-600);--ifm-color-emphasis-600:var(--ifm-color-gray-400);--ifm-color-emphasis-700:var(--ifm-color-gray-300);--ifm-color-emphasis-800:var(--ifm-color-gray-200);--ifm-color-emphasis-900:var(--ifm-color-gray-100);--ifm-color-emphasis-1000:var(--ifm-color-gray-0);--ifm-background-color:#1b1b1d;--ifm-background-surface-color:#242526;--ifm-hover-overlay:#ffffff0d;--ifm-color-content:#e3e3e3;--ifm-color-content-secondary:#fff;--ifm-breadcrumb-separator-filter:invert(64%) sepia(11%) saturate(0%) hue-rotate(149deg) brightness(99%) contrast(95%);--ifm-code-background:#ffffff1a;--ifm-scrollbar-track-background-color:#444;--ifm-scrollbar-thumb-background-color:#686868;--ifm-scrollbar-thumb-hover-background-color:#7a7a7a;--ifm-table-stripe-background:#ffffff12;--ifm-toc-border-color:var(--ifm-color-emphasis-200);--ifm-color-primary-contrast-background:#102445;--ifm-color-primary-contrast-foreground:#ebf2fc;--ifm-color-secondary-contrast-background:#474748;--ifm-color-secondary-contrast-foreground:#fdfdfe;--ifm-color-success-contrast-background:#003100;--ifm-color-success-contrast-foreground:#e6f6e6;--ifm-color-info-contrast-background:#193c47;--ifm-color-info-contrast-foreground:#eef9fd;--ifm-color-warning-contrast-background:#4d3800;--ifm-color-warning-contrast-foreground:#fff8e6;--ifm-color-danger-contrast-background:#4b1113;--ifm-color-danger-contrast-foreground:#ffebec}#nprogress .bar{background:var(--docusaurus-progress-bar-color);height:2px;left:0;position:fixed;top:0;width:100%;z-index:1031}#nprogress .peg{box-shadow:0 0 10px var(--docusaurus-progress-bar-color),0 0 5px var(--docusaurus-progress-bar-color);height:100%;opacity:1;position:absolute;right:0;transform:rotate(3deg) translateY(-4px);width:100px}@font-face{font-family:Poppins;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/poppins-regular-f61407da33b59324fbefe468ce6917ab.woff) format("woff2"),url(data:font/woff2;base64,d09GMgABAAAAAB7MAAwAAAAAP6AAAB54AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGx4cLgZgAIFUCudM0jYLgzYAATYCJAOGaAQgBYNcB4QLG34ysyLYOAAgoXcUUbVZLPs/JHBDBr6G+hIpYlQoaayFQFiGbR8DjCviFJxE41HqT/OOXC0/Z9GQVQfAWhGOAF/O89SlbJ4fIclsS0SNUfbMPgE5dhgAVqioPNrYqNhUZCQIRaCBLIK83W+vy6VjrXTMAYfFIfS65yPR0ziMQaj0M56vY3h+bj1EaSMJC9jIVbCMv+2vgv0FSxg1alhIGl2gBxecx4xqvCi9NvP2XXsT27xJRGharfanif3dB1IbH7D/n1vvG1gi90J+0acoU3UyzKzznZ8Q8S/KSQdFE/HKrFSrbCW+EZMGJ/JOrWFOCzJcLDcqMIye7xUDVgJSUf//a37amcAiFDGyIExnC3pkybH+6s19gXl5eXMmRB9Ln2eT0vLklZIpALkqpMkyJiUkt25tgVyFkF8WZYV0VRkTScF3O1cffLfDNqsTWFV2rwUPIfjECpG7lz5AAVbIGyfmmutgE0hgB8wJNaQ30lgYP+3xQCMZjDoEDzyVUi580bg7SwwCfbU2wM1JQR5DDgSJxZ7llnqObrxHpgXHgAOb7RkL2/gXhVu/D4DXAHqoBwD7DAQKDGCTWIoEB7JEnap7PP3Aas/+DynGHuqZ3u8P+0ZRlopUoQZt6CZzX2tbJVpJTFb5OJJs6W/YeiSlKS9d/6ya+d/8fZ6YS2ftgn326bdP//3yrm98rcc+6yxV+PO3P/P9e2I8D/za2srbgL+A1V8AG18HMDYA+dea0d4dnI0DUjAxhECe4VuLDc7VmwqwYTiuFzfuViWi6aNC0Z4wRhGs1DQggom7F3EXA3Uj7WxnxPmMGXjAq72EYaM9d+AG6ziGD0E2Ej5mwCsAOBXGWG1AYIJtCLwQDEeD1BqU5mmQH15SfTnMYUKO6QE/4F8j1ltms2QsVoSSz4WUYkelXQ/7kGlFRAxAW5s6qQqGsbVQl+8GCZsOFLXw0ul+mnssHngMiMV+wiHwzdVDGrfpDWLDkN8ewxN6ZRvyKaQ6K04Nqc6B6o8yc2SW7XOOuk1FcKA/XlsYa6voyRGelb8acI8ZbnoE+I9bLYFYSdUlo6Miyo+OYJqnPAsyYlzDkHe2VlOgYQcrDqbWBQEPfr7lShm/dUdxu7Up8/IxDbSiNG8zdthTYufBq+u76tI1uHc3vs7tLencpdyDGVdkPq4cQvLkEMhSXsY0J+4dQu0yRz7TZW7mccfhw18fQHPvvAbszInsG2aKiyHGmqz3Yvm3u8vmFpjxaPQezfuYJlpv3PN2ELEgVO3vPWKl2Ow/IpRJqDdPE8JqY3cYGuq1ECiB1yW0RVSa66GOdCXTLnh+xxeZ2xOqquVBgJFiAV77CqaFeYl2Q3S3BeKrdnAR3ZBPYM8o7ibQuBGK9xO3wKqYDmUkxZX+YNiXA09cBmjYPgA3eC8JPjEQxkjfWNFnGY2x+ej0ZGhv9VXwYAX9XZ1h53rzljTYf774b0vaBdtfcXWQxtyLpkaMb6v1GUsdrpV5ajkXRww17Pu1Ak3yTzYCGLr8Iara73lF7Cb+vtFNzajk4iaA8ltEQiOf66wxQAem4oXOWNTna0SswZSLr69zS/jeLLVejEOPPrPCBwhciHFchPFxIsHeTycPj9TzLzASCiQQ3wskAX5KdXKVa1sfQ/sqkMZ64u7bhwtw/U8GOoEbFSSWFLQnxd1WqtNBLxi8rBazf8BSfI/jBekq6kcBa1EXlt6oSzrtaXe+aXn1zDSw+t2F0YBoSCOqvK6Ty82lpKxNRobfRmluFw/KDLgqURpESW0OWpuaXaHkb7VmE8MOcR+a/dhsTsOYCArwsIQcjWl06SjVvNzhISxlLRqvol7V9Uvp5h+XUC6iUmapwuGiAxeC1khAQZdBxgFmUTC3Z4yjPVCczdRKlpb1KicmRnbBwTOOKbXkmmPFA5OJDMkKWz+t9i6mbI/as3b5+7k73N1wNPu9xjdrpg+sMm01qiKDGA5cKAYnIcm+Qfh+uhwzPoM6yGjV7B60MOvA1XEKSqIe0eUd09HDQqAknanN3NpKivMX9BiYBbda9g9oXcV/PqUdinIHcm/0xF16f7v01DQjzirvp4PZFBDVvuQsuKo43h6x4onbhb8L/aorsWA7vreavOxZrXrFsTJEMSfmbtxnkGGNSLjUx4n7KqyizvGq3pG6UbpMYLQKzia0LJaGR1CpXzjijsrdmFQNi3l3ZYBXuX+Llw+XK27BoJFUN5uJGbP5AMzwbSAAsF0Rv6p1ZltdaUBWVzRXCpFiUgwe6Baj927ntwXVUyMpM/vud4ksUyM6kqSZVDs0S3iuldjWchysX2vbV4o/Pz8amoTijmvhaPWLd9VIgu1A/oldyDH0JWVzJzxjd0w6fMbXH0zOZ8+5usPgm5jaIvuHGYtiiiYCEnuoL1AdNtUB41RrTZ7Prwsb3D4W0uh3f+8i9Y0bosq9ebt7S1nLbRmg04XpC671CTyK/OjbeAPmgF2YeccypeMa1gKZ9E8jw7TT55F7FR2oTczlzcGotU+MVuoqoXw1TPk9a1bQ3tfBEjN7MCtjyfklpqmKJbbc34qhy8Q7eToWpjQGEGGJrZnakycxfRbZY43YyZIvHGjmrkwH3GX9ieY2bjaGtjSmpnJoafqeSCs7vP/AmRVQ5uYueAgyd/6U8/Ce98r/4CsiEQrURcQ8yxIrH6kYK037PryUXX1DSGoin9hSaDQjFAbj+CSei/XKrsvfazl9OA8ULAsnF+SYtWHLOyPlaySB9McWn9vqi5Rydc4BO8Wx7X4x481Yc106vl4c+4xeZM3i0C7U4fBplHqWdJI9w+dIizb5C8c3+c+W/s1fAWyvmjjcoH8R8PSKF/buAQYf8Vni2k1zcVt5+eRRTQvCvnyhGrvdSHxMpO0f+ipWFcWyWH3YgmF3OGGrEXByld91/lvL+Y5FK7ufR6crNdA/dFvx3trsWXx1L772EFa64hj34WLmJ78Qxmfiq3ku6j9tjemYFnMBbJS2VsycEIoo1+qL53Lh/wMrVnnuOnTikosR+44dGJUxlM41kdlU4FBuwQ31zIAn1EjHa7nrvNj5pOtpV0HbfVdql/aCfyuO6xX04YiLwnDUwrSZlLWD5ZDYebCxYV9c+xxqTqCguAXT+t+Kts5OICnYBGqxYfM2RfN3UMFKB0aj7MClv7cY2Vv0Qy834/a5ps7PZzGMEF78qaPzfxjAib6kF/C4RcYRSkaGno7qZohKB/HLxyWd4Sef+fFgBxou5nwzT7e+8KwV9AakNuq6Xfl63b7m+boXN6rX5w0wZBHB4mAKYvV0vT2+1g/UHmZV6nvRMD2KqRLoa0LOQUa60RRX6opXeUSMPS+FwwzZDJUwMmp5zZ/Ue5QfD3CEeFJv+D9QUK/XCQR6nUSaGKTyuSui9n1+07HVeHw4O7sGh2/O/u9whaDLSnT6BoZqRzMe1zw4mt9WwG9H0PVkBVRN4bgFCkO1buKro7lYrMyYV0TXFuQpxyMJn3PzU1AT4suuXhsrrvXqFw4u2bBhvtBSUHHpcguxnG1SS0D8N+OSz/BTzoA7SHnWnn01hWUl7sRwWU3u5vXl6cFQohsQoomCHn39Zh/FkI1yKK/v2/PtN+Z2gvaNKME85nxGjmiydegq1ZBVk2254nnMeUVo0TTb0NXwsNXAJLt9z3zvlvpWv7n/NuiaHk7hQilAO0gac88Y2T0cbbMPH2UD3HHhYwvms8e+nvDx+Qt22LPBMmayTCGWINnAah8zRZeIgfBHzw5yWoyHbjpawVfdi9u9i6RCnlImUZoGyGyx4ZYpgdLJtX6jd8P0Ro/GBv8qBKLJLaVBiZdINtJ4suIFgwRDVU6YSbGXUhTls6vjA7YKo0omgyCWyicMpMJpCHCyeDQJX8BT8QPFIG+L1PWw6ge/1r/VvjX2YkrTYJDU4X4QLs6nGksl2EouRKutFhpCbRWDi4vPGfkCrdal0WhNGpqGPNay5htwYGV9sXUO2OArZ4lKp7bUSqgV5Xy4tB7BbZ0UBt5wKFFn+nqFKhsvo8BWl0FmsCg1WpsavJ8/er4jvb1dcx/MXcg2cug0SzkZhrFUdAudxbWYbkAusZBf0kCF4Toq7IRiufv6kLtaoUyKufMYBrFIbJAwfj7hlEgFdvX6yixWC8SITAUOzYG4PKOmLWYt7CFzxGV0dkhVMa29bkHNt73N2O3lZmewtireZLq61GyQq4wILDNYIYXeqgGS2U8fPn1Q/+zBs4eg8n91VMffGbLAaciS+u474Tk+JewKtfnDA1za2I3jfWG2kSOXcnkyEcvCodm9JKHtrOj7sJ7W7UbrKp+WssRbLCLrWf+4SDTY4tCqeG1hjdydKf9CS8rMHsah5bNU4+sYHRsWL550pK7i7BTQsXnRIpc867ANXVGxTWdb5V/Y9tcfM5dIBCoqxk6nMgRUIsTIc5BpTgr4ax2xaF3Jh97Q+94S/YPp7ulucLXkV7SikEYzBYmygdH3ch+epCXzRDpPDHqtQMqm0bhZtPpB9lQ7k6UViTe93goKTyDbNiGeus6qXH/VlUoxrKgXC5tMRiD5V6SAK0VXqnJ9nZV1nk12ZGsQrO7bZbJtrKiwbdhlqOuP9s+qWriorX3R0lnN6Gawu/rvz6rPT8epJh2YpAJ3+pSEf18rX7OQKHA8vlQlUigaRKImg0E0rUGkCHZMSSodo5wkizcji1YaHJ7NdsfWYNCxbbPdE+6qyvWBQF8U4fg4SBQh+8hgd18UiYK9fbGWUNBqC5UhyAAChTKOEAvOTuDykCginiiqZzt4CNiteKnURhFAGtDbiwx8GCv4Y+AgpNf7P3uy1SJVhRjkAFJVUIiAvLjNdse24VQvbYBsLS1FNDcvpGkQi6YbTaKmerFSCQTdZLSR/z2sABNWNtZNnYVCor82Tq2172iWC7ltK2aBWWBax7x5OJqns0n91s0wrqc7tJDVWsHz7QoO7RxXPR6J/qqtpNEQNmSoMgzvRrUGZikVEJcHiVWzwIO4SiLXkuARyEQSoVJAyf9KmN4sGW5AsWAhk2ktI0i8TZ54nV+u4HCZchYtt+evxZIRRjQbFlFoxaEiCLzrUx4JI+GjSrCzL+q0F+t1bOeMIn1WaWMjU6lUNpJGax9Y0BfXFzIpz32beToBe1n0fF9wK3E30Q9ORD2rNbs1wc3wGhiEkNtI6a6hm4YGbiG3HcHdwzYPCwJq329fxSPxv38V2Fui6gVrNSbtMUifpdEegMDI5btU7vNuuLcEHOwcucJmp3aQFe2FA0+7qhe073H9k2z+N9n97XrQlGMaZQIPl0hu1WpBYam4uVGqgELcTX4H2hHsKefJFRG5uM14lUNCTEQKxUiQdh6f5DA+yEZUJw+cfFzBlSojUnGzyShua5Qr5OXcngDyAMmtr/ieIlDIX5rJDi6PFY0jyh+i5slSTaDdM8riva5jcjTucq/PXaHhaIt+9442dvh9mlxe3GKZTFWloIp1NdvxwFG6JaR2R+OrSZCC3T9Q57dDbA39k3e0psPr1UyVSlvNZnHLVIlOM0ksaFQ5ZTilJpcoLbHGqe0Ac6++H+mXq+R5DpcpBHOG0PPqQQRbjsGqE1X8hkahtnJxIMVq/9XJEalcTnN9T4g/CmrC6xxd/H4s63gdzkdlhGCxnW7QW+SQqdhCQB4gQzpdODbwNO1eE2BsaAQNfE0v/+uyYF8oFGI5TZ2b+wi9FgEtd549/5/dNzeet8QMGzAC7P6dJnsAyAPwPiqT+63qLFK50W7B369lBI1ou+y4ImmIuz4U4gvBQdy0yXVjQdml0nQ6cAzwOKFJKms1m6DW6RKNhmuAWsxmZWuLVEPUmnFURCSiIEYsiWzAkp4NxERE3wpOPCqXhkn0qsy+U4+EkHwkUF8JIFBV/ukLsdDvyHeENlbwISgCfcPRdzaKwJW2dlchgkaKwdUEXyETznIxJBQG9TAK/Vw07CqcSRfQCklSJJ+NhJFYLVL4O420NntstuS/HsUEdQyOJLfns8HBe+L8YYVitQFWSXViuUo+D5m3WAXIKDSiX+vAMwQBKisEC+00vd4iVxiLLTiQZuy86rmDKt9tvIBch+5CuTq+Nv8bdO1FOadfnH3ROePStEugou1i00X3l0O/HFnadmHaBXfPkC9HATRq1PZcV0X8D+MDew92HgRLlINVEVXiogRlrRKUrQmMsOQmIokeLKRTSVjagjxD/vh405BEN5ZGlVUMqKDKadhE95B40/h8Q16BliXRqSBsoicRybUERoAjIWQmAj7z2B3y3Sq7r3LAm1s/dtvW5kfDM0RcSdrSSEbt8eafRmYYuGLQTVFJmqGedRVcgJNeeEGzFqZvMScoajyWOBfdVZEwaUFFBTcnOOgOD0VexgmQ+aiqiAu7SiwWlxsGmQr4yItN+WZ+RketADnxU66A7vJSBMGqSGyxKUMk57MgsSzr/t0Tgu6ODLcMBoc5n7rmHnzE4uzrWtv1I4f38eLaS/vY7EOXTJ3J/DmRI0VFPZjCRQzGdAxY1TxXtC9me9458bmNyMbDLu+bvTGiuTuYwS739vwEQZx4LDIVsSch0xAQlS8mYIhyRwHP0WCJUSOc3Ux6Fyb9lDjzZSDLa5QxZBbRiPxF9RvyHfXWAZg9Iw4UZGyZ9dKf6atVahaP+lCrF0rFGhGRrOdLJBohEdCqHo0Z83jM6Me0waPRC35Uf2rhaDMGPDu60W7ZUlrKSPRAEMSqRevcg468uRrFQpdTsWiu1umYoyXd6bLt5mgcXIO3iFkmk2lbL4OjqtKNFJvGG5ArZdbqUBMH+/6saYSsSg2DTClGr8ISCCL0YC7kgjgf+7njiTAeY6ApmXwxgcgXMZmwIRL4QiZYMMndXY8o9naPQFzdQfv30gBnzy1kwX0IMI4jVIqDxaI4JcxiT6JTcBjZ8hobolBwClJYCODpLN7faiky/ELQDtdR75Zkd0xsTCtI/jc5+Z/kAlBzSlIiAWPtXrdG43FraTitDkPRlJToUhksAQ6rloLJXoTDHWWBtsn7b6o/qW/vv61SXeYu3deCzHXsGGqlNSlz/NjLqWldeYoJYjabKeHjcw/EaorAxEUQncVQsTETUr8bEFVOKICLuByoiAyxEseOS05Lw4zDEAvGp6elfhyX8adYCh4euVUrudUEilBoxL/SRefmi8YLWPZ8O9ZqQuRyQ7GFAOL0Veoq/YTkyKSw3T65tuE9+I4hpRAJ4iJ6PduT9Xta6u9Z5ClcIUibzWgugfJBppSgN2GpNCOWDHQa0WDCYaABt6J5TIEQT+AJ2SyugIAXCplgRa63u3i182O6PfcxkMPj3n1BikQtkejuBqIUkn5XuPGZ5xEx0l3dHQbFs+m1d/624sqotSp6sWU99kDMHISWGVFzR3RVA2FAF+GMPozjOVdbz/ra9wpgap98lH18lQFF1idb1vnmRXughsXLf1sGbkDh6u1GIasq/PG0Let451bZBy1zGDd4gwHvGUFngFtXbT/JarJS+2fWLVzW3r5w6azmf46Zjv3bDH5ZuWlVDzYt69ev2wD1ICbfuAks1HXjmqAQcub8mtyTPLGyJLQZP00eEPqykwfP0eXVi8UMTwDYEVNOg8KnXu8wAyYM9DELliEHkKWzrj5wO9sgCZcHSVWz4mYB9sLGhgapF0dWYYkE0bJdTcPG/CwYDaUKYTbktxVbq9xxRkdmJ5mQnoc+6NFlSNh4lFEwIXkcTkLmLF6Si5CA8FkK46ScptHmYQVG+o/e0ZoWr1tcwz1Vrg3dqOBJPYnaJc2TpLC4jDEwAAdkVfPgBgm/EXIK8LAunwSVIXGalj5yhtY8J5kBtWLf6YaMVDd4rXFkEdw5FZK4EMSaqjV7Xr+bwPj+WEi+pFmh1zbJJO1mo7R5ihSexEUmuiRwG4bsnPi51VlnbsdQnBMRrYlAdgqFJKcRTyYb8ES7UERw6YlkQI1XqGv/WKf+rP6DmTsyGH7zZbaH5VPMzKOgbxTKNa+yvexwY6YBBaNHeMOJTkS9lfkYqTCc+co+FJFCj+sAx/8sl0CBxucJCsk6m5C/EGq98xDZjfKplvpB+yf5p5djocbFufI5aptrgx3ZFixFtsoinLa5qlzZ/Eb5WEdQNO2XhRHTDAat4Wen2QLB9RRGb6ze7VBwwsmP41M2yJ5MnCpTaaaFS7UpJ0uHfI5IYU2jWBhRbn5gxlOcIhHZYcKRSAYmjulpcOjxpDoUTqPJJ8pLkIF6O1jfOc8EzTPMNUDgwepzeFw/gdCPw58jKh6npj5OT38yLc2TdJC6VJo/ch+m3z54eARN1ZtfG1wa966glkAODRSvUA9RA/LSleof1WD67aD7NyGw9wWGDQWAWceEBWcM/lYc/eG3eBCjLvTzScHaGzIZhfq2oVxGpZRYDvO2ZgBvoyuiyP5uBMNUlcJLlTm+zsraxm/asio9AmNBRnqekV8yGiqpnsXR1nZW5fgrL1cIYVOTOUP1H/9jXvp4+gfBv+MUTQY9SDv6nGHOh0Ce5WBRiRh8rvxMqRgQKypxViaFk8D9FerF6lMIqMvvwAHDAUtvWvKWPFZmnZYvDBDaDlS4PB2b3Z+c6F7tsqUpKcvFfrnlC7nx7eize858uTZVynLhG214nVi5nq+lLJf582gzf2KkSTkPOckX1IkHKcvFU7nlr9HGk0oGJlKGlFHJQIFxqJxbRAkZaLoCpKQsF9/JLT1yY//os34nJNe+lrJcrB9trBVPXKH0/5e7YBn5YZD5nukn49zEDFg0HRIfSVkudsotG0cbO5gNhEMBkDJwCABmEQFzULGVBE9QeGFk/XUdNNzBZGAmCcWXYvQwLy8Bz4Vxusj/33zzkJJ5CbAC5XxWws73djVb6qx1qqiyb4uQVJ1ZLgvoK2Nz4m5zF7vLGnaCGsh7Y7O7zVgmHvgWfgjPp1AX5wbOV2LAiI/9/CiGme/6J3iJqy0AI8uoRBsH3G0InSOBnmW9hje1jiFkaJ+6z7G7xEliQpoAGdqn7O7UtSHgXQLKeUEBALvA8yLMY3QytG/cVxvyE2i+LWUMGdqnxrtSFhaao72g2IWZueNYo7J7zjpeI9q0ZOvoFgMsypIrnzV/G63l/JcQO34E+PLN5QDwzRb636dHn04lxS86rpkMNSMEv1uqL3+UGfCuGnKlz7mv8xLiWflW7wm2oKEGJKvVOH2jsL/LsRkqZ1SqRzYrf+B2L6sz83PzsNyAzQ9obcCLQG75KFUjNSJ/Sis6Da+cbFmdhNNGCrdhkyBVDFNvCnQsV1PUxytQt8lqgHoM1O1J6sa4zVvqkaTbXmqvscUIBbWG82WMOG1yVMiIHBFDHCWU1FUVZsfL7naq7jBmXJPaKrhCRsYmxGe3mV2mA9WrG5HTH4USI/KNYDirrpsgCJVtUUg90tahi3nezoeNhbR6URxo6xtmAZoBidTRJMNUymgrqCQp44yU/GBwT0u1DxXkilBQ/KpH0nh13OfbtYSthG06fo3S65e7fPiwpI40pJyQlctwnacAnoN8Qk2H4VlnXLvZojQhsFRvDO9M6ppMdAshwwx3Snp6WedPbqvcbofuaajGG2B+nG9tY4YUOThjArCJ1+IHzqc9r3pbogy40NIOpUJRcjATAJBXaztxMDvOaMAiBY4sKoE/dGMzjAz4JLuUZqkIEgjkAPKCBMtx6XgwixgwvpeZIsO9MDQPomp3gkcE7HtpvMNMB+bnNElDz8C4qm1grBQ2aXCYPzmPJY6T0sdgmeaBz4sXQAzwtZVSsDgKKooDHgcMCCxzL5ZatBx4wy2yrRIkIrq/trXZadrWrsi1rYPXHXHG3HQSHNuBpzVsnjXqsRAUafepE/JIwzMSr55UEglHSGluQi0ZmE642bJGSHU7jkFgJJFPxFM3jAqPiIg6rswvgoKJjBZbJkCtmeNFeDHueYxUnKJTlkBLF4d0loz4ls5k8qwDg0Ga1BEpj1MfdVooIrRs0VBnnY9TtlToIR3hHYt9wqoQ8iT4TBhRza/OFHCGaSswwPN+zneQTf01kGaw/WXSf3LcPLx8/AKCQsKGG2GkUUYbI1WadBnGGme8CSbKlCUbClqOXHnyFSiEgYWDR0BEQkZBRUNXhIGJhY2Di4dPQEhETEJKRg6ioKQCU9PQ0tEzMDIxs7CyKWaHcHBycSvhyUCfZpjpsFX+Mssi823UaUcGeXNfh+Wee2Fh4rw46SfPbNLllZde2+YL553VzctnCb+LAs654KpLLrvib0E3XXNdj1JPLXXHLbeV+dcjc5ULqVClUrUtwmrVqFMvokGjSf4x2VRTTDNdkz5btWjWqs1/Hjvgri99lXgXP+r3tW/s951Ten3rtNn2OuKoQ0nw4UkSF912LwwPEN8VH3kmRCReEROXZPA1rZV8LR74/5ThpJVMHs8BAAAA) format("woff"),}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/roboto-mono-regular-498042b7fe9cd07b4fd11a0965093e55.woff) format("woff2"),url(/assets/fonts/roboto-mono-regular-535bc89d4af715503b01afd761501e58.woff2) format("woff"),}@font-face{font-family:Lato;font-style:normal;font-weight:400;src:local(""),url(/assets/fonts/lato-regular-292725486219768e62259f7286dc73cc.woff) format("woff2"),url(/assets/fonts/lato-regular-be36596da218e1eec01c5c600b1c13ef.woff2) format("woff"),}[data-theme=dark]{--ifm-color-primary:#ffc61c;--ifm-color-primary-dark:#ffbf00;--ifm-color-primary-darker:#f1b400;--ifm-color-primary-darkest:#c69400;--ifm-color-primary-light:#ffcd38;--ifm-color-primary-lighter:#ffd146;--ifm-color-primary-lightest:#ffdb71;--ifm-color-secondary-dark:#fe7c3f;--ifm-color-secondary:#4f57a8;--ifm-color-secondary-light:#075a86;--light:#33313b;--dark:#f3f3f3}[data-theme=dark] .footer--dark{background-color:var(--light);color:var(--ifm-color-primary)}.button--static{background-color:#06527a;color:#f3f3f3}body{font-family:Lato,sans-serif}h1,h2,h3,h4,h5,h6{font-family:Poppins,sans-serif}code{font-family:Roboto Mono,monospace}.navbar__brand{height:40px}.btn.navbar__github{background-color:initial;color:#212529;display:inline-block;padding:.375rem .75rem;text-align:center;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;user-select:none}.btn.navbar__github,a.btn.navbar__github{border:2px solid #0000;border-radius:3px;font-size:1rem;font-weight:400;line-height:1.66}a.btn.navbar__github{align-items:center;font-family:poppins,sans-serif;padding:8px 20px 7px 47px;position:relative;text-decoration:none}.clear-btn{padding:100px}.btn-secondary.navbar__github:hover{background-color:#273230;border-color:#222a29;color:#fff}a.btn.navbar__github:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20.5 20'%3E%3Cpath fill='%23fff' d='M10.3 0C4.6 0 0 4.6 0 10.3c0 4.4 2.8 8.3 7 9.7.5.1.7-.2.7-.5v-1.9c-2.6.5-3.2-.6-3.4-1.2-.2-.6-.6-1.1-1-1.5-.4-.2-.9-.7 0-.7.7.1 1.3.5 1.6 1 .6 1.1 1.9 1.4 3 .8 0-.5.3-1 .7-1.4-2.3-.3-4.7-1.1-4.7-5.1 0-1 .4-2 1.1-2.8-.5-.6-.5-1.6-.1-2.5 0 0 .9-.3 2.8 1.1 1.7-.5 3.4-.5 5.1 0 2-1.3 2.8-1.1 2.8-1.1.4.9.5 1.9.2 2.8.7.7 1.1 1.7 1.1 2.8 0 3.9-2.4 4.8-4.7 5.1.5.5.7 1.2.7 1.9v2.8c0 .3.2.6.7.5 5.4-1.8 8.3-7.6 6.5-13C18.6 2.8 14.7 0 10.3 0z'/%3E%3C/svg%3E");content:"";height:20px;left:15px;position:absolute;top:10px;width:20px}.icon-github.navbar__github{margin-left:20px}.btn-secondary.navbar__github{background-color:#384745;border-color:#384745;box-shadow:inset 0 1px #ffffff26,0 1px 1px #00000014;color:#fff!important}.docusaurus-highlight-code-line{background-color:#484d5b;display:block;margin:0 calc(var(--ifm-pre-padding)*-1);padding:0 var(--ifm-pre-padding)}body:not(.navigation-with-keyboard) :not(input):focus{outline:0}#docusaurus-base-url-issue-banner-container,.themedImage_ToTc,[data-theme=dark] .lightToggleIcon_pyhR,[data-theme=light] .darkToggleIcon_wfgR,html[data-announcement-bar-initially-dismissed=true] .announcementBar_mb4j{display:none}.skipToContent_fXgn{background-color:var(--ifm-background-surface-color);color:var(--ifm-color-emphasis-900);left:100%;padding:calc(var(--ifm-global-spacing)/2) var(--ifm-global-spacing);position:fixed;top:1rem;z-index:calc(var(--ifm-z-index-fixed) + 1)}.skipToContent_fXgn:focus{box-shadow:var(--ifm-global-shadow-md);left:1rem}.closeButton_CVFx{line-height:0;padding:0}.content_knG7{font-size:85%;padding:5px 0;text-align:center}.content_knG7 a{color:inherit}.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}[data-theme=dark] .themedImage--dark_i4oU,[data-theme=light] .themedImage--light_HNdA{display:initial}.iconExternalLink_nPIU{margin-left:.3rem}.iconLanguage_nlXk{margin-right:5px;vertical-align:text-bottom}.navbarHideable_m1mJ{transition:transform var(--ifm-transition-fast) ease}.navbarHidden_jGov{transform:translate3d(0,calc(-100% - 2px),0)}.footerLogoLink_BH7S{opacity:.5;transition:opacity var(--ifm-transition-fast) var(--ifm-transition-timing-default)}.footerLogoLink_BH7S:hover,.hash-link:focus,:hover>.hash-link{opacity:1}.mainWrapper_z2l0{display:flex;flex:1 0 auto;flex-direction:column}.docusaurus-mt-lg{margin-top:3rem}#__docusaurus{display:flex;flex-direction:column;min-height:100%}.sidebar_re4s{position:sticky;top:calc(var(--ifm-navbar-height) + 2rem)}.sidebarItemTitle_pO2u{font-size:var(--ifm-h3-font-size)}.container_mt6G,.sidebarItemList_Yudw{font-size:.9rem}.sidebarItem__DBe{margin-top:.7rem}.sidebarItemLink_mo7H{color:var(--ifm-font-color-base);display:block}.sidebarItemLinkActive_I1ZP{color:var(--ifm-color-primary)!important}.buttonGroup__atx button,.codeBlockContainer_Ckt0{background:var(--prism-background-color);color:var(--prism-color)}.authorCol_Hf19{flex-grow:1!important;max-width:inherit!important}.imageOnlyAuthorRow_pa_O{display:flex;flex-flow:row wrap}.imageOnlyAuthorCol_G86a{margin-left:.3rem;margin-right:.3rem}.codeBlockContainer_Ckt0{border-radius:var(--ifm-code-border-radius);box-shadow:var(--ifm-global-shadow-lw);margin-bottom:var(--ifm-leading)}.codeBlockContent_biex{border-radius:inherit;direction:ltr;position:relative}.codeBlockTitle_Ktv7{border-bottom:1px solid var(--ifm-color-emphasis-300);border-top-left-radius:inherit;border-top-right-radius:inherit;font-size:var(--ifm-code-font-size);font-weight:500;padding:.75rem var(--ifm-pre-padding)}.codeBlock_bY9V{--ifm-pre-background:var(--prism-background-color);margin:0;padding:0}.codeBlockTitle_Ktv7+.codeBlockContent_biex .codeBlock_bY9V{border-top-left-radius:0;border-top-right-radius:0}.codeBlockLines_e6Vv{float:left;font:inherit;min-width:100%;padding:var(--ifm-pre-padding)}.codeBlockLinesWithNumbering_o6Pm{display:table;padding:var(--ifm-pre-padding) 0}.buttonGroup__atx{column-gap:.2rem;display:flex;position:absolute;right:calc(var(--ifm-pre-padding)/2);top:calc(var(--ifm-pre-padding)/2)}.buttonGroup__atx button{align-items:center;border:1px solid var(--ifm-color-emphasis-300);border-radius:var(--ifm-global-radius);display:flex;line-height:0;opacity:0;padding:.4rem;transition:opacity .2s 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:a;display:table-row}.codeLineNumber_Tfdd{background:var(--ifm-pre-background);display:table-cell;left:0;overflow-wrap:normal;padding:0 var(--ifm-pre-padding);position:sticky;text-align:right;width:1%}.landing_V_Km h2,.textCenter_vU5G{text-align:center}.codeLineNumber_Tfdd:before{content:counter(a);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{fill:currentColor;height:inherit;left:0;opacity:inherit;position:absolute;top:0;transition:.15s;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)}.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:"#"}:not(.containsTaskList_mC6p>li)>.containsTaskList_mC6p{padding-left:0}.img_ev3q{height:auto}.admonition_LlT9{margin-bottom:1em}.admonitionHeading_tbUL{font:var(--ifm-heading-font-weight) var(--ifm-h5-font-size)/var(--ifm-heading-line-height) var(--ifm-heading-font-family);margin-bottom:.3rem}.admonitionHeading_tbUL code{text-transform:none}.admonitionIcon_kALy{display:inline-block;margin-right:.4em;vertical-align:middle}.admonitionIcon_kALy svg{fill:var(--ifm-alert-foreground-color);display:inline-block;height:1.6em;width:1.6em}.iconEdit_Z9Sw{margin-right:.3em;vertical-align:sub}.tag_zVej{border:1px solid var(--docusaurus-tag-list-border);transition:border var(--ifm-transition-fast)}.tag_zVej:hover{--docusaurus-tag-list-border:var(--ifm-link-color);text-decoration:none}.tagRegular_sFm0{border-radius:var(--ifm-global-radius);font-size:90%;padding:.2rem .5rem .3rem}.tagWithCount_h2kH{align-items:center;border-left:0;display:flex;padding:0 .5rem 0 1rem;position:relative}.tagWithCount_h2kH:after,.tagWithCount_h2kH:before{border:1px solid var(--docusaurus-tag-list-border);content:"";position:absolute;top:50%;transition:inherit}.tagWithCount_h2kH:before{border-bottom:0;border-right:0;height:1.18rem;right:100%;transform:translate(50%,-50%) rotate(-45deg);width:1.18rem}.tagWithCount_h2kH:after{border-radius:50%;height:.5rem;left:0;transform:translateY(-50%);width:.5rem}.tagWithCount_h2kH span{background:var(--ifm-color-secondary);border-radius:var(--ifm-global-radius);color:var(--ifm-color-black);font-size:.7rem;line-height:1.2;margin-left:.3rem;padding:.1rem .4rem}.tag_Nnez{display:inline-block;margin:.5rem .5rem 0 1rem}.tags_jXut{display:inline}.tag_QGVx{display:inline-block;margin:0 .4rem .5rem 0}.blogPostFooterDetailsFull_mRVl{flex-direction:column}.bgPrimary_wt5q{background-color:var(--ifm-color-secondary)}[data-theme=dark] .bgPrimary_wt5q{background-color:var(--ifm-color-primary)}.bgLight_K4GO{background-color:var(--light)}.wrap_T5Hr{margin:0 auto;max-width:1200px;padding-top:8rem;width:75%}.landing_V_Km{font-family:roboto,sans-serif;font-size:10px}.landing_V_Km p{font-size:1.5em;line-height:1.5rem;margin-bottom:2rem}.landing_V_Km h1{color:#fff;font-size:5em}.landing_V_Km h1,.landing_V_Km h2{line-height:4rem;margin-bottom:3rem}.landing_V_Km h2{font-size:3em}.landing_V_Km h3{font-size:2.5em;line-height:3.5rem;margin-bottom:3rem}.landing_V_Km h2.learn_more_oZtu,.landing_V_Km h3.learn_more_oZtu{color:#fff;margin-bottom:1rem}.landing_V_Km h4{font-size:2em;line-height:2rem;margin-bottom:1rem}.landing_V_Km h5{font-size:1.75em;line-height:2.75rem;margin-bottom:2rem}.landing_V_Km h6{font-size:1.4em;line-height:2.25rem;margin-bottom:2rem}.intro_q4os{align-items:end;column-gap:2rem;display:grid;padding:0;position:relative}.intro_q4os .gridTwo_s48r{grid-template-columns:60% auto}.intro_q4os .wrap_T5Hr{padding:5rem 0 15rem}.intro_q4os .folder_FnMF{grid-column:2/span 4;grid-row:5/span 3;z-index:2}.intro_q4os .bgPrimary_wt5q{color:var(--dark);grid-column:1/span 6;grid-row:3/span 4}.folder_FnMF h4,.intro_q4os h4,.intro_q4os p,[data-theme=dark] .intro_q4os h1{color:var(--light)}.getStarted_D36F{display:grid;padding-top:3rem;position:relative}.getStarted_D36F .white_vU21{background:var(--light);box-shadow:0 0 20px #33313b80;grid-column:2/span 4;grid-row:2/span 4;padding:5rem;z-index:2}.getStarted_D36F .bgPrimary_wt5q{grid-column:1/span 6;grid-row:5/span 3;padding:10rem 0 5rem}[data-theme=dark] .learnMore_oBG3{background-color:var(--ifm-color-primary);color:var(--light)}.folder_FnMF h4{background-color:var(--ifm-color-primary-dark);display:inline-block;margin:0;padding:10px 20px;position:relative}[data-theme=dark] .folder_FnMF h4{background-color:var(--ifm-color-secondary-light);color:var(--dark)}.folder_FnMF h5,[data-theme=dark] .folder_FnMF h5{color:var(--dark)}.folder_FnMF .bgLight_K4GO{background-color:var(--light);border-top:14px solid var(--ifm-color-primary-dark);box-shadow:0 0 20px #33313b80;padding:40px}[data-theme=dark] .folder_FnMF .bgLight_K4GO{border-top:14px solid var(--ifm-color-secondary-light)}.gridTwo_s48r{grid-gap:2rem;align-items:center;display:grid;grid-template-columns:repeat(2,1fr)}.gridThree__deY{grid-gap:2rem;display:grid;grid-template-columns:repeat(3,1fr)}.gridFour_wPQw{grid-gap:2rem;display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr))}.gridDynamic_yZrM h5{flex-basis:0;flex-grow:1;margin:0}pre{border-radius:3px;display:block;font-family:monospace;font-size:15px;line-height:1.6;margin-bottom:1.6em;overflow-wrap:break-word;padding:1em 1.5em;page-break-inside:avoid;white-space:pre-wrap}.imgBorder_ME4r{border:1px solid #33313b80}.tableOfContents_bqdL{position:sticky;top:calc(var(--ifm-navbar-height) + 1rem)}@media (min-width:997px){:root{--docusaurus-announcement-bar-height:30px}.announcementBarClose_gvF7,.announcementBarPlaceholder_vyr4{flex-basis:50px}.searchBox_ZlJk{padding:var(--ifm-navbar-item-padding-vertical) var(--ifm-navbar-item-padding-horizontal)}}@media (min-width:1440px){.container{max-width:var(--ifm-container-width-xl)}}@media screen and (max-width:1536px){.gridFour_wPQw{grid-template-columns:repeat(2,1fr)}}@media (max-width:996px){.col{--ifm-col-width:100%;flex-basis:var(--ifm-col-width);margin-left:0}.footer{--ifm-footer-padding-horizontal:0}.colorModeToggle_DEke,.footer__link-separator,.navbar__item,.sidebar_re4s,.tableOfContents_bqdL{display:none}.footer__col{margin-bottom:calc(var(--ifm-spacing-vertical)*3)}.footer__link-item{display:block}.hero{padding-left:0;padding-right:0}.navbar>.container,.navbar>.container-fluid{padding:0}.navbar__toggle{display:inherit}.navbar__search-input{width:9rem}.pills--block,.tabs--block{flex-direction:column}.searchBox_ZlJk{position:absolute;right:var(--ifm-navbar-padding-horizontal)}.docItemContainer_F8PC{padding:0 .3rem}}@media screen and (max-width:996px){.getStarted_D36F{grid-template-columns:repeat(8,1fr)}.getStarted_D36F .white_vU21{grid-column:2/span 6}.getStarted_D36F .bgPrimary_wt5q{grid-column:1/span 8}.gridFour_wPQw,.gridThree__deY,.gridTwo_s48r,.intro_q4os .gridTwo_s48r{grid-template-columns:1fr}}@media (max-width:768px){#theme-main h1{font-size:50px!important;font-weight:700;line-height:3rem!important}#theme-main .header-docs{margin-bottom:20px}}@media (max-width:576px){.markdown h1:first-child{--ifm-h1-font-size:2rem}.markdown>h2{--ifm-h2-font-size:1.5rem}.markdown>h3{--ifm-h3-font-size:1.25rem}.title_f1Hy{font-size:2rem}}@media (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 print{.announcementBar_mb4j,.footer,.menu,.navbar,.pagination-nav,.table-of-contents{display:none}.tabs{page-break-inside:avoid}.codeBlockLines_e6Vv{white-space:pre-wrap}} \ No newline at end of file diff --git a/assets/images/icon-suse-mask-b568419b7df0309b5b523a2f09ac6db4.png b/assets/images/icon-suse-mask-b568419b7df0309b5b523a2f09ac6db4.png new file mode 100644 index 0000000000000000000000000000000000000000..3d06203a7512fbd917de407a1370f4c2783514be GIT binary patch literal 14008 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 LJ6cs)1n&8NzaW|y literal 0 HcmV?d00001 diff --git a/assets/js/17fe24f4.6bbc21b6.js b/assets/js/17fe24f4.5860b656.js similarity index 97% rename from assets/js/17fe24f4.6bbc21b6.js rename to assets/js/17fe24f4.5860b656.js index b039c30..fdaca58 100644 --- a/assets/js/17fe24f4.6bbc21b6.js +++ b/assets/js/17fe24f4.5860b656.js @@ -1 +1 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1395],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||i;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.19.0",s={permalink:"/blog/2023/08/03/release-notes-0.19",source:"@site/blog/2023-08-03-release-notes-0.19.md",title:"Release Notes - v0.19.0",description:"This release contains various fixes and improvements in the backend. Most",date:"2023-08-03T00:00:00.000Z",formattedDate:"August 3, 2023",tags:[],readingTime:.965,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.20.0",permalink:"/blog/2023/08/31/release-notes-0.20"},nextItem:{title:"Release Notes - v0.18.0",permalink:"/blog/release-notes-v0.18"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains various fixes and improvements in the backend. Most\nnotably, error handling, multipart handling and internal bookkeeping of objects\nhas improved."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related to the list below, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"GitHub repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Log SQLite error / warning messages"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Add SQLite retries and error handling"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improve multipart handling"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add endpoints for user management"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add bucket management endpoints"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Allow creating admin users")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix Invalid argument exception on exit with telemetry off"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix delete bucket when not empty"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Abort on-going multiparts on bucket removal"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix bucket listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Various fixes to object state transitions"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix table header on zoom-in"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix bucket deletion dialogue in ",(0,a.kt)("inlineCode",{parentName:"li"},"Administrator")," mode"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix creating keys for users")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for the metadata store changed")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1395],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||i;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.19.0",s={permalink:"/blog/2023/08/03/release-notes-0.19",source:"@site/blog/2023-08-03-release-notes-0.19.md",title:"Release Notes - v0.19.0",description:"This release contains various fixes and improvements in the backend. Most",date:"2023-08-03T00:00:00.000Z",formattedDate:"August 3, 2023",tags:[],readingTime:.965,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.22.0",permalink:"/blog/2023/08/31/release-notes-0.22"},nextItem:{title:"Release Notes - v0.18.0",permalink:"/blog/release-notes-v0.18"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains various fixes and improvements in the backend. Most\nnotably, error handling, multipart handling and internal bookkeeping of objects\nhas improved."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related to the list below, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"GitHub repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Log SQLite error / warning messages"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Add SQLite retries and error handling"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improve multipart handling"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add endpoints for user management"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add bucket management endpoints"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Allow creating admin users")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix Invalid argument exception on exit with telemetry off"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix delete bucket when not empty"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Abort on-going multiparts on bucket removal"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix bucket listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Various fixes to object state transitions"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix table header on zoom-in"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix bucket deletion dialogue in ",(0,a.kt)("inlineCode",{parentName:"li"},"Administrator")," mode"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix creating keys for users")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for the metadata store changed")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/28fe6e5c.2b45be28.js b/assets/js/28fe6e5c.2b45be28.js new file mode 100644 index 0000000..8a9992a --- /dev/null +++ b/assets/js/28fe6e5c.2b45be28.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[4571],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,g=p["".concat(l,".").concat(m)]||p[m]||f[m]||a;return n?r.createElement(g,i(i({ref:t},c),{},{components:n})):r.createElement(g,i({ref:t},c))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={},i="Release Notes - v0.21.0",s={permalink:"/blog/2023/08/31/release-notes-0.21",source:"@site/blog/2023-08-31-release-notes-0.21.md",title:"Release Notes - v0.21.0",description:"This release contains significant improvements and new bug fixes. Notably,",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.74,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.20.0",permalink:"/blog/2023/08/31/release-notes-0.20"},nextItem:{title:"Release Notes - v0.22.0",permalink:"/blog/2023/08/31/release-notes-0.22"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release contains significant improvements and new bug fixes. Notably,\nthis release brings server-side encryption support, conditional copy object,\nimprovement in profiling."),(0,o.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,o.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,o.kt)("h2",{id:"features"},"Features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Add server-side encryption support"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Conditional copy object"),(0,o.kt)("li",{parentName:"ul"},"ui : Make use of the UI REST API to prevent CORS issues")),(0,o.kt)("h2",{id:"fixes"},"Fixes"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Improve sqlite connection handling"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Fix missing multipart etag"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Fix etag and mtime not being sent with copy object response"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Increase build error reporting"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Improve profiling (sqlite, garbage collection)"),(0,o.kt)("li",{parentName:"ul"},"ui: Prevent switching bucket retention mode from Compliance to Governance")),(0,o.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,o.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/343590b1.92560781.js b/assets/js/343590b1.a58dd406.js similarity index 97% rename from assets/js/343590b1.92560781.js rename to assets/js/343590b1.a58dd406.js index c632dce..10ab49e 100644 --- a/assets/js/343590b1.92560781.js +++ b/assets/js/343590b1.a58dd406.js @@ -1 +1 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1034],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),g=a,d=p["".concat(l,".").concat(g)]||p[g]||f[g]||i;return n?r.createElement(d,o(o({ref:t},c),{},{components:n})):r.createElement(d,o({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.20.0",s={permalink:"/blog/2023/08/31/release-notes-0.20",source:"@site/blog/2023-08-31-release-notes-0.20.md",title:"Release Notes - v0.20.0",description:"This release contains significant improvements and new bug fixes, particularly",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.745,hasTruncateMarker:!1,authors:[],frontMatter:{},nextItem:{title:"Release Notes - v0.19.0",permalink:"/blog/2023/08/03/release-notes-0.19"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes, particularly\nin the s3gw backing store. Notably, this release brings garbage collection,\nimproved bucket listing, including filtering, and conditional GETs."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Query-based version listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Support conditional GETs"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: New garbage collection implementation"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Change on-disk file format, add suffixes"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Parity with operations required by UI")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix warnings after enabling more compilation flags"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Several code cleanup efforts"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: use global part id for multipart parts")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for both metadata and data store have changed.")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1034],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),g=a,d=p["".concat(l,".").concat(g)]||p[g]||f[g]||i;return n?r.createElement(d,o(o({ref:t},c),{},{components:n})):r.createElement(d,o({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.20.0",s={permalink:"/blog/2023/08/31/release-notes-0.20",source:"@site/blog/2023-08-31-release-notes-0.20.md",title:"Release Notes - v0.20.0",description:"This release contains significant improvements and new bug fixes, particularly",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.745,hasTruncateMarker:!1,authors:[],frontMatter:{},nextItem:{title:"Release Notes - v0.21.0",permalink:"/blog/2023/08/31/release-notes-0.21"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes, particularly\nin the s3gw backing store. Notably, this release brings garbage collection,\nimproved bucket listing, including filtering, and conditional GETs."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Query-based version listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Support conditional GETs"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: New garbage collection implementation"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Change on-disk file format, add suffixes"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Parity with operations required by UI")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix warnings after enabling more compilation flags"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Several code cleanup efforts"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: use global part id for multipart parts")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for both metadata and data store have changed.")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/4bb6553e.94001f9d.js b/assets/js/4bb6553e.94001f9d.js new file mode 100644 index 0000000..041e445 --- /dev/null +++ b/assets/js/4bb6553e.94001f9d.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[791],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(r),f=a,d=p["".concat(l,".").concat(f)]||p[f]||m[f]||s;return r?n.createElement(d,i(i({ref:t},c),{},{components:r})):n.createElement(d,i({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=f;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[p]="string"==typeof e?e:a,i[1]=o;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const s={},i="Release Notes - v0.22.0",o={permalink:"/blog/2023/08/31/release-notes-0.22",source:"@site/blog/2023-08-31-release-notes-0.22.md",title:"Release Notes - v0.22.0",description:"This release contains significant improvements and new bug fixes. Notably,",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.78,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.21.0",permalink:"/blog/2023/08/31/release-notes-0.21"},nextItem:{title:"Release Notes - v0.19.0",permalink:"/blog/2023/08/03/release-notes-0.19"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes. Notably,\nthis release brings improved multipart and sqlite stability."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved SQLite WAL usage"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved disk usage when copying objects"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved testing"),(0,a.kt)("li",{parentName:"ul"},"ui: Various improvements")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Allow multiple delete markers"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix various multipart transactions"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Check number of file descriptors on start"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Updated bucket stats"),(0,a.kt)("li",{parentName:"ul"},"ui: unable to access UI due to admin ops verifying cert"),(0,a.kt)("li",{parentName:"ul"},"ui: The Show/Hide button must have at least one default value"),(0,a.kt)("li",{parentName:"ul"},"ui: Dropdown buttons are not rendered correct"),(0,a.kt)("li",{parentName:"ul"},"ui: Disable caching of index.html")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/7560b79e.3d581c35.js b/assets/js/7560b79e.02bd4c56.js similarity index 97% rename from assets/js/7560b79e.3d581c35.js rename to assets/js/7560b79e.02bd4c56.js index 4989239..64a94e2 100644 --- a/assets/js/7560b79e.3d581c35.js +++ b/assets/js/7560b79e.02bd4c56.js @@ -1 +1 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[6801],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||i;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.19.0",s={permalink:"/blog/2023/08/03/release-notes-0.19",source:"@site/blog/2023-08-03-release-notes-0.19.md",title:"Release Notes - v0.19.0",description:"This release contains various fixes and improvements in the backend. Most",date:"2023-08-03T00:00:00.000Z",formattedDate:"August 3, 2023",tags:[],readingTime:.965,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.20.0",permalink:"/blog/2023/08/31/release-notes-0.20"},nextItem:{title:"Release Notes - v0.18.0",permalink:"/blog/release-notes-v0.18"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains various fixes and improvements in the backend. Most\nnotably, error handling, multipart handling and internal bookkeeping of objects\nhas improved."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related to the list below, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"GitHub repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Log SQLite error / warning messages"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Add SQLite retries and error handling"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improve multipart handling"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add endpoints for user management"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add bucket management endpoints"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Allow creating admin users")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix Invalid argument exception on exit with telemetry off"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix delete bucket when not empty"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Abort on-going multiparts on bucket removal"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix bucket listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Various fixes to object state transitions"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix table header on zoom-in"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix bucket deletion dialogue in ",(0,a.kt)("inlineCode",{parentName:"li"},"Administrator")," mode"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix creating keys for users")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for the metadata store changed")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[6801],{3905:(e,t,n)=>{n.d(t,{Zo:()=>p,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},c="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},d=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),c=u(n),d=a,f=c["".concat(l,".").concat(d)]||c[d]||m[d]||i;return n?r.createElement(f,o(o({ref:t},p),{},{components:n})):r.createElement(f,o({ref:t},p))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=d;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[c]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.19.0",s={permalink:"/blog/2023/08/03/release-notes-0.19",source:"@site/blog/2023-08-03-release-notes-0.19.md",title:"Release Notes - v0.19.0",description:"This release contains various fixes and improvements in the backend. Most",date:"2023-08-03T00:00:00.000Z",formattedDate:"August 3, 2023",tags:[],readingTime:.965,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.22.0",permalink:"/blog/2023/08/31/release-notes-0.22"},nextItem:{title:"Release Notes - v0.18.0",permalink:"/blog/release-notes-v0.18"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],p={toc:u},c="wrapper";function m(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains various fixes and improvements in the backend. Most\nnotably, error handling, multipart handling and internal bookkeeping of objects\nhas improved."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related to the list below, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"GitHub repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Log SQLite error / warning messages"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Add SQLite retries and error handling"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improve multipart handling"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add endpoints for user management"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Add bucket management endpoints"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Allow creating admin users")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix Invalid argument exception on exit with telemetry off"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix delete bucket when not empty"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Abort on-going multiparts on bucket removal"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix bucket listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Various fixes to object state transitions"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix table header on zoom-in"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix bucket deletion dialogue in ",(0,a.kt)("inlineCode",{parentName:"li"},"Administrator")," mode"),(0,a.kt)("li",{parentName:"ul"},"ui frontend: Fix creating keys for users")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for the metadata store changed")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/814f3328.c49d5854.js b/assets/js/814f3328.c49d5854.js deleted file mode 100644 index 7c4b2a8..0000000 --- a/assets/js/814f3328.c49d5854.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Latest posts","items":[{"title":"Release Notes - v0.20.0","permalink":"/blog/2023/08/31/release-notes-0.20"},{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"},{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"},{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"},{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"},{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"},{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"},{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"},{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"},{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"},{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"},{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"},{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"},{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"},{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"},{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"},{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"},{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"},{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"},{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"},{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"},{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"},{"title":"Contain your excitement, the s3gw is in town","permalink":"/blog/s3gw-rados-gateway-standalone"}]}')}}]); \ No newline at end of file diff --git a/assets/js/814f3328.d9adc629.js b/assets/js/814f3328.d9adc629.js new file mode 100644 index 0000000..0381f2c --- /dev/null +++ b/assets/js/814f3328.d9adc629.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[2535],{5641:e=>{e.exports=JSON.parse('{"title":"Latest posts","items":[{"title":"Release Notes - v0.20.0","permalink":"/blog/2023/08/31/release-notes-0.20"},{"title":"Release Notes - v0.21.0","permalink":"/blog/2023/08/31/release-notes-0.21"},{"title":"Release Notes - v0.22.0","permalink":"/blog/2023/08/31/release-notes-0.22"},{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"},{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"},{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"},{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"},{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"},{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"},{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"},{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"},{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"},{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"},{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"},{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"},{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"},{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"},{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"},{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"},{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"},{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"},{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"},{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"},{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"},{"title":"Contain your excitement, the s3gw is in town","permalink":"/blog/s3gw-rados-gateway-standalone"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2b675dd.f26c7d9d.js b/assets/js/b2b675dd.9d59e11b.js similarity index 55% rename from assets/js/b2b675dd.f26c7d9d.js rename to assets/js/b2b675dd.9d59e11b.js index 1510c4f..24488fa 100644 --- a/assets/js/b2b675dd.f26c7d9d.js +++ b/assets/js/b2b675dd.9d59e11b.js @@ -1 +1 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":23,"totalPages":1,"totalCount":23,"blogDescription":"A Docusaurus powered blog!","blogTitle":"Docusaurus blog!"}')}}]); \ No newline at end of file +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[533],{8017:e=>{e.exports=JSON.parse('{"permalink":"/blog","page":1,"postsPerPage":25,"totalPages":1,"totalCount":25,"blogDescription":"A Docusaurus powered blog!","blogTitle":"Docusaurus blog!"}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.46bc512f.js b/assets/js/b2f554cd.46bc512f.js deleted file mode 100644 index 699464c..0000000 --- a/assets/js/b2f554cd.46bc512f.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2023/08/31/release-notes-0.20","metadata":{"permalink":"/blog/2023/08/31/release-notes-0.20","source":"@site/blog/2023-08-31-release-notes-0.20.md","title":"Release Notes - v0.20.0","description":"This release contains significant improvements and new bug fixes, particularly","date":"2023-08-31T00:00:00.000Z","formattedDate":"August 31, 2023","tags":[],"readingTime":0.745,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"nextItem":{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"}},"content":"This release contains significant improvements and new bug fixes, particularly\\nin the s3gw backing store. Notably, this release brings garbage collection,\\nimproved bucket listing, including filtering, and conditional GETs.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related with known issues, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Query-based version listing\\n- rgw/sfs: Support conditional GETs\\n- rgw/sfs: New garbage collection implementation\\n- rgw/sfs: Change on-disk file format, add suffixes\\n- ui backend: Parity with operations required by UI\\n\\n## Fixes\\n\\n- rgw/sfs: Fix warnings after enabling more compilation flags\\n- rgw/sfs: Several code cleanup efforts\\n- rgw/sfs: use global part id for multipart parts\\n\\n## Breaking Changes\\n\\n- On-disk format for both metadata and data store have changed.\\n\\n## Known Issues"},{"id":"/2023/08/03/release-notes-0.19","metadata":{"permalink":"/blog/2023/08/03/release-notes-0.19","source":"@site/blog/2023-08-03-release-notes-0.19.md","title":"Release Notes - v0.19.0","description":"This release contains various fixes and improvements in the backend. Most","date":"2023-08-03T00:00:00.000Z","formattedDate":"August 3, 2023","tags":[],"readingTime":0.965,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"prevItem":{"title":"Release Notes - v0.20.0","permalink":"/blog/2023/08/31/release-notes-0.20"},"nextItem":{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"}},"content":"This release contains various fixes and improvements in the backend. Most\\nnotably, error handling, multipart handling and internal bookkeeping of objects\\nhas improved.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Log SQLite error / warning messages\\n- rgw/sfs: Add SQLite retries and error handling\\n- rgw/sfs: Improve multipart handling\\n- ui backend: Add endpoints for user management\\n- ui backend: Add bucket management endpoints\\n- ui frontend: Allow creating admin users\\n\\n## Fixes\\n\\n- rgw/sfs: Fix Invalid argument exception on exit with telemetry off\\n- rgw/sfs: Fix delete bucket when not empty\\n- rgw/sfs: Abort on-going multiparts on bucket removal\\n- rgw/sfs: Fix bucket listing\\n- rgw/sfs: Various fixes to object state transitions\\n- ui frontend: Fix table header on zoom-in\\n- ui frontend: Fix bucket deletion dialogue in `Administrator` mode\\n- ui frontend: Fix creating keys for users\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.18","metadata":{"permalink":"/blog/release-notes-v0.18","source":"@site/blog/2023-07-06-release-notes-0.18.md","title":"Release Notes - v0.18.0","description":"Release notes for v.0.18.0","date":"2023-07-06T00:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.005,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.18.0","description":"Release notes for v.0.18.0","slug":"release-notes-v0.18","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"},"nextItem":{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"}},"content":"This release contains numerous fixes for the UI and a refactoring of the object\\nversioning implementation.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Add a hint to the prefix field in the lifecycle rule dialog (#600)\\n- UI: Enhance branding support (#572)\\n- SFS: Implement new versioning design (#378, #472, #547, #526, #524, #519)\\n\\n## Fixes\\n\\n- UI: Deleting a versioned object is not properly implemented (#550)\\n- UI: Do not delete object by version (#576)\\n- UI: Prevent the restoring of the deleted object version (#583)\\n- UI: Creating an enabled lifecycle rule is not working (#587)\\n- UI: Disable download button for deleted objects (#595)\\n- UI: Do not close data table column menu on inside clicks (#599)\\n- Chart: Update logo and source URLs (#570)\\n- Chart: Validate email for tls issuer (#596)\\n- Chart: Fix installation failure when publicDomain is empty (#602)\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.17","metadata":{"permalink":"/blog/release-notes-v0.17","source":"@site/blog/2023-06-19-release-notes-0.17.md","title":"Release Notes - v0.17.0","description":"Release notes for v.0.17.0","date":"2023-06-19T00:00:00.000Z","formattedDate":"June 19, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.02,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.17.0","description":"Release notes for v.0.17.0","slug":"release-notes-v0.17","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"},"nextItem":{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"}},"content":"This release contains a number of changes to the internal data structures and\\nmetadata schema in preparation for a more streamlined versioning and multipart\\nimplementation. In addition to that, the UI received a number of bug fixes,\\nquality of life improvements and a stylistic overhaul, including the logo and\\ncolorscheme. The UI also received a large number of end-to-end tests as well as\\nan update to the Angular version.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Branding Support (#552)\\n- UI: Upgrade to Angular 15 (#513)\\n- UI: Adapt logo and style (#530)\\n- UI: Various improvements\\n\\n## Fixes\\n\\n- UI: Fix incorrect pagination when using search/filters (#559)\\n- UI: Fix search function only searching a single page (#556)\\n- UI: Fix redundant \'clear\' buttons for search (#554)\\n- UI: Fix objects with delete markers being displayed (#548)\\n- Chart: Fix \\"unsupported protocol\\" bug for the COSI driver (#511)\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.16","metadata":{"permalink":"/blog/release-notes-v0.16","source":"@site/blog/2023-05-11-release-notes-0.16.md","title":"Release Notes - v0.16.0","description":"Release notes for v.0.16.0","date":"2023-05-11T00:00:00.000Z","formattedDate":"May 11, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.955,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.16.0","description":"Release notes for v.0.16.0","slug":"release-notes-v0.16","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"},"nextItem":{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"}},"content":"This release cycle focused on architecture adjustments to the s3gw service\'s\\nbackend store (SFS), which will be reflected on upcoming releases.\\n\\n\x3c!--truncate--\x3e\\n\\nMost noteworthy outcome of this release is the initial COSI support for s3gw.\\nThis can be enabled via the Helm Chart.\\n\\n\\nWe have also disabled user and bucket quotas via the UI. Quotas are currently\\nnot supported by the s3gw service, and have been kept in the UI to demonstrate\\nwhat we believe to be the right approach to them. As the backend development\\nprogresses, quotas will be re-enabled when the right time comes.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- Kubernetes: Add experimental COSI support.\\n- UI: Add new experimental python backend for the UI.\\n- UI: Disable bucket and user quotas in the UI.\\n\\n## Fixes\\n\\n- None\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- SFS: Non-versioned GETs may observe dirty data of concurrent non-multipart\\n PUTs."},{"id":"release-notes-v0.15","metadata":{"permalink":"/blog/release-notes-v0.15","source":"@site/blog/2023-04-28-release-notes-0.15.md","title":"Release Notes - v0.15.0","description":"Release notes for v.0.15.0","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.15.0","description":"Release notes for v.0.15.0","slug":"release-notes-v0.15","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"},"nextItem":{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"}},"content":"This release focuses on stabilizing our continuous integration and release process.\\nIn this context, we have also addressed a number of issues that was affecting our\\ntesting framework when automatically triggered by CI.\\n\\n\x3c!--truncate--\x3e\\n\\nAlthough this activity may not result in any direct user-facing improvements,\\nit plays a crucial role in maintaining a stable environment for the upcoming major\\nenhancements that the s3gw team is currently developing.\\n\\nWe continue to address the regular issues that affect all of s3gw\'s components.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Improve error handling and robustness of non-multipart PUT operations.\\n- SFS: Telemetry: the backend now periodically exchanges data with our upgrade responder.\\n- UI: Add tags support for objects.\\n\\n## Fixes\\n\\n- CI: Various fixes focused on the stabilization and the consistency of the process.\\n- Tests: Various fixes related with the integration with both the CI and the\\n release process.\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- SFS: Non-versioned GETs may observe dirty data of concurrent non-multipart PUTs."},{"id":"release-notes-v0.14","metadata":{"permalink":"/blog/release-notes-v0.14","source":"@site/blog/2023-03-28-release-notes-0.14.md","title":"Release Notes - v0.14.0","description":"Release notes for v.0.14.0","date":"2023-03-28T00:00:00.000Z","formattedDate":"March 28, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.86,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.14.0","description":"Release notes for v.0.14.0","slug":"release-notes-v0.14","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"},"nextItem":{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"}},"content":"This release adds lifecycle management, object locks (legal holds) and an\\nupdated version of the radosgw we use for the backend.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\n\x3c!--truncate--\x3e\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Initial lifecycle management support\\n- SFS: Object Lock - Legal holds\\n- SFS: Metadata database: Add indices to often queried columns\\n- SFS: Simplify write state machine. Remove _writing_ object state.\\n Writes no longer need to update the object state during IO.\\n- SFS: Update radosgw to Ceph Upstream 0e2e7d594b8\\n- UI: Display object data more intuitively\\n- UI: Enhance user key management page\\n- UI: Add button to copy the current path of the object browser to the clipboard\\n- UI: Lifecycle management\\n\\n## Fixes\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues"},{"id":"release-notes-v0.13","metadata":{"permalink":"/blog/release-notes-v0.13","source":"@site/blog/2023-03-09-release-notes-0.13.md","title":"Release Notes - v0.13.0","description":"Release notes for v.0.13.0","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.935,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.13.0","description":"Release notes for v.0.13.0","slug":"release-notes-v0.13","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"},"nextItem":{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"}},"content":"This release contains a few new features in the backend an in the UI, including\\nobject locking.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Add object locking retention modes.\\n Add the ability to set the default bucket retention configuration for both\\n GOVERNANCE/COMPLIANCE modes\\n Add the ability to set an explicit retention mode on object\'s versions\\n- UI: Add support for object locking\\n- UI: Improve the object browser navigation bar\\n\\n## Fixes\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.13.0 --\x3e\\n\\n## What\'s Changed\\n* Release v0.12.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/347\\n* ci: on-disk format checker and release tests by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/348\\n* ci: fix s3test runner script by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/353\\n* ci: s3tests runner log from container by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/356\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.12.0...v0.13.0"},{"id":"epinio-meets-s3gw","metadata":{"permalink":"/blog/epinio-meets-s3gw","source":"@site/blog/2023-03-01-epinio-meets-s3gw.md","title":"Epinio meets s3gw","description":"This blog post explains how to set up the s3gw object service with the Epinio project","date":"2023-03-01T00:00:00.000Z","formattedDate":"March 1, 2023","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"epinio","permalink":"/blog/tags/epinio"}],"readingTime":2.47,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Epinio meets s3gw","description":"This blog post explains how to set up the s3gw object service with the Epinio project","slug":"epinio-meets-s3gw","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","epinio"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"},"nextItem":{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"}},"content":"Since the very first version,\xa0[Epinio](https://epinio.io/)\xa0has made use of an internal S3 endpoint to store the user\'s projects in the form of aggregated tarballs.\\n\\n\x3c!--truncate--\x3e\\n\\nThose objects are then downloaded and staged by the internal engine\'s pipeline and, finally, they are deployed into the Kubernetes cluster as consumable applications.\xa0\\n\\nEpinio makes use of S3 as an internal private service. In this scenario, S3 can be thought of as an internal ephemeral cache with the purpose of storing temporary objects. For these needs, advanced redundancy measures are not necessary.\xa0Should the S3 backend experience a failure of any kind, software, or hardware; there would be no data loss, since Epinio has the ability to reconstruct the data of a project at any time.\xa0\\n\\nPrior to 1.7.0, Epinio could use only\xa0[Minio](https://min.io/)\xa0as S3 service. Starting from that version, we have since enabled the chart to also use the S3 Gateway (s3gw) project.\xa0\\n\\n[s3gw](https://s3gw.io/)\xa0is a lightweight s3-compatible service that can be backed by any PVC within a Kubernetes environment, with a preference for\xa0[Longhorn](https://longhorn.io/)\xa0as the backing service. As said before, since we do not need an advanced redundancy strategy with Epinio, we can safely rely on a PVC provided by the default storage class deployed on the cluster.\xa0\\n\\nIf you are installing Epinio through the Rancher UI, enable the\xa0*Customize Helm options before install*\xa0checkbox:\xa0\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2023/02/epinio_s3gw_1-1024x732.png)\\n\\nIn the next page, click on the\xa0*S3 storage*\xa0section and disable the\xa0*Install Minio\xa0*checkbox*.*\\\\\\nYou can now enable the\xa0*Install s3gw*\xa0checkbox.\xa0\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2023/02/epinio_s3gw_2-1024x732.png)\\n\\nThis is the simplest way to make Epinio work with s3gw.\xa0\\n\\nFor a more advanced customization, you can edit the Epinio chart\'s values.yaml file:\\n\\n```bash\\ns3gw:\xa0\\n\\n\xa0 enabled: false\xa0\\n\\n\xa0 ingress:\xa0\\n\\n\xa0\xa0\xa0 enabled: false\xa0\\n\\n\xa0 serviceName: s3gw\xa0\\n\\n\xa0 storageClass:\xa0\\n\\n\xa0\xa0\xa0 create: false\xa0\\n\\n\xa0\xa0\xa0 name: \'\'\xa0\\n\\n\xa0 storageSize: 2Gi\xa0\\n\\n\xa0 ui:\xa0\\n\\n\xa0\xa0\xa0 enabled: false\xa0\\n\\n\xa0 useExistingSecret: true\xa0\\n```\\n\\nIf you want, you can, for example, change the\xa0s3gw.storageClass.name\xa0used by s3gw to create its PVC to persist the data.\xa0Leaving this field empty makes the s3gw use the default storage class in the cluster.\xa0Furthermore, you can set the\xa0s3gw.storageSize\xa0value to the appropriate size based on your need.\xa0\\n\\nEmbedding s3gw inside Epinio has been beneficial for both projects because it significantly evolved the respective ability to integrate with other technologies.\\n\\nThanks to this, s3gw has made huge progress in areas such as TLS management and chart consistency.\\n\\ns3gw was born in 2022 and that year we defined the project\'s foundations. As for 2023, the team has ambitious plans that will bring the project to a brand-new level. We are already confident the tool is good enough to start integrating with vibrant projects like Epinio and are planning to make s3gw even simpler to integrate in the future.\xa0\\n\\nStay tuned!\\n\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.12","metadata":{"permalink":"/blog/release-notes-v0.12","source":"@site/blog/2023-02-16-release-notes-0.12.md","title":"Release Notes - v0.12.0","description":"Release notes for v.0.12.0","date":"2023-02-16T00:00:00.000Z","formattedDate":"February 16, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.62,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.12.0","description":"Release notes for v.0.12.0","slug":"release-notes-v0.12","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"},"nextItem":{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"}},"content":"This release contains a bunch of stability fixes in the backend, but also some\\nnew features in the UI. Most notably, the UI can now display prefixes as\\ndirectories, bringing back some familiarity to its feel.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Add support for folder-like view of prefixes in the object explorer\\n- SFS: Performance improvements by utilizing SQLite\'s facilities in favor of\\n custom mutexes\\n- SFS: Use SQLite in WAL mode\\n- SFS: Wrap OP execution in exception handler to avoid crashing on\\n non-implemented stubs\\n\\n## Fixes\\n\\n- SFS: Improve robustness of SAL-layer errors, which now create the appropriate\\n HTTP error codes\\n- SFS: Gracefully handle out-of-space situations\\n- Build: Fix missing `.note.ABI-tag` ELF section causing exec format errors on\\n some platforms\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.12.0 --\x3e\\n\\n## What\'s Changed\\n* ci: migrate github output by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/307\\n* Change `ghcr.io/aquarist-labs` to `quay.io/s3gw`. by @votdev in https://github.com/aquarist-labs/s3gw/pull/310\\n* Update documentation for default-user S3 credentials by @giubacc in https://github.com/aquarist-labs/s3gw/pull/309\\n* ci: add nightly build by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/308\\n* ci: fix nightly build syntax by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/315\\n* ci: nightly - remove references to set-git-refs by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/316\\n* ci: nightly builds log into quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/317\\n* ci: use correct quay.io repo by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/318\\n* ci: nightly pipeline build-env outputs the tag by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/319\\n* docs: add release notes for v0.2.0 and v0.4.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/320\\n* ci: release pipeline, drop libradosgw by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/323\\n* s3gw: release notes for v0.11.0 by @jecluis in https://github.com/aquarist-labs/s3gw/pull/328\\n* docs: remove Release from Release Captain\'s ADR, and create a new document by @jecluis in https://github.com/aquarist-labs/s3gw/pull/321\\n* remove tools submodule by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/330\\n* Wip/tools merge by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/331\\n* docs: Update quickstart guide by @s0nea in https://github.com/aquarist-labs/s3gw/pull/329\\n* Add last ADRs to menu in docs by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/332\\n* fix: remove faulty submodule by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/333\\n* fix build_radosgw CCACHE environment variable by @irq0 in https://github.com/aquarist-labs/s3gw/pull/334\\n* ci: remove libradosgw from nightly builds by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/335\\n* ci: build-environment triggers and fixes by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/336\\n* ci: fix build-environment trigger by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/337\\n* ci: fix build environment container tags by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/338\\n* Fix (relative) path to s3gw-ui Git repository. by @votdev in https://github.com/aquarist-labs/s3gw/pull/342\\n* fix Dockerfile.build-radosgw-test-container by @giubacc in https://github.com/aquarist-labs/s3gw/pull/343\\n* ci: fix stupid input to GH action by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/339\\n* ci: build environment using buildx by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/344\\n* ci: fix naming of dockerfiles and workflow matrix by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/345\\n* ci: rebuild build environments weekly by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/346\\n* ci: fix s3-test runner script by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/340\\n\\n## New Contributors\\n* @s0nea made their first contribution in https://github.com/aquarist-labs/s3gw/pull/329\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.10.0...v0.12.0"},{"id":"release-notes-v0.11","metadata":{"permalink":"/blog/release-notes-v0.11","source":"@site/blog/2023-01-27-release-notes-0.11.md","title":"Release Notes - v0.11.0","description":"Release notes for v.0.11.0","date":"2023-01-27T00:00:00.000Z","formattedDate":"January 27, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.145,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.11.0","description":"Release notes for v.0.11.0","slug":"release-notes-v0.11","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"},"nextItem":{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"}},"content":"This release contains several notable features on the User Interface and on\\nthe Helm Chart, in addition to prefix support when listing objects and an\\nupdated version of the radosgw we use for the backend.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. Is is not\\nrecommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI:\\n - Add tags support for buckets (gh#aquarist-labs/s3gw#285).\\n - Add notification sidebar (gh#aquarist-labs/s3gw#172).\\n - Add option to remove buckets objects before deleting a bucket in the\\n administrator view.\\n\\n- Charts:\\n - Configuration options: `useExistingSecret` and\\n `defaultUserCredentialsSecret`.\\n\\n These fields allow the user to specify an existing secret containing\\n the S3 credentials for the default user.\\n - `useExistingSecret` is a boolean field defaulted to false.\\n - `defaultUserCredentialsSecret` is a string field denoting a `secret` in\\n the `s3gw` namespace. It must contain 2 keys:\\n - `RGW_DEFAULT_USER_ACCESS_KEY` that is the S3 Access Key for the default\\n user.\\n - `RGW_DEFAULT_USER_SECRET_KEY` that is the S3 Secret Key for the default\\n user.\\n - When `useExistingSecret` is set to `false`, the chart will create\\n the secret using values from the preexisting fields `accessKey` and\\n `secretKey`.\\n - Setting `accessKey` or `secretKey` as the empty string, will force the\\n Chart to compute random alphanumeric values for the fields.\\n - Defaulted values:\\n - `useExistingSecret`: false\\n - `defaultUserCredentialsSecret`: s3gw-creds\\n\\n- SFS/Backend:\\n - Added prefix support when listing objects and object versions.\\n\\n## Fixes\\n\\nNone that are particularly noteworthy.\\n\\n## Breaking Changes\\n\\nNone that we are aware of.\\n\\n## Known Issues\\n\\n- UI:\\n - It is not possible to remove all tags (gh#aquarist-labs/s3gw#314).\\n - It is not possible to change the bucket owner (gh#aquarist-labs/s3gw#86).\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.11.0 --\x3e\\n\\n## What\'s Changed\\n* ci: migrate github output by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/307\\n* Change `ghcr.io/aquarist-labs` to `quay.io/s3gw`. by @votdev in https://github.com/aquarist-labs/s3gw/pull/310\\n* Update documentation for default-user S3 credentials by @giubacc in https://github.com/aquarist-labs/s3gw/pull/309\\n* ci: add nightly build by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/308\\n* ci: fix nightly build syntax by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/315\\n* ci: nightly - remove references to set-git-refs by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/316\\n* ci: nightly builds log into quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/317\\n* ci: use correct quay.io repo by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/318\\n* ci: nightly pipeline build-env outputs the tag by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/319\\n* docs: add release notes for v0.2.0 and v0.4.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/320\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.10.0...v0.11.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n\\n* [s3gw](https://quay.io/repository/s3gw/s3gw)\\n* [s3gw-ui](https://quay.io/repository/s3gw/s3gw-ui)"},{"id":"deploy-s3gw-digital-ocean","metadata":{"permalink":"/blog/deploy-s3gw-digital-ocean","source":"@site/blog/2023-01-25-deploy-s3gw-digital-ocean.md","title":"Deploy s3gw in Digital Ocean","description":"In this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume).","date":"2023-01-25T00:00:00.000Z","formattedDate":"January 25, 2023","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"Digital Ocean","permalink":"/blog/tags/digital-ocean"}],"readingTime":3.515,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Deploy s3gw in Digital Ocean","description":"In this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume).","slug":"deploy-s3gw-digital-ocean","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","Digital Ocean"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"},"nextItem":{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"}},"content":"## Introduction\\n\\nIn this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume). This guide will use Digital Ocean, but these instructions will likely work with other cloud providers as well.\xa0\\n\\n\x3c!--truncate--\x3e\\n\\n## Background\\n\\nBefore you begin, if you have not heard yet of the\xa0[s3gw](https://s3gw.io/)\xa0project, read this article first. The s3gw is a lightweight S3 service for Kubernetes users running on top of a Longhorn PV (and it comes with a nice user interface).\\n\\nFor the purpose of this article, there is assumed knowledge of\xa0[K3s](http://k3s.io/),\xa0[Rancher](https://www.rancher.com/)\xa0and\xa0[Longhorn](http://longhorn.io/).\xa0 However, if you need more information, you will find plenty of useful information in this blog.\\n\\n## Prerequisites\\n\\nYou will need to have created a Droplet in Digital Ocean. For this specific tutorial, you will need the following:\xa0\\n\\n- OS: Ubuntu 20.04 (LTS) x64\xa0\\n- CPU Options: Regular Intel with SSD + 8 GB / 4 CPUs\xa0\xa0\\n- Add block storage: Leave as it is\xa0\\n- Datacenter region: Choose the datacenter region closer to you\xa0\\n- VPC Network: Leave as it is\xa0\\n- Authentication: via SSH, click the \\"new SSH Key\\", follow the instructions given (identify your ssh key properly) and after it is added, select it with the appropriate checkbox.\xa0\\n- Additional Options: Leave as it is\xa0\\n- Finalize and create: identify your droplet with a hostname (ex: `-local-rancher`).\\n- Hit Create Droplet\xa0\\n\\nAnd there you go! You have a system ready to hack on!\\n\\n## Prepare your system\xa0\\n\\nNow we need to set up your droplet. Install Helm:\\n\\n```bash\\n$ ssh root@IP-ADDRESS\\n$ apt-get install open-iscsi\\n$ snap install --classic helm\\n```\\n\\n1\\\\. Install K3s\xa0\\n\\nNow, set up K3s:\xa0\\n\\n```bash\\n$ curl -sfL [https://get.k3s.io](https://get.k3s.io/) | INSTALL_K3S_VERSION=\\"v1.24.7+k3s1\\" sh -s - server --cluster-init\xa0\\n$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml\xa0\xa0\\n```\\n\\n2\\\\. Define a Kubernetes namespace\xa0\\n\\nNow, we need to define a Kubernetes namespace where the resources created by the chart should be installed:\xa0\\n\\n```bash\\n$ kubectl create namespace cattle-system\xa0\\n```\\n\\n3\\\\. Set up certificate management\xa0\\n\\nNext, set up cert-manager:\xa0\\n\\n```bash\\n$ kubectl apply -f \xa0\\n\\n$ helm repo add jetstack [https://charts.jetstack.io](https://charts.jetstack.io/)\\n$ helm repo update\\n$ helm install cert-manager jetstack/cert-manager\\\\\\n\xa0 --namespace cert-manager\\\\\\n\xa0 --create-namespace\\\\\\n\xa0 --version v1.7.1\xa0\\n```\\n\\n4\\\\. Install Rancher server\xa0\\n\\nOnce you are done installing K3s, install Rancher through the helm chart:\xa0\\n\\n```bash\\n$ helm repo add rancher-latest \xa0\\n\\n$ helm install rancher rancher-latest/rancher\\\\\\n\xa0 --namespace cattle-system\\\\\\n\xa0 --set hostname= IP-ADDRESS[.sslip.io](http://164.92.168.210.sslip.io/)\\\\\\n\xa0 --set replicas=1\\\\\\n\xa0 --set bootstrapPassword=PASSWORD\xa0\\n```\\n\\nWe are using sslip.io as the DNS service. The installation will take some time. Then you will be ready to access Rancher:\xa0\\n\\n![Rancher login page](https://www.suse.com/c/wp-content/uploads/2023/01/article-rancher-1-1024x740.png)\\n\\n5\\\\. Retrieve the password\xa0\\n\\nRetrieve your password by running the following command:\xa0\\n\\n```bash\\n$ kubectl get secret --namespace cattle-system bootstrap-secret -o go-template=\'{{ .data.bootstrapPassword|base64decode}}{{ \\"\\\\n\\" }}\'\\n```\\n\\n## Install s3gw using the Rancher UI\\n\\nThe s3gw can be found in the Rancher UI as a partner chart:\xa0\\n\\nTo access, go to \\"Apps\\" and then \\"Charts\\". Choose the partner charts drop-down and click on the s3gw partner chart:\xa0\\n\\n![Rancher partner charts](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-partner-chart-1-1024x740.png)\\n\\nClick\xa0 \\"Install\\" and tick the \\"Customize Helm options before install\\":\xa0\\n\\n![s3gw-install](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-install-1024x740.png)\\n\\nHere are the remaining three steps:\xa0\\n\\n1. Set App Metadata: Select the project to install s3gw into.\xa0\\n2. Values: Here, you can set up access and secret keys, storage, etc. The chart sets up a Longhorn volume by default.\xa0 Update are the hostnames for the S3 service and the UI:\xa0\\n\\n![s3gw installation values](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-install-values-1024x779.png)\\n\\n3\\\\. Finally, there are other options you can also set up additional deployment options:\\n\\n![Helm options](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-helm-opts-1024x653.png)\\n\\nAnd that\'s it! You can now access the s3gw UI in https://s3gw-ui.your.ip.here.sslip.io) :\\n\\n![s3gw login](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-login-1024x747.png)\\n\\n\u26a0\ufe0f\xa0\\"Network failure\\" issue.\\n\\nWhen you try to log into the UI for the first time, you will find a \\"Network Failure\\" error. This is a\xa0[known issue](https://github.com/aquarist-labs/s3gw/issues/275).\xa0\\n\\nTo work around this issue, access the S3 service URL first ([https://s3gw.your.ip.here.sslip.io](https://s3gw.your.ip.here.sslip.io/)). You will then be able to log into the UI:\\n\\n![s3gw-file-explorer](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-file-explorer-1024x747.png)\\n\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.10","metadata":{"permalink":"/blog/release-notes-v0.10","source":"@site/blog/2022-12-22-release-notes-0.10.md","title":"Release Notes - v0.10.0","description":"Release notes for v.0.10.0","date":"2022-12-22T00:00:00.000Z","formattedDate":"December 22, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.93,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.10.0","description":"Release notes for v.0.10.0","slug":"release-notes-v0.10","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"},"nextItem":{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"}},"content":"This release contains several important changes to the UI and the charts as well\\nas the backend.\\nIn addition to that multiple issues in documentation and build tools were fixed.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI:\\n - Display more information on objects\\n - Table columns have a show/hide button\\n - Add search field to data tables\\n - Add progress indicator for the loading process of the Angular app\\n- Charts:\\n - Support certificate manager for handling certificates on endpoints\\n - Support cluster internal access with TLS enabled\\n- SFS/Backend\\n - Add status page\\n - Add metrics page exposing s3gw internal data to monitoring (e.g. Prometheus)\\n\\n## Fixes\\n\\n- UI:\\n - A page reload now does not disable the admin switch\\n - Persist data tables pagination settings\\n\\n## Breaking Changes\\n\\nNo known breaking changes\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.10.0 --\x3e\\n\\n## What\'s Changed\\n* doc: unify commit signing requirements by @tserong in https://github.com/aquarist-labs/s3gw/pull/268\\n* docs: update docs of helm deployment by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/264\\n* ci: release workflow push to quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/280\\n* docs: update the S3 compatibility table by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/278\\n* docs: add updated roadmap by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/274\\n* docs: add the contributing guides to docs by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/279\\n* docs: update documentation for cert-manager and TLS by @giubacc in https://github.com/aquarist-labs/s3gw/pull/282\\n* docs: add project vision by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/276\\n* docs: ensure helm documentation suggests https url by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/288\\n* docs: fix markdown syntax for ADR 0004 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/287\\n* docs: rework readme by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/291\\n* Docs: add requirements to docs & small updates to index page by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/293\\n* docs: logo and fixup readme links by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/294\\n* Remove paths from requirements.txt by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/296\\n* release: v0.10.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/299\\n* release: fixup for release v0.10.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/300\\n\\n## New Contributors\\n* @tserong made their first contribution in https://github.com/aquarist-labs/s3gw/pull/268\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.9.1...v0.10.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n- [s3gw](https://quay.io/repository/s3gw/s3gw)\\n- [s3gw-ui](https://quay.io/repository/s3gw/s3gw-ui)"},{"id":"release-notes-v0.9","metadata":{"permalink":"/blog/release-notes-v0.9","source":"@site/blog/2022-12-01-release-notes-0.9.md","title":"Release Notes - v0.9.0","description":"Release notes for v.0.9.0","date":"2022-12-01T00:00:00.000Z","formattedDate":"December 1, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.335,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.9.0","description":"Release notes for v.0.9.0","slug":"release-notes-v0.9","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"},"nextItem":{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"}},"content":"This release introduces some notable changes to Charts, together with UI improvements.\\nAs usual, we are improving the overall quality of the project by addressing issues to documentation, testing, UI and tools.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one should feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- Charts\\n - Add configuration options: `serviceName`, `publicDomain`, `privateDomain`\\n to configure the s3gw-service\'s public domain used by the Ingress\\n and the private domain used inside the Kubernetes cluster.\\n - Defaulted values:\\n - `serviceName` : s3gw\\n - `publicDomain` : be.127.0.0.1.omg.howdoi.website\\n - `privateDomain` : svc.cluster.local\\n - Add configuration options: `ui.serviceName`, `ui.publicDomain`\\n to configure the s3gw-ui-service\'s public domain used by\\n the Ingress.\\n - Defaulted values:\\n - `ui.serviceName` : s3gw-ui\\n - `ui.publicDomain` : fe.127.0.0.1.omg.howdoi.website\\n - Add configuration option: `logLevel` to set the s3gw-service\'s\\n log verbosity.\\n - Defaulted value: `1`\\n - (gh#aquarist-labs/s3gw#180)\\n\\n- UI\\n - Add multi-selection support to data tables (gh#aquarist-labs/s3gw#135).\\n\\n## Fixes\\n\\n- UI\\n - Creating a bucket with spaces crashed the app (gh#aquarist-labs/s3gw#225).\\n - Fix URL in the dashboard buckets widget (gh#aquarist-labs/s3gw#240).\\n\\n## What\'s Changed\\n\\n- UI\\n - Combine the regular and administrator UI (gh#aquarist-labs/s3gw#175).\\n\\n- Charts\\n - Remove configuration options: `hostname` and `ui.hostname`, both superseded\\n by the newly added variables. (gh#aquarist-labs/s3gw#180)\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway be stopped, ongoing multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters."},{"id":"introduction-to-s3gw","metadata":{"permalink":"/blog/introduction-to-s3gw","source":"@site/blog/2022-11-21-introduction-to-s3gw.md","title":"Introduction to s3gw","description":"Introductory blog post on the s3gw Project, a standalone S3 service based in the RADOS Gateway project.","date":"2022-11-21T00:00:00.000Z","formattedDate":"November 21, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"introduction","permalink":"/blog/tags/introduction"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Introduction to s3gw","description":"Introductory blog post on the s3gw Project, a standalone S3 service based in the RADOS Gateway project.","slug":"introduction-to-s3gw","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","introduction"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"},"nextItem":{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"}},"content":"s3gw is an S3-compatible service focused on deployments in a Kubernetes environment backed by any PVC, including\xa0[Longhorn](https://longhorn.io/).\xa0Since its inception,\xa0the primary focus has been on cloud native deployments. However, the s3gw can be deployed in a myriad of scenarios, provided some form of storage is attached.\\n\\n\x3c!--truncate--\x3e\\n\\ns3gw is based on Ceph\'s RADOSGW (RGW) but runs as a stand--alone service without the RADOS cluster and relies on a storage backend still under heavy development by the storage team at SUSE. The s3gw team is also developing a web-based UI for management and an object explorer.\xa0\\n\\n## The s3gw service\\n\\nDistributed as a small container, the s3gw service runs RGW and exposes an S3-compatible API. Instead of requiring a full Ceph cluster deployment, we leverage RGW\'s standalone capabilities and keep data on a local storage volume. Although the focus is on running within a Kubernetes environment with on-premise storage provided to the container, s3gw can consume any storage type with a filesystem on it. This can be PVC in Kubernetes or a local directory on a development machine.\xa0\\n\\nAs the container consumes the storage volume, the object data is kept in a hash tree of directories and the metadata is kept in an SQLite database. This allows us to leverage the ACID properties of SQLite to ensure the state is committed atomically while keeping large blobs of data on the filesystem and away from SQLite\'s path.\xa0\\n\\nIn the future,\xa0we will release a blog post describing the s3gw service\'s data store in more depth.\xa0\\n\\nHowever, it should be noted that we don\'t support all RGW\'s S3 APIs. Some components are still under development and other features not yet included that are required for proper operation.\xa0\\n\\nFor example, while deleting objects and buckets is currently supported, we don\'t support lifecycle management. Lifecycle policies and IAM are some of the things that we will be working on shortly.\xa0\\n\\n## The s3gw web UI\\n\\nAlso distributed as a small container, the s3gw web UI provides an intuitive way of interacting with the s3gw service. This includes user and bucket management, as well as an object explorer.\xa0\\n\\nWe have a few screenshots of the current UI version below, but please keep in mind that we are still actively developing it and it is not feature-complete.\\n\\n![s3gw login page screenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-login-1-1024x747.png)\\n![s3gw dashboard screenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-dashboard-1-1024x747.png)\\n![s3gw bucket creation](https://www.suse.com/c/wp-content/uploads/2022/11/Screenshot-2022-11-21-at-15.49.46-1024x751.png)\\n![s3gw bucket list dashboard screeenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-list-buckets-1024x747.png)\\n![s3gw file explorer](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-file-explorer-1-1024x747.png)\\n\\n## \xa0Installing\\n\\nYou may find our Helm chart helpful if you have a Kubernetes cluster, whichever flavor that might be. You\'ll be able to find it on\xa0[ArtifactHub](https://artifacthub.io/packages/helm/s3gw/s3gw),\xa0and our\xa0[documentation](https://s3gw-docs.readthedocs.io/en/latest/helm-charts/)\xa0can provide important insights as to available configuration values.\xa0\\n\\nAlternatively, if you are using Rancher, you may find s3gw available in the Partner repository, as depicted below:\\n\\n![Partner repository](https://www.suse.com/c/wp-content/uploads/2022/11/Screenshot-2022-11-21-at-16.04.15-1024x372.png)\\n\\n## Call for action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.8","metadata":{"permalink":"/blog/release-notes-v0.8","source":"@site/blog/2022-11-11-release-notes-0.8.md","title":"Release Notes - v0.8.0","description":"Release notes for v.0.8.0","date":"2022-11-11T00:00:00.000Z","formattedDate":"November 11, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.1,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.8.0","description":"Release notes for v.0.8.0","slug":"release-notes-v0.8","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"},"nextItem":{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"}},"content":"This release adds several bug fixes, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- S3GW\\n - Added a mechanism to check for incompatibility issues without changing the\\n original metadata database. When any incompatibility is found it is also shown\\n in the logs.\\n - Added GC thread deleting permanently removed buckets, its objects and\\n versions.\\n\\n- UI\\n - Add basic object management features (#146).\\n - Add feature to upload objects into buckets via browser (#167).\\n\\n## Fixes\\n\\n- S3GW\\n - Fixed segfault when SFSAtomicWriter::complete is called with mtime output\\n variable set to nullptr\\n\\n- UI\\n - Fix table pagination issue. Only the first page was visible.\\n\\n## What\'s Changed\\n\\n- S3GW\\n - In order to make stat_bucket call available, SFSBucket::update_container_stat\\n now returns 0.\\n\\n- UI\\n - Display an error message on the login page if the RGW endpoint is not\\n configured correctly.\\n\\n- Charts\\n - Expose `ETag` header in the Traefik s3gw ingress to allow multipart\\n uploads via browser (#170).\\n - Add the `OPTIONS` method to the Traefik CORS configuration (#188).\\n - Fix an issue in the GW ingress related to TLS + wildcard host.\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, ongoing multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at main --\x3e\\n\\n## What\'s Changed\\n* Update charts submodule after 0.7.0 release by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/169\\n* adr: Adds ADR for project labels by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/148\\n* adr: Add instruction for release captain by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/153\\n* docs: Update rancher instructions and change addresses by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/200\\n* Update the release captain howto to the latest workflow. by @votdev in https://github.com/aquarist-labs/s3gw/pull/201\\n* Release v0.8.0 by @votdev in https://github.com/aquarist-labs/s3gw/pull/205\\n* Update docs. by @votdev in https://github.com/aquarist-labs/s3gw/pull/206\\n* Release v0.8.0 by @votdev in https://github.com/aquarist-labs/s3gw/pull/207\\n* Adapt and add ADRs by @votdev in https://github.com/aquarist-labs/s3gw/pull/209\\n* Adapt .gitmodules to new branch names. by @votdev in https://github.com/aquarist-labs/s3gw/pull/210\\n* Adapt release process docs. Tags need to be created. by @votdev in https://github.com/aquarist-labs/s3gw/pull/211\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.7.0...v0.8.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n- [s3gw](https://github.com/aquarist-labs/s3gw/pkgs/container/s3gw)\\n- [s3gw-ui](https://github.com/aquarist-labs/s3gw/pkgs/container/s3gw-ui)"},{"id":"release-notes-v0.7","metadata":{"permalink":"/blog/release-notes-v0.7","source":"@site/blog/2022-10-20-release-notes-0.7.md","title":"Release Notes - v0.7.0","description":"Release notes for v.0.7.0","date":"2022-10-20T00:00:00.000Z","formattedDate":"October 20, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.6,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.7.0","description":"Release notes for v.0.7.0","slug":"release-notes-v0.7","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"},"nextItem":{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"}},"content":"This release adds several bug fixes, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI\\n - Add basic bucket management features for non-admin users.\\n They can create/update/delete buckets.\\n\\n## Fixes\\n\\n- S3GW\\n - Fixed queries to users by access key when user has multiple keys.\\n - Fixed a circular lock dependency, which could lead to a deadlock when\\n aborting multiparts for an object while finishing a different object.\\n\\n- UI\\n - Login page does not show error messages.\\n\\n## What\'s Changed\\n\\n- UI:\\n - Continuing to adapt the UI according to the Rancher UI design kit.\\n - Error reporting has been improved.\\n\\n- Charts\\n - Properly label all components of the chart to give helm hints about what is part\\n of the chart.\\n - Redesing registry access variables to be usable with private registries\\n - Improve rancher questions to guide the installation in a more user friendly form\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, on-going multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n- Metadata stored in sqlite is no longer compatible with previous versions.\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.7.0 --\x3e\\n\\n## What\'s Changed\\n* docs: revise helm install procedure by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/140\\n* docs:Adds Contributing guides by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/152\\n* Release v0.7.0 by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/158\\n* Revert 0.7.0 release by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/163\\n* Release 0.7.0 by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/168\\n\\n## New Contributors\\n* @0xavi0 made their first contribution in https://github.com/aquarist-labs/s3gw/pull/158\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.6.1...v0.7.0"},{"id":"release-notes-v0.6","metadata":{"permalink":"/blog/release-notes-v0.6","source":"@site/blog/2022-09-29-release-notes-0.6.md","title":"Release Notes - v0.6.0","description":"Release notes for v.0.6.0","date":"2022-09-29T00:00:00.000Z","formattedDate":"September 29, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.33,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.6.0","description":"Release notes for v.0.6.0","slug":"release-notes-v0.6","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"},"nextItem":{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"}},"content":"This release adds several new features, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- S3GW\\n - Delete/Undelete objects.\\n - Ability to list buckets via admin REST API.\\n - Support for bucket ACL.\\n - Multipart uploads\\n - Objects are stored in metadata using bucket id instead of bucket name.\\n - Longhorn custom settings for installation.\\n - Ability to build a s3gw-test image able to run google-tests.\\n- UI\\n - Adapt the UI according to the Rancher UI design kit.\\n- Charts\\n - Set up & added helm chart to [Artifacthub.io](https://artifacthub.io/packages/helm/s3gw/s3gw)\\n\\n## Fixes\\n\\n- S3GW\\n - Show delete markers when listing object versions.\\n\\n## What\'s Changed\\n\\n- UI:\\n - Adapt the UI according to the Rancher UI design kit.\\n- Charts\\n - Storage settings redesign to allow using an existing storage class while\\n keeping it easy to use Longhorn and local storage with minimal work required\\n - Give TLS certificates to UI ingress as well -Enable TLS endpoints for\\n Traefik ingress\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, on-going multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n- Metadata stored in sqlite is no longer compatible with previous versions.\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.5.0...v0.6.0"},{"id":"release-notes-v0.5","metadata":{"permalink":"/blog/release-notes-v0.5","source":"@site/blog/2022-09-15-release-notes-0.5.md","title":"Release Notes - v0.5.0","description":"Release notes for v.0.5.0","date":"2022-09-15T00:00:00.000Z","formattedDate":"September 15, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.65,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.5.0","description":"Release notes for v.0.5.0","slug":"release-notes-v0.5","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"},"nextItem":{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"}},"content":"This release add a few small fixes to the last release, especially in the UI.\\nIn addition to that, testing and other development processes have improved quite\\na bit.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not\\nrecommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github\\nrepository](https://github.com/aquarist-labs/s3gw).\\n\\n## Features\\n\\n- UI: Add Dashboard widget framework. aquarist-labs/s3gw#91\\n- UI: Add `Total users` and `Total buckets` Dashboard widgets.\\n- Chart: The variables `hostnameNoTLS`, `ui.hostname` and `ui.hostnameNoTLS`\\n has been added to configure the hostnames of the S3GW and S3GW-UI.\\n- Chart: Defaulted `ui.enabled` to `true`.\\n- S3GW: Added columns in the sqlite buckets table: zone_group & quota\\n\\n## Fixes\\n\\n- S3GW: Fixed the admin API request: get-bucket-info where the client was\\n receiving an empty response. aquarist-labs/s3gw#87\\n- UI: Mark the user/bucket quota settings in the user form as non-functional\\n because the feature is not properly supported by the S3GW.\\n aquarist-labs/s3gw#106\\n- Chart: Rename the `access_key` and `secret_key` variable names according\\n the Helm Chart best practices guide to `accessKey` and `secretKey`.\\n- Chart: Rename the `enableIngress` variable to `ingress.enabled`.\\n- Chart: Relocate the variables `imageRegistry_ui`, `imageName_ui`,\\n `imageTag_ui` and `imagePullPolicy_ui` to `ui.imageRegistry`,\\n `ui.imageName`, `ui.imageTag` and `ui.imagePullPolicy`\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads don\'t work\\n\\n\\n## What\'s Changed\\n* docs: update k3s-setup section by @torchiaf in https://github.com/aquarist-labs/s3gw/pull/93\\n* ci: pass credentials to s3gw-tools workflow by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/101\\n* ci: use secret inherittance by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/102\\n* Adds templates for issues & PR by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/97\\n* Updates PR template by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/104\\n* ci: release workflow by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/105\\n* ci: create github release by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/109\\n* release: v0.5.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/111\\n* ci: release workflow: use github token by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/112\\n\\n## New Contributors\\n* @torchiaf made their first contribution in https://github.com/aquarist-labs/s3gw/pull/93\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.4.0...v0.5.0"},{"id":"release-notes-v0.4","metadata":{"permalink":"/blog/release-notes-v0.4","source":"@site/blog/2022-09-01-release-notes-0.4.md","title":"Release Notes - v0.4.0","description":"Release notes for v.0.4.0","date":"2022-09-01T00:00:00.000Z","formattedDate":"September 1, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.815,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.4.0","description":"Release notes for v.0.4.0","slug":"release-notes-v0.4","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"},"nextItem":{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"}},"content":"With v0.4.0 we introduce Object Versioning in the Gateway.\\nOther than this, we are improving the project in almost all aspects,\\nfrom the UI and Helm Charts to the Continuos Integration and Testing.\\nRead the subsequent sections for all the changes in detail.\\n\\n\\n\x3c!--truncate--\x3e\\n\\n**This release is meant for testing and feedback gathering. It is not\\nrecommended for production use.**\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github repository][1].\\n\\n## s3gw\\n\\nThe Gateway introduces Object Versioning.\\n### Added\\n\\n- New, easy-to-read documentation. Found here: https://s3gw-docs.readthedocs.io/en/latest/\\n- Object Versioning.\\n- Enable / Disable bucket versioning.\\n- When versioning is enabled and a new object is pushed it creates a new version,\\n keeping the previous one.\\n- Objects versions list\\n- Download specific version (older versions than the last one)\\n- Object delete (delete mark is added in a new version)\\n\\n### Fixed\\n\\n- An issue where the creation time of a bucket was displayed\\n as the current machine time.\\n- The json response for creation bucket rest call for `system`\\n users.\\n\\n## s3gw-ui\\n\\nThe UI has seen several major improvements and fixes.\\n\\n### Added\\n\\n- The ability to configure none/unlimited buckets per user.\\n- User/Bucket Quota configuration per user.\\n- Basic bucket management support.\\n- Project branding.\\n\\n## s3gw-charts\\n\\n### Added\\n\\n- Set `system` flag for default user\\n- Documentation to support PVC selection\\n\\n### Changed\\n\\n- Removed Traefik installation from CI pipeline\\n- Disabled version check for linter\\n- Configured UI and added information about CORS\\n\\n### Fixed\\n\\n- Some typos in documentation and code.\\n\\n## s3gw-tools\\n\\n### Added\\n\\n- Option: \'--no-s3gw\' to env/setup.sh to install K3s only.\\n- Option: \'--import-local-image\' and \'--import-local-ui-image\' options to\\n import local s3gw and s3gw-ui images into a running K3s.\\n- Enriched test suite with: `tests/s3gw-buckets-rest-api-test.py` to test bucket-related rest calls.\\n\\n### Changed\\n\\n- Relocated docs to [s3gw repository](https://github.com/aquarist-labs/s3gw/docs).\\n- Boost system packages updated to version 80_0 in gateway\'s Dockerfiles.\\n\\n## Deploying\\n\\nPlease refer to our [documentation][2] on how to start playing with the s3gw.\\nFor Helm chart fans, information can be found [here][3].\\n\\n[1]: https://github.com/aquarist-labs/s3gw\\n[2]: https://github.com/aquarist-labs/s3gw#quickstart\\n[3]: https://github.com/aquarist-labs/s3gw-charts#install"},{"id":"release-notes-v0.3","metadata":{"permalink":"/blog/release-notes-v0.3","source":"@site/blog/2022-08-05-release-notes-0.3.md","title":"Release Notes - v0.3.0","description":"Release notes for v.0.3.0","date":"2022-08-05T00:00:00.000Z","formattedDate":"August 5, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.3.0","description":"Release notes for v.0.3.0","slug":"release-notes-v0.3","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"},"nextItem":{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"}},"content":"With v0.3.0 a few things changed in the overall project:\\n\\n- the `s3gw-core` repository has been renamed `s3gw-tools`;\\n- the main repository is now [s3gw][1];\\n- the `s3gw` repository contains documentation and all other s3gw-related\\n projects as submodules.\\n\\nWe are also releasing containers for `s3gw` and `s3gw-ui` with this version.\\nRead below for more information.\\n\\n\x3c!--truncate--\x3e\\n\\n**This release is meant for testing and feedback gathering. It is not\\nrecommended for production use.**\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github repository][1].\\n\\n## s3gw\\n\\n### What we support\\n\\nAt the moment we support creating buckets, doing basic operations on objects\\n(PUT/GET/DELETE), and listing bucket contents.\\n\\n### What we don\'t support\\n\\n- deleting buckets.\\n- multipart uploads.\\n- everything else not specified in the previous section.\\n\\n### What Changed\\n\\n**This version introduces a new on-disk format for s3gw. Previous deployments\\nwill not work and will need to be redeployed.**\\n\\n#### Added\\n\\n- rgw/sfs: new on-disk format, based on filesystem hash tree for data\\n and sqlite for metadata.\\n- rgw/sfs: maintain one single sqlite database connection.\\n- rgw/sfs: protect sqlite access with \'std::shared_lock\'; allows multiple\\n parallel reads, but only one write at a time.\\n- rgw/sfs: allow copying objects; the current implementation breaks S3\\n semantics by returning EEXIST if the destination object exists.\\n\\n#### Known Issues\\n\\n- object copy fails if the destination object exists; this will be addressed at\\n a later stage.\\n\\n#### Changed\\n\\n- rgw/sfs: no longer create directory hierarchy when initing the store; instead,\\n ensure the sfs path exists by creating its directory if missing.\\n\\n#### Removed\\n\\n- rgw/sfs: remove unused data and metadata functions, artifacts from our\\n previous file-based implementation.\\n\\n## s3gw-ui\\n\\nThe UI has seen several improvements and fixes.\\n\\n## Deploying\\n\\nPlease refer to our [documentation][2] on how to start playing with the s3gw.\\nFor Helm chart fans, information can be found [here][3].\\n\\n[1]: https://github.com/aquarist-labs/s3gw\\n[2]: https://github.com/aquarist-labs/s3gw#quickstart\\n[3]: https://github.com/aquarist-labs/s3gw-charts#install"},{"id":"does-your-pv-need-s3-access","metadata":{"permalink":"/blog/does-your-pv-need-s3-access","source":"@site/blog/2022-07-28-pv-s3-access.md","title":"Does your PV need S3 access? We\u2019ve got you covered","description":"In a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.","date":"2022-07-28T00:00:00.000Z","formattedDate":"July 28, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"Longhorn","permalink":"/blog/tags/longhorn"}],"readingTime":7.58,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Does your PV need S3 access? We\u2019ve got you covered","description":"In a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.","slug":"does-your-pv-need-s3-access","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","Longhorn"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"},"nextItem":{"title":"Contain your excitement, the s3gw is in town","permalink":"/blog/s3gw-rados-gateway-standalone"}},"content":"Increased demand for cloud storage solutions has become a crucial topic in recent years: companies are requiring data to be made more readily available for their cloud-native applications.\\n\\n\x3c!--truncate--\x3e\\n\\nIncreased demand for cloud storage solutions has become a crucial topic in recent years: companies are requiring data to be made more readily available for their cloud-native applications.\\n\\nIn a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.\\n\\n## Simple Storage Service\\n\\n![S3 logo](https://www.suse.com/c/wp-content/uploads/2022/07/s3.png)\\n\\n[Simple Storage Service,](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)\xa0or S3, is a protocol designed by Amazon that\xa0launched in the United States market in 2006. S3 is a vast protocol that covers key concepts such as\xa0*buckets*,\xa0*objects*,\xa0*keys*,\xa0*versioning*,\xa0*ACLs*\xa0and\xa0*regions*.\\n\\nTo continue with this article, you need to know that the S3 API can be invoked with REST calls and that you can just store your objects inside holders called buckets. For more information, there are other resources available online.\\n\\n## \xa0K3s and Rancher\\n\\nThis article explores the use of\xa0[K3s](https://k3s.io/)\xa0and\xa0[Rancher](https://rancher.com/)\xa0as foundations for experiments with an S3 gateway.\\n\\n![K3S logo](https://www.suse.com/c/wp-content/uploads/2022/05/k3s-icon-color-1-300x245.png)\\n\\nK3s is a lightweight Kubernetes distribution that runs smoothly on Edge low resource devices. Rancher is a graphical user manager that simplifies the underlying complexity of a Kubernetes cluster.\\n\\n![Rancher logo](https://www.suse.com/c/wp-content/uploads/2022/05/rancher-logo-cow-black.png)\\n\\nWith Rancher, you can manage a cluster in a user-friendly fashion, regardless of the Kubernetes version being used.\\n\\n## Longhorn\\n\\n![Longhorn logo](https://www.suse.com/c/wp-content/uploads/2022/07/longhorn.png)\\n\\nA Kubernetes cluster and manager alone are not sufficient when dealing with cloud storage. You could use the primitive resources offered by a standard Kubernetes cluster such as the basic persistent volume types,\xa0but we recommend installing a component that takes care of providing your pods with some advanced storage resource.\\n\\nIt is desirable to have a system that can take care of your data securely and in a redundant fasion and expose volumes with the standard Kubernetes interfaces.\xa0[Longhorn](https://longhorn.io/)\xa0is the right system for this kind of need. Built from scratch to work natively with Kubernetes, Longhorn allows pods to obtain highly available persistent volumes. The portion of storage managed by Longhorn is replicated so that a\xa0hardware failure does not compromise user\'s data.\\n\\n## S3 Gateway\\n\\n![S3GW logo](https://www.suse.com/c/wp-content/uploads/2022/07/logo-s3gw-300x256.png)\\n\\nHaving Longhorn deployed on your cluster allows the\xa0persistent volumes to be consumed by internal applications deployed on Kubernetes. If you want to give access to the data to external clients, you need an S3 gateway.\\n\\nExternal clients can store and read data to and from the cluster using the S3 API. For this role, we are going to employ\xa0[s3gw.](https://aquarist-labs.io/s3gw/)\\n\\ns3gw is being developed on the foundations of\xa0[Ceph](https://ceph.com/en/)\xa0S3 gateway: radosgw. Even if s3gw is still in its infancy and still in an early stage of development, it can already be used to test and play with S3 functionalities.\\n\\n## Let\'s start cooking ingredients\\n\\nNow that you have identified all the pieces, you are ready to start building your environment.\\\\\\nFor this tutorial, we are installing K3s on an OpenSUSE Linux OS. For the sake of simplicity, because Kubernetes needs to have certain networking resources available, it can be worth completely disabling the system firewall.\\n\\nIf you prefer to keep your firewall on, have a look\xa0[here](https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/#networking).\\n\\n### Stop Firewall\\n\\nFrom a shell prompt, run the following command:\\n\\n```bash\\nsudo systemctl stop firewalld.service\\n```\\n\\n### Install K3s\\n\\nFrom a shell prompt, run the following command:\\n\\n```bash\\n$ curl -sfL | INSTALL_K3S_VERSION=v1.23.9+k3s1 sh -\\n```\\n\\nAfter installation has terminated, you can check that the cluster is running with:\\n\\n```bash\\n$ sudo kubectl get nodes\\n```\\n\\nIf everything is ok, you should see something similar:\\n\\n```bash\\nNAME STATUS ROLES AGE VERSION\\nsuse Ready control-plane,master 56s v1.23.8+k3s1\\n```\\n\\nIf you prefer using K3s with your regular user and not as root, you can run:\\n\\n```bash\\n$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config && chown $USER ~/.kube/config && chmod 600 ~/.kube/config && export KUBECONFIG=~/.kube/config\\n```\\n\\nAfter this, you will be able to operate on K3s with your user.\\n\\n### Install Helm\\n\\n![Helm logo](https://www.suse.com/c/wp-content/uploads/2022/07/helm-260x300.png)\\n\\nWe are going to install Rancher using an\xa0[Helm](https://helm.sh/)\xa0chart, so you must first install Helm on the system:\\n\\n```bash\\n$ sudo zypper install helm\\n```\\n\\n### Deploy Rancher\\n\\nLet\'s begin to install Rancher adding the its latest repo to Helm:\\n\\n```bash\\n$\xa0helm repo add rancher-latest \\n```\\n\\nAfter this, you must define a new Kubernetes namespace where Rancher will install:\\n\\n```bash\\n$ kubectl create namespace cattle-system\\n```\\n\\nAs the official\xa0[documentation](https://rancher.com/docs/rancher/v2.6/en/installation/install-rancher-on-k8s/#install-the-rancher-helm-chart)\xa0dictates, this must be named\xa0*cattle-system.*\\n\\nBecause Rancher management server is designed to be secure by default and requires SSL/TLS configuration you must deploy some additional resource:\\n\\n```bash\\n$ kubectl apply -f \\n\\n$ helm repo add jetstack \\n\\n$ helm install cert-manager jetstack/cert-manager\\\\\\n --namespace cert-manager\\\\\\n --create-namespace\\\\\\n --version v1.7.1\\n```\\n\\nLet\'s check that the cert-manager has successfully deployed and the related pods are running:\\n\\n```bash\\n$ kubectl get pods --namespace cert-manager\\n```\\n\\n```bash\\nNAME READY STATUS RESTARTS AGE\\ncert-manager-5c6866597-zw7kh 1/1 Running 0 2m\\ncert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m\\ncert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m\\n```\\n\\nNow, you are required to define an hostname in /etc/hosts pointing to the ip address of one of the host\'s physical interfaces, for example:\\n\\n10.0.0.2 rancher.local\\n\\nAfter this, you can finally launch the Rancher installation command:\\n\\n```bash\\nhelm install rancher rancher-latest/rancher\\\\\\n --namespace cattle-system\\\\\\n --set hostname=rancher.local\\\\\\n --set bootstrapPassword=admin\\n```\\n\\nWhen Rancher\'s pods have booted up,\xa0 with your browser you can navigate to:\xa0 and complete the initial setup:\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2022/07/rancher1-1024x943.png)\\n\\nOnce you have completed the step, and saved the password, you can start exploring your local cluster with the graphical manager:\\n\\n![Screenshot 2](https://www.suse.com/c/wp-content/uploads/2022/07/rancher.local_-1024x614.png)\\n\\nDepending on what you have deployed on the cluster, you could see more or less resource consumption.\\n\\n### Deploy Longhorn\\n\\nYou can now deploy Longhorn using the Charts chooser under the Apps section on the left of the Rancher\'s dashboard:\\n\\n![](https://www.suse.com/c/wp-content/uploads/2022/07/rancher3-1024x727.png)\\n\\nThe installation is pretty straightforward and you don\'t need to change any default value of the chart.\\\\\\nIn the end, if everything has gone well, you should see the Rancher\'s console showing:\\n\\n![Screenshot 3](https://www.suse.com/c/wp-content/uploads/2022/07/ranch-longh-install-1024x596.png)\\n\\nAfter Longhorn has been installed, you can simply click on the Longhorn entry on the left Rancher\'s menu to be redirected to the Longhorn\'s dashboard:\\n\\n![](https://www.suse.com/c/wp-content/uploads/2022/07/long-dash-1024x651.png)\\n\\nA freshly installation of Longhorn shows that still no application is using a persistent volume.\\n\\n### Deploy s3gw\\n\\nYou are now ready to add the last ingredient to your system: s3gw, the S3 gateway.\\\\\\nRancher does not bundle with the\xa0[Helm repository of s3gw](https://github.com/aquarist-labs/s3gw-charts)\xa0set\xa0by default, so you must add it from the dashboard:\\n\\n![Screenshot 4](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-repo-add-1024x608.png)\\n\\nYou can choose an unique name: for example: s3gw.\\\\\\nFor the Target field you have to choose Git repository and the repository URL:\\n\\n\\n\\nIn the Git Branch field put the latest available release:\\n\\nv0.2.0\\n\\nYou can now click on Create button.\\\\\\nOn Apps section, you can now find the s3gw chart:\\n\\n![Screenshot 5](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-chart-1024x630.png)\\n\\nSo let\'s proceed with installation; you can choose a namespace and a name for s3gw:\\n\\n![Screenshot 6](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-ns1-1024x657.png)\\n\\nYou don\'t need to customize the chart, so you can leave the bottom checkbox unchecked.\\\\\\nOnce the installation completed, if everything has gone well, you should see the Rancher\'s console showing:\\n\\n![Screenshot 7](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-installed-1024x774.png)\\n\\nOn Longhorn dashboard, you can verify that the application is using a Longhorn persistent volume:\\n\\n![Screenshot 8](https://www.suse.com/c/wp-content/uploads/2022/07/lh-s3gw-1024x480.png)\\n\\n### Test the S3 gateway\\n\\nBy default the s3gw chart configures an ingress resource pointing to the S3 gateway with the FQDN: s3gw.local .\\\\\\nThus, you must define\xa0s3gw.local in /etc/hosts pointing to the ip address of one of the host\'s physical interfaces, for example:\\n\\n10.0.0.2 s3gw.local\\n\\nFor testing the S3 gateway you can rely on\xa0[s3cmd](https://github.com/s3tools/s3cmd)\xa0that is a popular command line S3 client.\\\\\\nYou can install it choosing a method listed\xa0[here](https://github.com/s3tools/s3cmd/blob/master/INSTALL.md).\\\\\\nOnce you have installed it, you can take the s3cmd configuration file from\xa0[here](https://raw.githubusercontent.com/aquarist-labs/s3gw-core/main/env/s3cmd.cfg)\xa0and use that as it is against s3gw.\\\\\\nAll you need to to is to create a directory, put s3cmd.cfg inside that and finally invoke s3cmd.\\n\\n#### Create a bucket\\n\\n```bash\\n$\xa0s3cmd -c s3cmd.cfg mb s3://foo\\n```\\n\\n#### Put some objects in the bucket\\n\\nLet\'s create a 1mb file filled with random data and put it in the\xa0 bucket:\\n\\n```bash\\n$ dd if=/dev/random bs=1k count=1k of=obj.1mb.bin\\n$ s3cmd -c s3cmd.cfg put obj.1mb.bin s3://foo\\n```\\n\\nLet\'s create a 10mb file filled with random data and put it in the bucket:\\n\\n```bash\\n$ dd if=/dev/random bs=1k count=10k of=obj.10mb.bin\\n$ s3cmd -c s3cmd.cfg put obj.10mb.bin s3://foo\\n```\\n\\n#### List objects contained in a bucket\\n\\n```bash\\n$ s3cmd -c s3cmd.cfg ls s3://foo\\n2022-07-26 15:03 10485760 s3://foo/obj.10mb.bin\\n2022-07-26 15:01 1048576 s3://foo/obj.1mb.bin\\n```\\n\\n#### Delete an object\\n\\n```bash\\n$ s3cmd -c s3cmd.cfg rm s3://foo/obj.10mb.bin\\n```\\n\\n### In summary\\n\\nIn this tutorial, you\'ve seen how to set up a K3s cluster, manage it with Rancher, install Longhorn and finally enrich the system with a S3 gateway. K3s, Rancher and Longhorn are powerful tools to set up an environment providing resilient and performing storage capabilities. If you need to expose the storage to external clients, you can choose to install s3gw with a near zero effort.\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"s3gw-rados-gateway-standalone","metadata":{"permalink":"/blog/s3gw-rados-gateway-standalone","source":"@site/blog/2022-07-22-sg3w-is-in-town.md","title":"Contain your excitement, the s3gw is in town","description":"We\'ve developed a standalone RADOS Gateway. Welcome to the s3gw Project.","date":"2022-07-22T00:00:00.000Z","formattedDate":"July 22, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"}],"readingTime":0.98,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Contain your excitement, the s3gw is in town","description":"We\'ve developed a standalone RADOS Gateway. Welcome to the s3gw Project.","slug":"s3gw-rados-gateway-standalone","authors":[{"name":"The s3gw team"}],"tags":["blog"],"hide_table_of_contents":false},"prevItem":{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"}},"content":"The Aquarist Labs team is back with an open source and cloud-native S3 service. After spending months investigating a storage appliance built on Ceph, the team identified the need to complement the Rancher storage portfolio with their unique skillsets and lessons learned from their time developing Aquarium.\\n\\n\x3c!--truncate--\x3e\\n\\nIntroducing the [s3gw project][1], an S3-compatible gateway running a standalone [RADOS Gateway (RGW)][2] implementation, using a non-RADOS backend for standalone usage. This new project provides the required infrastructure to build a container able to run on a Kubernetes cluster with S3-compatible endpoints to applications.\\n\\nThis is the first publicly available iteration of the s3gw project. We expect (and welcome!) bugs and we know our performance is not optimal (yet!). This release is meant for testing and feedback gathering and it is not recommended for production use. See our release notes for more details.\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42\\n\\n[1]:https://github.com/aquarist-labs/s3gw\\n[2]:https://docs.ceph.com/en/quincy/radosgw/"}]}')}}]); \ No newline at end of file diff --git a/assets/js/b2f554cd.d176fbcf.js b/assets/js/b2f554cd.d176fbcf.js new file mode 100644 index 0000000..d38ea93 --- /dev/null +++ b/assets/js/b2f554cd.d176fbcf.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[1477],{10:e=>{e.exports=JSON.parse('{"blogPosts":[{"id":"/2023/08/31/release-notes-0.20","metadata":{"permalink":"/blog/2023/08/31/release-notes-0.20","source":"@site/blog/2023-08-31-release-notes-0.20.md","title":"Release Notes - v0.20.0","description":"This release contains significant improvements and new bug fixes, particularly","date":"2023-08-31T00:00:00.000Z","formattedDate":"August 31, 2023","tags":[],"readingTime":0.745,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"nextItem":{"title":"Release Notes - v0.21.0","permalink":"/blog/2023/08/31/release-notes-0.21"}},"content":"This release contains significant improvements and new bug fixes, particularly\\nin the s3gw backing store. Notably, this release brings garbage collection,\\nimproved bucket listing, including filtering, and conditional GETs.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related with known issues, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Query-based version listing\\n- rgw/sfs: Support conditional GETs\\n- rgw/sfs: New garbage collection implementation\\n- rgw/sfs: Change on-disk file format, add suffixes\\n- ui backend: Parity with operations required by UI\\n\\n## Fixes\\n\\n- rgw/sfs: Fix warnings after enabling more compilation flags\\n- rgw/sfs: Several code cleanup efforts\\n- rgw/sfs: use global part id for multipart parts\\n\\n## Breaking Changes\\n\\n- On-disk format for both metadata and data store have changed.\\n\\n## Known Issues"},{"id":"/2023/08/31/release-notes-0.21","metadata":{"permalink":"/blog/2023/08/31/release-notes-0.21","source":"@site/blog/2023-08-31-release-notes-0.21.md","title":"Release Notes - v0.21.0","description":"This release contains significant improvements and new bug fixes. Notably,","date":"2023-08-31T00:00:00.000Z","formattedDate":"August 31, 2023","tags":[],"readingTime":0.74,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"prevItem":{"title":"Release Notes - v0.20.0","permalink":"/blog/2023/08/31/release-notes-0.20"},"nextItem":{"title":"Release Notes - v0.22.0","permalink":"/blog/2023/08/31/release-notes-0.22"}},"content":"This release contains significant improvements and new bug fixes. Notably,\\nthis release brings server-side encryption support, conditional copy object,\\nimprovement in profiling.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related with known issues, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Add server-side encryption support\\n- rgw/sfs: Conditional copy object\\n- ui : Make use of the UI REST API to prevent CORS issues\\n\\n## Fixes\\n\\n- rgw/sfs: Improve sqlite connection handling\\n- rgw/sfs: Fix missing multipart etag\\n- rgw/sfs: Fix etag and mtime not being sent with copy object response\\n- rgw/sfs: Increase build error reporting\\n- rgw/sfs: Improve profiling (sqlite, garbage collection)\\n- ui: Prevent switching bucket retention mode from Compliance to Governance\\n\\n## Breaking Changes\\n\\n## Known Issues"},{"id":"/2023/08/31/release-notes-0.22","metadata":{"permalink":"/blog/2023/08/31/release-notes-0.22","source":"@site/blog/2023-08-31-release-notes-0.22.md","title":"Release Notes - v0.22.0","description":"This release contains significant improvements and new bug fixes. Notably,","date":"2023-08-31T00:00:00.000Z","formattedDate":"August 31, 2023","tags":[],"readingTime":0.78,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"prevItem":{"title":"Release Notes - v0.21.0","permalink":"/blog/2023/08/31/release-notes-0.21"},"nextItem":{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"}},"content":"This release contains significant improvements and new bug fixes. Notably,\\nthis release brings improved multipart and sqlite stability.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related with known issues, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Improved SQLite WAL usage\\n- rgw/sfs: Improved disk usage when copying objects\\n- rgw/sfs: Improved testing\\n- ui: Various improvements\\n\\n## Fixes\\n\\n- rgw/sfs: Allow multiple delete markers\\n- rgw/sfs: Fix various multipart transactions\\n- rgw/sfs: Check number of file descriptors on start\\n- rgw/sfs: Updated bucket stats\\n- ui: unable to access UI due to admin ops verifying cert\\n- ui: The Show/Hide button must have at least one default value\\n- ui: Dropdown buttons are not rendered correct\\n- ui: Disable caching of index.html\\n\\n## Breaking Changes\\n\\n## Known Issues"},{"id":"/2023/08/03/release-notes-0.19","metadata":{"permalink":"/blog/2023/08/03/release-notes-0.19","source":"@site/blog/2023-08-03-release-notes-0.19.md","title":"Release Notes - v0.19.0","description":"This release contains various fixes and improvements in the backend. Most","date":"2023-08-03T00:00:00.000Z","formattedDate":"August 3, 2023","tags":[],"readingTime":0.965,"hasTruncateMarker":false,"authors":[],"frontMatter":{},"prevItem":{"title":"Release Notes - v0.22.0","permalink":"/blog/2023/08/31/release-notes-0.22"},"nextItem":{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"}},"content":"This release contains various fixes and improvements in the backend. Most\\nnotably, error handling, multipart handling and internal bookkeeping of objects\\nhas improved.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- rgw/sfs: Log SQLite error / warning messages\\n- rgw/sfs: Add SQLite retries and error handling\\n- rgw/sfs: Improve multipart handling\\n- ui backend: Add endpoints for user management\\n- ui backend: Add bucket management endpoints\\n- ui frontend: Allow creating admin users\\n\\n## Fixes\\n\\n- rgw/sfs: Fix Invalid argument exception on exit with telemetry off\\n- rgw/sfs: Fix delete bucket when not empty\\n- rgw/sfs: Abort on-going multiparts on bucket removal\\n- rgw/sfs: Fix bucket listing\\n- rgw/sfs: Various fixes to object state transitions\\n- ui frontend: Fix table header on zoom-in\\n- ui frontend: Fix bucket deletion dialogue in `Administrator` mode\\n- ui frontend: Fix creating keys for users\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.18","metadata":{"permalink":"/blog/release-notes-v0.18","source":"@site/blog/2023-07-06-release-notes-0.18.md","title":"Release Notes - v0.18.0","description":"Release notes for v.0.18.0","date":"2023-07-06T00:00:00.000Z","formattedDate":"July 6, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.005,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.18.0","description":"Release notes for v.0.18.0","slug":"release-notes-v0.18","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.19.0","permalink":"/blog/2023/08/03/release-notes-0.19"},"nextItem":{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"}},"content":"This release contains numerous fixes for the UI and a refactoring of the object\\nversioning implementation.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Add a hint to the prefix field in the lifecycle rule dialog (#600)\\n- UI: Enhance branding support (#572)\\n- SFS: Implement new versioning design (#378, #472, #547, #526, #524, #519)\\n\\n## Fixes\\n\\n- UI: Deleting a versioned object is not properly implemented (#550)\\n- UI: Do not delete object by version (#576)\\n- UI: Prevent the restoring of the deleted object version (#583)\\n- UI: Creating an enabled lifecycle rule is not working (#587)\\n- UI: Disable download button for deleted objects (#595)\\n- UI: Do not close data table column menu on inside clicks (#599)\\n- Chart: Update logo and source URLs (#570)\\n- Chart: Validate email for tls issuer (#596)\\n- Chart: Fix installation failure when publicDomain is empty (#602)\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.17","metadata":{"permalink":"/blog/release-notes-v0.17","source":"@site/blog/2023-06-19-release-notes-0.17.md","title":"Release Notes - v0.17.0","description":"Release notes for v.0.17.0","date":"2023-06-19T00:00:00.000Z","formattedDate":"June 19, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.02,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.17.0","description":"Release notes for v.0.17.0","slug":"release-notes-v0.17","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.18.0","permalink":"/blog/release-notes-v0.18"},"nextItem":{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"}},"content":"This release contains a number of changes to the internal data structures and\\nmetadata schema in preparation for a more streamlined versioning and multipart\\nimplementation. In addition to that, the UI received a number of bug fixes,\\nquality of life improvements and a stylistic overhaul, including the logo and\\ncolorscheme. The UI also received a large number of end-to-end tests as well as\\nan update to the Angular version.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Branding Support (#552)\\n- UI: Upgrade to Angular 15 (#513)\\n- UI: Adapt logo and style (#530)\\n- UI: Various improvements\\n\\n## Fixes\\n\\n- UI: Fix incorrect pagination when using search/filters (#559)\\n- UI: Fix search function only searching a single page (#556)\\n- UI: Fix redundant \'clear\' buttons for search (#554)\\n- UI: Fix objects with delete markers being displayed (#548)\\n- Chart: Fix \\"unsupported protocol\\" bug for the COSI driver (#511)\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues"},{"id":"release-notes-v0.16","metadata":{"permalink":"/blog/release-notes-v0.16","source":"@site/blog/2023-05-11-release-notes-0.16.md","title":"Release Notes - v0.16.0","description":"Release notes for v.0.16.0","date":"2023-05-11T00:00:00.000Z","formattedDate":"May 11, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.955,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.16.0","description":"Release notes for v.0.16.0","slug":"release-notes-v0.16","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.17.0","permalink":"/blog/release-notes-v0.17"},"nextItem":{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"}},"content":"This release cycle focused on architecture adjustments to the s3gw service\'s\\nbackend store (SFS), which will be reflected on upcoming releases.\\n\\n\x3c!--truncate--\x3e\\n\\nMost noteworthy outcome of this release is the initial COSI support for s3gw.\\nThis can be enabled via the Helm Chart.\\n\\n\\nWe have also disabled user and bucket quotas via the UI. Quotas are currently\\nnot supported by the s3gw service, and have been kept in the UI to demonstrate\\nwhat we believe to be the right approach to them. As the backend development\\nprogresses, quotas will be re-enabled when the right time comes.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- Kubernetes: Add experimental COSI support.\\n- UI: Add new experimental python backend for the UI.\\n- UI: Disable bucket and user quotas in the UI.\\n\\n## Fixes\\n\\n- None\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- SFS: Non-versioned GETs may observe dirty data of concurrent non-multipart\\n PUTs."},{"id":"release-notes-v0.15","metadata":{"permalink":"/blog/release-notes-v0.15","source":"@site/blog/2023-04-28-release-notes-0.15.md","title":"Release Notes - v0.15.0","description":"Release notes for v.0.15.0","date":"2023-04-28T00:00:00.000Z","formattedDate":"April 28, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.04,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.15.0","description":"Release notes for v.0.15.0","slug":"release-notes-v0.15","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.16.0","permalink":"/blog/release-notes-v0.16"},"nextItem":{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"}},"content":"This release focuses on stabilizing our continuous integration and release process.\\nIn this context, we have also addressed a number of issues that was affecting our\\ntesting framework when automatically triggered by CI.\\n\\n\x3c!--truncate--\x3e\\n\\nAlthough this activity may not result in any direct user-facing improvements,\\nit plays a crucial role in maintaining a stable environment for the upcoming major\\nenhancements that the s3gw team is currently developing.\\n\\nWe continue to address the regular issues that affect all of s3gw\'s components.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Improve error handling and robustness of non-multipart PUT operations.\\n- SFS: Telemetry: the backend now periodically exchanges data with our upgrade responder.\\n- UI: Add tags support for objects.\\n\\n## Fixes\\n\\n- CI: Various fixes focused on the stabilization and the consistency of the process.\\n- Tests: Various fixes related with the integration with both the CI and the\\n release process.\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- SFS: Non-versioned GETs may observe dirty data of concurrent non-multipart PUTs."},{"id":"release-notes-v0.14","metadata":{"permalink":"/blog/release-notes-v0.14","source":"@site/blog/2023-03-28-release-notes-0.14.md","title":"Release Notes - v0.14.0","description":"Release notes for v.0.14.0","date":"2023-03-28T00:00:00.000Z","formattedDate":"March 28, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.86,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.14.0","description":"Release notes for v.0.14.0","slug":"release-notes-v0.14","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.15.0","permalink":"/blog/release-notes-v0.15"},"nextItem":{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"}},"content":"This release adds lifecycle management, object locks (legal holds) and an\\nupdated version of the radosgw we use for the backend.\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\n\x3c!--truncate--\x3e\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Initial lifecycle management support\\n- SFS: Object Lock - Legal holds\\n- SFS: Metadata database: Add indices to often queried columns\\n- SFS: Simplify write state machine. Remove _writing_ object state.\\n Writes no longer need to update the object state during IO.\\n- SFS: Update radosgw to Ceph Upstream 0e2e7d594b8\\n- UI: Display object data more intuitively\\n- UI: Enhance user key management page\\n- UI: Add button to copy the current path of the object browser to the clipboard\\n- UI: Lifecycle management\\n\\n## Fixes\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues"},{"id":"release-notes-v0.13","metadata":{"permalink":"/blog/release-notes-v0.13","source":"@site/blog/2023-03-09-release-notes-0.13.md","title":"Release Notes - v0.13.0","description":"Release notes for v.0.13.0","date":"2023-03-09T00:00:00.000Z","formattedDate":"March 9, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":0.935,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.13.0","description":"Release notes for v.0.13.0","slug":"release-notes-v0.13","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.14.0","permalink":"/blog/release-notes-v0.14"},"nextItem":{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"}},"content":"This release contains a few new features in the backend an in the UI, including\\nobject locking.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- SFS: Add object locking retention modes.\\n Add the ability to set the default bucket retention configuration for both\\n GOVERNANCE/COMPLIANCE modes\\n Add the ability to set an explicit retention mode on object\'s versions\\n- UI: Add support for object locking\\n- UI: Improve the object browser navigation bar\\n\\n## Fixes\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.13.0 --\x3e\\n\\n## What\'s Changed\\n* Release v0.12.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/347\\n* ci: on-disk format checker and release tests by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/348\\n* ci: fix s3test runner script by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/353\\n* ci: s3tests runner log from container by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/356\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.12.0...v0.13.0"},{"id":"epinio-meets-s3gw","metadata":{"permalink":"/blog/epinio-meets-s3gw","source":"@site/blog/2023-03-01-epinio-meets-s3gw.md","title":"Epinio meets s3gw","description":"This blog post explains how to set up the s3gw object service with the Epinio project","date":"2023-03-01T00:00:00.000Z","formattedDate":"March 1, 2023","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"epinio","permalink":"/blog/tags/epinio"}],"readingTime":2.47,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Epinio meets s3gw","description":"This blog post explains how to set up the s3gw object service with the Epinio project","slug":"epinio-meets-s3gw","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","epinio"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.13.0","permalink":"/blog/release-notes-v0.13"},"nextItem":{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"}},"content":"Since the very first version,\xa0[Epinio](https://epinio.io/)\xa0has made use of an internal S3 endpoint to store the user\'s projects in the form of aggregated tarballs.\\n\\n\x3c!--truncate--\x3e\\n\\nThose objects are then downloaded and staged by the internal engine\'s pipeline and, finally, they are deployed into the Kubernetes cluster as consumable applications.\xa0\\n\\nEpinio makes use of S3 as an internal private service. In this scenario, S3 can be thought of as an internal ephemeral cache with the purpose of storing temporary objects. For these needs, advanced redundancy measures are not necessary.\xa0Should the S3 backend experience a failure of any kind, software, or hardware; there would be no data loss, since Epinio has the ability to reconstruct the data of a project at any time.\xa0\\n\\nPrior to 1.7.0, Epinio could use only\xa0[Minio](https://min.io/)\xa0as S3 service. Starting from that version, we have since enabled the chart to also use the S3 Gateway (s3gw) project.\xa0\\n\\n[s3gw](https://s3gw.io/)\xa0is a lightweight s3-compatible service that can be backed by any PVC within a Kubernetes environment, with a preference for\xa0[Longhorn](https://longhorn.io/)\xa0as the backing service. As said before, since we do not need an advanced redundancy strategy with Epinio, we can safely rely on a PVC provided by the default storage class deployed on the cluster.\xa0\\n\\nIf you are installing Epinio through the Rancher UI, enable the\xa0*Customize Helm options before install*\xa0checkbox:\xa0\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2023/02/epinio_s3gw_1-1024x732.png)\\n\\nIn the next page, click on the\xa0*S3 storage*\xa0section and disable the\xa0*Install Minio\xa0*checkbox*.*\\\\\\nYou can now enable the\xa0*Install s3gw*\xa0checkbox.\xa0\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2023/02/epinio_s3gw_2-1024x732.png)\\n\\nThis is the simplest way to make Epinio work with s3gw.\xa0\\n\\nFor a more advanced customization, you can edit the Epinio chart\'s values.yaml file:\\n\\n```bash\\ns3gw:\xa0\\n\\n\xa0 enabled: false\xa0\\n\\n\xa0 ingress:\xa0\\n\\n\xa0\xa0\xa0 enabled: false\xa0\\n\\n\xa0 serviceName: s3gw\xa0\\n\\n\xa0 storageClass:\xa0\\n\\n\xa0\xa0\xa0 create: false\xa0\\n\\n\xa0\xa0\xa0 name: \'\'\xa0\\n\\n\xa0 storageSize: 2Gi\xa0\\n\\n\xa0 ui:\xa0\\n\\n\xa0\xa0\xa0 enabled: false\xa0\\n\\n\xa0 useExistingSecret: true\xa0\\n```\\n\\nIf you want, you can, for example, change the\xa0s3gw.storageClass.name\xa0used by s3gw to create its PVC to persist the data.\xa0Leaving this field empty makes the s3gw use the default storage class in the cluster.\xa0Furthermore, you can set the\xa0s3gw.storageSize\xa0value to the appropriate size based on your need.\xa0\\n\\nEmbedding s3gw inside Epinio has been beneficial for both projects because it significantly evolved the respective ability to integrate with other technologies.\\n\\nThanks to this, s3gw has made huge progress in areas such as TLS management and chart consistency.\\n\\ns3gw was born in 2022 and that year we defined the project\'s foundations. As for 2023, the team has ambitious plans that will bring the project to a brand-new level. We are already confident the tool is good enough to start integrating with vibrant projects like Epinio and are planning to make s3gw even simpler to integrate in the future.\xa0\\n\\nStay tuned!\\n\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.12","metadata":{"permalink":"/blog/release-notes-v0.12","source":"@site/blog/2023-02-16-release-notes-0.12.md","title":"Release Notes - v0.12.0","description":"Release notes for v.0.12.0","date":"2023-02-16T00:00:00.000Z","formattedDate":"February 16, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.62,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.12.0","description":"Release notes for v.0.12.0","slug":"release-notes-v0.12","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Epinio meets s3gw","permalink":"/blog/epinio-meets-s3gw"},"nextItem":{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"}},"content":"This release contains a bunch of stability fixes in the backend, but also some\\nnew features in the UI. Most notably, the UI can now display prefixes as\\ndirectories, bringing back some familiarity to its feel.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI: Add support for folder-like view of prefixes in the object explorer\\n- SFS: Performance improvements by utilizing SQLite\'s facilities in favor of\\n custom mutexes\\n- SFS: Use SQLite in WAL mode\\n- SFS: Wrap OP execution in exception handler to avoid crashing on\\n non-implemented stubs\\n\\n## Fixes\\n\\n- SFS: Improve robustness of SAL-layer errors, which now create the appropriate\\n HTTP error codes\\n- SFS: Gracefully handle out-of-space situations\\n- Build: Fix missing `.note.ABI-tag` ELF section causing exec format errors on\\n some platforms\\n\\n## Breaking Changes\\n\\n- On-disk format for the metadata store changed\\n\\n## Known Issues\\n\\nNo known issues\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.12.0 --\x3e\\n\\n## What\'s Changed\\n* ci: migrate github output by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/307\\n* Change `ghcr.io/aquarist-labs` to `quay.io/s3gw`. by @votdev in https://github.com/aquarist-labs/s3gw/pull/310\\n* Update documentation for default-user S3 credentials by @giubacc in https://github.com/aquarist-labs/s3gw/pull/309\\n* ci: add nightly build by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/308\\n* ci: fix nightly build syntax by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/315\\n* ci: nightly - remove references to set-git-refs by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/316\\n* ci: nightly builds log into quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/317\\n* ci: use correct quay.io repo by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/318\\n* ci: nightly pipeline build-env outputs the tag by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/319\\n* docs: add release notes for v0.2.0 and v0.4.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/320\\n* ci: release pipeline, drop libradosgw by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/323\\n* s3gw: release notes for v0.11.0 by @jecluis in https://github.com/aquarist-labs/s3gw/pull/328\\n* docs: remove Release from Release Captain\'s ADR, and create a new document by @jecluis in https://github.com/aquarist-labs/s3gw/pull/321\\n* remove tools submodule by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/330\\n* Wip/tools merge by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/331\\n* docs: Update quickstart guide by @s0nea in https://github.com/aquarist-labs/s3gw/pull/329\\n* Add last ADRs to menu in docs by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/332\\n* fix: remove faulty submodule by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/333\\n* fix build_radosgw CCACHE environment variable by @irq0 in https://github.com/aquarist-labs/s3gw/pull/334\\n* ci: remove libradosgw from nightly builds by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/335\\n* ci: build-environment triggers and fixes by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/336\\n* ci: fix build-environment trigger by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/337\\n* ci: fix build environment container tags by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/338\\n* Fix (relative) path to s3gw-ui Git repository. by @votdev in https://github.com/aquarist-labs/s3gw/pull/342\\n* fix Dockerfile.build-radosgw-test-container by @giubacc in https://github.com/aquarist-labs/s3gw/pull/343\\n* ci: fix stupid input to GH action by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/339\\n* ci: build environment using buildx by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/344\\n* ci: fix naming of dockerfiles and workflow matrix by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/345\\n* ci: rebuild build environments weekly by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/346\\n* ci: fix s3-test runner script by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/340\\n\\n## New Contributors\\n* @s0nea made their first contribution in https://github.com/aquarist-labs/s3gw/pull/329\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.10.0...v0.12.0"},{"id":"release-notes-v0.11","metadata":{"permalink":"/blog/release-notes-v0.11","source":"@site/blog/2023-01-27-release-notes-0.11.md","title":"Release Notes - v0.11.0","description":"Release notes for v.0.11.0","date":"2023-01-27T00:00:00.000Z","formattedDate":"January 27, 2023","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.145,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.11.0","description":"Release notes for v.0.11.0","slug":"release-notes-v0.11","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.12.0","permalink":"/blog/release-notes-v0.12"},"nextItem":{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"}},"content":"This release contains several notable features on the User Interface and on\\nthe Helm Chart, in addition to prefix support when listing objects and an\\nupdated version of the radosgw we use for the backend.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. Is is not\\nrecommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI:\\n - Add tags support for buckets (gh#aquarist-labs/s3gw#285).\\n - Add notification sidebar (gh#aquarist-labs/s3gw#172).\\n - Add option to remove buckets objects before deleting a bucket in the\\n administrator view.\\n\\n- Charts:\\n - Configuration options: `useExistingSecret` and\\n `defaultUserCredentialsSecret`.\\n\\n These fields allow the user to specify an existing secret containing\\n the S3 credentials for the default user.\\n - `useExistingSecret` is a boolean field defaulted to false.\\n - `defaultUserCredentialsSecret` is a string field denoting a `secret` in\\n the `s3gw` namespace. It must contain 2 keys:\\n - `RGW_DEFAULT_USER_ACCESS_KEY` that is the S3 Access Key for the default\\n user.\\n - `RGW_DEFAULT_USER_SECRET_KEY` that is the S3 Secret Key for the default\\n user.\\n - When `useExistingSecret` is set to `false`, the chart will create\\n the secret using values from the preexisting fields `accessKey` and\\n `secretKey`.\\n - Setting `accessKey` or `secretKey` as the empty string, will force the\\n Chart to compute random alphanumeric values for the fields.\\n - Defaulted values:\\n - `useExistingSecret`: false\\n - `defaultUserCredentialsSecret`: s3gw-creds\\n\\n- SFS/Backend:\\n - Added prefix support when listing objects and object versions.\\n\\n## Fixes\\n\\nNone that are particularly noteworthy.\\n\\n## Breaking Changes\\n\\nNone that we are aware of.\\n\\n## Known Issues\\n\\n- UI:\\n - It is not possible to remove all tags (gh#aquarist-labs/s3gw#314).\\n - It is not possible to change the bucket owner (gh#aquarist-labs/s3gw#86).\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.11.0 --\x3e\\n\\n## What\'s Changed\\n* ci: migrate github output by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/307\\n* Change `ghcr.io/aquarist-labs` to `quay.io/s3gw`. by @votdev in https://github.com/aquarist-labs/s3gw/pull/310\\n* Update documentation for default-user S3 credentials by @giubacc in https://github.com/aquarist-labs/s3gw/pull/309\\n* ci: add nightly build by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/308\\n* ci: fix nightly build syntax by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/315\\n* ci: nightly - remove references to set-git-refs by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/316\\n* ci: nightly builds log into quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/317\\n* ci: use correct quay.io repo by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/318\\n* ci: nightly pipeline build-env outputs the tag by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/319\\n* docs: add release notes for v0.2.0 and v0.4.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/320\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.10.0...v0.11.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n\\n* [s3gw](https://quay.io/repository/s3gw/s3gw)\\n* [s3gw-ui](https://quay.io/repository/s3gw/s3gw-ui)"},{"id":"deploy-s3gw-digital-ocean","metadata":{"permalink":"/blog/deploy-s3gw-digital-ocean","source":"@site/blog/2023-01-25-deploy-s3gw-digital-ocean.md","title":"Deploy s3gw in Digital Ocean","description":"In this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume).","date":"2023-01-25T00:00:00.000Z","formattedDate":"January 25, 2023","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"Digital Ocean","permalink":"/blog/tags/digital-ocean"}],"readingTime":3.515,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Deploy s3gw in Digital Ocean","description":"In this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume).","slug":"deploy-s3gw-digital-ocean","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","Digital Ocean"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.11.0","permalink":"/blog/release-notes-v0.11"},"nextItem":{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"}},"content":"## Introduction\\n\\nIn this tutorial, we will walk through the setup of a single-node K3s Kubernetes cluster with Rancher, together with the S3 Gateway (s3gw) and a Longhorn PV (Persistent Volume). This guide will use Digital Ocean, but these instructions will likely work with other cloud providers as well.\xa0\\n\\n\x3c!--truncate--\x3e\\n\\n## Background\\n\\nBefore you begin, if you have not heard yet of the\xa0[s3gw](https://s3gw.io/)\xa0project, read this article first. The s3gw is a lightweight S3 service for Kubernetes users running on top of a Longhorn PV (and it comes with a nice user interface).\\n\\nFor the purpose of this article, there is assumed knowledge of\xa0[K3s](http://k3s.io/),\xa0[Rancher](https://www.rancher.com/)\xa0and\xa0[Longhorn](http://longhorn.io/).\xa0 However, if you need more information, you will find plenty of useful information in this blog.\\n\\n## Prerequisites\\n\\nYou will need to have created a Droplet in Digital Ocean. For this specific tutorial, you will need the following:\xa0\\n\\n- OS: Ubuntu 20.04 (LTS) x64\xa0\\n- CPU Options: Regular Intel with SSD + 8 GB / 4 CPUs\xa0\xa0\\n- Add block storage: Leave as it is\xa0\\n- Datacenter region: Choose the datacenter region closer to you\xa0\\n- VPC Network: Leave as it is\xa0\\n- Authentication: via SSH, click the \\"new SSH Key\\", follow the instructions given (identify your ssh key properly) and after it is added, select it with the appropriate checkbox.\xa0\\n- Additional Options: Leave as it is\xa0\\n- Finalize and create: identify your droplet with a hostname (ex: `-local-rancher`).\\n- Hit Create Droplet\xa0\\n\\nAnd there you go! You have a system ready to hack on!\\n\\n## Prepare your system\xa0\\n\\nNow we need to set up your droplet. Install Helm:\\n\\n```bash\\n$ ssh root@IP-ADDRESS\\n$ apt-get install open-iscsi\\n$ snap install --classic helm\\n```\\n\\n1\\\\. Install K3s\xa0\\n\\nNow, set up K3s:\xa0\\n\\n```bash\\n$ curl -sfL [https://get.k3s.io](https://get.k3s.io/) | INSTALL_K3S_VERSION=\\"v1.24.7+k3s1\\" sh -s - server --cluster-init\xa0\\n$ export KUBECONFIG=/etc/rancher/k3s/k3s.yaml\xa0\xa0\\n```\\n\\n2\\\\. Define a Kubernetes namespace\xa0\\n\\nNow, we need to define a Kubernetes namespace where the resources created by the chart should be installed:\xa0\\n\\n```bash\\n$ kubectl create namespace cattle-system\xa0\\n```\\n\\n3\\\\. Set up certificate management\xa0\\n\\nNext, set up cert-manager:\xa0\\n\\n```bash\\n$ kubectl apply -f \xa0\\n\\n$ helm repo add jetstack [https://charts.jetstack.io](https://charts.jetstack.io/)\\n$ helm repo update\\n$ helm install cert-manager jetstack/cert-manager\\\\\\n\xa0 --namespace cert-manager\\\\\\n\xa0 --create-namespace\\\\\\n\xa0 --version v1.7.1\xa0\\n```\\n\\n4\\\\. Install Rancher server\xa0\\n\\nOnce you are done installing K3s, install Rancher through the helm chart:\xa0\\n\\n```bash\\n$ helm repo add rancher-latest \xa0\\n\\n$ helm install rancher rancher-latest/rancher\\\\\\n\xa0 --namespace cattle-system\\\\\\n\xa0 --set hostname= IP-ADDRESS[.sslip.io](http://164.92.168.210.sslip.io/)\\\\\\n\xa0 --set replicas=1\\\\\\n\xa0 --set bootstrapPassword=PASSWORD\xa0\\n```\\n\\nWe are using sslip.io as the DNS service. The installation will take some time. Then you will be ready to access Rancher:\xa0\\n\\n![Rancher login page](https://www.suse.com/c/wp-content/uploads/2023/01/article-rancher-1-1024x740.png)\\n\\n5\\\\. Retrieve the password\xa0\\n\\nRetrieve your password by running the following command:\xa0\\n\\n```bash\\n$ kubectl get secret --namespace cattle-system bootstrap-secret -o go-template=\'{{ .data.bootstrapPassword|base64decode}}{{ \\"\\\\n\\" }}\'\\n```\\n\\n## Install s3gw using the Rancher UI\\n\\nThe s3gw can be found in the Rancher UI as a partner chart:\xa0\\n\\nTo access, go to \\"Apps\\" and then \\"Charts\\". Choose the partner charts drop-down and click on the s3gw partner chart:\xa0\\n\\n![Rancher partner charts](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-partner-chart-1-1024x740.png)\\n\\nClick\xa0 \\"Install\\" and tick the \\"Customize Helm options before install\\":\xa0\\n\\n![s3gw-install](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-install-1024x740.png)\\n\\nHere are the remaining three steps:\xa0\\n\\n1. Set App Metadata: Select the project to install s3gw into.\xa0\\n2. Values: Here, you can set up access and secret keys, storage, etc. The chart sets up a Longhorn volume by default.\xa0 Update are the hostnames for the S3 service and the UI:\xa0\\n\\n![s3gw installation values](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-install-values-1024x779.png)\\n\\n3\\\\. Finally, there are other options you can also set up additional deployment options:\\n\\n![Helm options](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-helm-opts-1024x653.png)\\n\\nAnd that\'s it! You can now access the s3gw UI in https://s3gw-ui.your.ip.here.sslip.io) :\\n\\n![s3gw login](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-login-1024x747.png)\\n\\n\u26a0\ufe0f\xa0\\"Network failure\\" issue.\\n\\nWhen you try to log into the UI for the first time, you will find a \\"Network Failure\\" error. This is a\xa0[known issue](https://github.com/aquarist-labs/s3gw/issues/275).\xa0\\n\\nTo work around this issue, access the S3 service URL first ([https://s3gw.your.ip.here.sslip.io](https://s3gw.your.ip.here.sslip.io/)). You will then be able to log into the UI:\\n\\n![s3gw-file-explorer](https://www.suse.com/c/wp-content/uploads/2023/01/s3gw-file-explorer-1024x747.png)\\n\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.10","metadata":{"permalink":"/blog/release-notes-v0.10","source":"@site/blog/2022-12-22-release-notes-0.10.md","title":"Release Notes - v0.10.0","description":"Release notes for v.0.10.0","date":"2022-12-22T00:00:00.000Z","formattedDate":"December 22, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.93,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.10.0","description":"Release notes for v.0.10.0","slug":"release-notes-v0.10","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Deploy s3gw in Digital Ocean","permalink":"/blog/deploy-s3gw-digital-ocean"},"nextItem":{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"}},"content":"This release contains several important changes to the UI and the charts as well\\nas the backend.\\nIn addition to that multiple issues in documentation and build tools were fixed.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[GitHub repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI:\\n - Display more information on objects\\n - Table columns have a show/hide button\\n - Add search field to data tables\\n - Add progress indicator for the loading process of the Angular app\\n- Charts:\\n - Support certificate manager for handling certificates on endpoints\\n - Support cluster internal access with TLS enabled\\n- SFS/Backend\\n - Add status page\\n - Add metrics page exposing s3gw internal data to monitoring (e.g. Prometheus)\\n\\n## Fixes\\n\\n- UI:\\n - A page reload now does not disable the admin switch\\n - Persist data tables pagination settings\\n\\n## Breaking Changes\\n\\nNo known breaking changes\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.10.0 --\x3e\\n\\n## What\'s Changed\\n* doc: unify commit signing requirements by @tserong in https://github.com/aquarist-labs/s3gw/pull/268\\n* docs: update docs of helm deployment by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/264\\n* ci: release workflow push to quay.io by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/280\\n* docs: update the S3 compatibility table by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/278\\n* docs: add updated roadmap by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/274\\n* docs: add the contributing guides to docs by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/279\\n* docs: update documentation for cert-manager and TLS by @giubacc in https://github.com/aquarist-labs/s3gw/pull/282\\n* docs: add project vision by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/276\\n* docs: ensure helm documentation suggests https url by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/288\\n* docs: fix markdown syntax for ADR 0004 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/287\\n* docs: rework readme by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/291\\n* Docs: add requirements to docs & small updates to index page by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/293\\n* docs: logo and fixup readme links by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/294\\n* Remove paths from requirements.txt by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/296\\n* release: v0.10.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/299\\n* release: fixup for release v0.10.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/300\\n\\n## New Contributors\\n* @tserong made their first contribution in https://github.com/aquarist-labs/s3gw/pull/268\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.9.1...v0.10.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n- [s3gw](https://quay.io/repository/s3gw/s3gw)\\n- [s3gw-ui](https://quay.io/repository/s3gw/s3gw-ui)"},{"id":"release-notes-v0.9","metadata":{"permalink":"/blog/release-notes-v0.9","source":"@site/blog/2022-12-01-release-notes-0.9.md","title":"Release Notes - v0.9.0","description":"Release notes for v.0.9.0","date":"2022-12-01T00:00:00.000Z","formattedDate":"December 1, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.335,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.9.0","description":"Release notes for v.0.9.0","slug":"release-notes-v0.9","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.10.0","permalink":"/blog/release-notes-v0.10"},"nextItem":{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"}},"content":"This release introduces some notable changes to Charts, together with UI improvements.\\nAs usual, we are improving the overall quality of the project by addressing issues to documentation, testing, UI and tools.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one should feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- Charts\\n - Add configuration options: `serviceName`, `publicDomain`, `privateDomain`\\n to configure the s3gw-service\'s public domain used by the Ingress\\n and the private domain used inside the Kubernetes cluster.\\n - Defaulted values:\\n - `serviceName` : s3gw\\n - `publicDomain` : be.127.0.0.1.omg.howdoi.website\\n - `privateDomain` : svc.cluster.local\\n - Add configuration options: `ui.serviceName`, `ui.publicDomain`\\n to configure the s3gw-ui-service\'s public domain used by\\n the Ingress.\\n - Defaulted values:\\n - `ui.serviceName` : s3gw-ui\\n - `ui.publicDomain` : fe.127.0.0.1.omg.howdoi.website\\n - Add configuration option: `logLevel` to set the s3gw-service\'s\\n log verbosity.\\n - Defaulted value: `1`\\n - (gh#aquarist-labs/s3gw#180)\\n\\n- UI\\n - Add multi-selection support to data tables (gh#aquarist-labs/s3gw#135).\\n\\n## Fixes\\n\\n- UI\\n - Creating a bucket with spaces crashed the app (gh#aquarist-labs/s3gw#225).\\n - Fix URL in the dashboard buckets widget (gh#aquarist-labs/s3gw#240).\\n\\n## What\'s Changed\\n\\n- UI\\n - Combine the regular and administrator UI (gh#aquarist-labs/s3gw#175).\\n\\n- Charts\\n - Remove configuration options: `hostname` and `ui.hostname`, both superseded\\n by the newly added variables. (gh#aquarist-labs/s3gw#180)\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway be stopped, ongoing multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters."},{"id":"introduction-to-s3gw","metadata":{"permalink":"/blog/introduction-to-s3gw","source":"@site/blog/2022-11-21-introduction-to-s3gw.md","title":"Introduction to s3gw","description":"Introductory blog post on the s3gw Project, a standalone S3 service based in the RADOS Gateway project.","date":"2022-11-21T00:00:00.000Z","formattedDate":"November 21, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"introduction","permalink":"/blog/tags/introduction"}],"readingTime":2.525,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Introduction to s3gw","description":"Introductory blog post on the s3gw Project, a standalone S3 service based in the RADOS Gateway project.","slug":"introduction-to-s3gw","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","introduction"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.9.0","permalink":"/blog/release-notes-v0.9"},"nextItem":{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"}},"content":"s3gw is an S3-compatible service focused on deployments in a Kubernetes environment backed by any PVC, including\xa0[Longhorn](https://longhorn.io/).\xa0Since its inception,\xa0the primary focus has been on cloud native deployments. However, the s3gw can be deployed in a myriad of scenarios, provided some form of storage is attached.\\n\\n\x3c!--truncate--\x3e\\n\\ns3gw is based on Ceph\'s RADOSGW (RGW) but runs as a stand--alone service without the RADOS cluster and relies on a storage backend still under heavy development by the storage team at SUSE. The s3gw team is also developing a web-based UI for management and an object explorer.\xa0\\n\\n## The s3gw service\\n\\nDistributed as a small container, the s3gw service runs RGW and exposes an S3-compatible API. Instead of requiring a full Ceph cluster deployment, we leverage RGW\'s standalone capabilities and keep data on a local storage volume. Although the focus is on running within a Kubernetes environment with on-premise storage provided to the container, s3gw can consume any storage type with a filesystem on it. This can be PVC in Kubernetes or a local directory on a development machine.\xa0\\n\\nAs the container consumes the storage volume, the object data is kept in a hash tree of directories and the metadata is kept in an SQLite database. This allows us to leverage the ACID properties of SQLite to ensure the state is committed atomically while keeping large blobs of data on the filesystem and away from SQLite\'s path.\xa0\\n\\nIn the future,\xa0we will release a blog post describing the s3gw service\'s data store in more depth.\xa0\\n\\nHowever, it should be noted that we don\'t support all RGW\'s S3 APIs. Some components are still under development and other features not yet included that are required for proper operation.\xa0\\n\\nFor example, while deleting objects and buckets is currently supported, we don\'t support lifecycle management. Lifecycle policies and IAM are some of the things that we will be working on shortly.\xa0\\n\\n## The s3gw web UI\\n\\nAlso distributed as a small container, the s3gw web UI provides an intuitive way of interacting with the s3gw service. This includes user and bucket management, as well as an object explorer.\xa0\\n\\nWe have a few screenshots of the current UI version below, but please keep in mind that we are still actively developing it and it is not feature-complete.\\n\\n![s3gw login page screenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-login-1-1024x747.png)\\n![s3gw dashboard screenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-dashboard-1-1024x747.png)\\n![s3gw bucket creation](https://www.suse.com/c/wp-content/uploads/2022/11/Screenshot-2022-11-21-at-15.49.46-1024x751.png)\\n![s3gw bucket list dashboard screeenshot](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-list-buckets-1024x747.png)\\n![s3gw file explorer](https://www.suse.com/c/wp-content/uploads/2022/11/s3gw-file-explorer-1-1024x747.png)\\n\\n## \xa0Installing\\n\\nYou may find our Helm chart helpful if you have a Kubernetes cluster, whichever flavor that might be. You\'ll be able to find it on\xa0[ArtifactHub](https://artifacthub.io/packages/helm/s3gw/s3gw),\xa0and our\xa0[documentation](https://s3gw-docs.readthedocs.io/en/latest/helm-charts/)\xa0can provide important insights as to available configuration values.\xa0\\n\\nAlternatively, if you are using Rancher, you may find s3gw available in the Partner repository, as depicted below:\\n\\n![Partner repository](https://www.suse.com/c/wp-content/uploads/2022/11/Screenshot-2022-11-21-at-16.04.15-1024x372.png)\\n\\n## Call for action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"release-notes-v0.8","metadata":{"permalink":"/blog/release-notes-v0.8","source":"@site/blog/2022-11-11-release-notes-0.8.md","title":"Release Notes - v0.8.0","description":"Release notes for v.0.8.0","date":"2022-11-11T00:00:00.000Z","formattedDate":"November 11, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":2.1,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.8.0","description":"Release notes for v.0.8.0","slug":"release-notes-v0.8","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Introduction to s3gw","permalink":"/blog/introduction-to-s3gw"},"nextItem":{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"}},"content":"This release adds several bug fixes, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- S3GW\\n - Added a mechanism to check for incompatibility issues without changing the\\n original metadata database. When any incompatibility is found it is also shown\\n in the logs.\\n - Added GC thread deleting permanently removed buckets, its objects and\\n versions.\\n\\n- UI\\n - Add basic object management features (#146).\\n - Add feature to upload objects into buckets via browser (#167).\\n\\n## Fixes\\n\\n- S3GW\\n - Fixed segfault when SFSAtomicWriter::complete is called with mtime output\\n variable set to nullptr\\n\\n- UI\\n - Fix table pagination issue. Only the first page was visible.\\n\\n## What\'s Changed\\n\\n- S3GW\\n - In order to make stat_bucket call available, SFSBucket::update_container_stat\\n now returns 0.\\n\\n- UI\\n - Display an error message on the login page if the RGW endpoint is not\\n configured correctly.\\n\\n- Charts\\n - Expose `ETag` header in the Traefik s3gw ingress to allow multipart\\n uploads via browser (#170).\\n - Add the `OPTIONS` method to the Traefik CORS configuration (#188).\\n - Fix an issue in the GW ingress related to TLS + wildcard host.\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, ongoing multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at main --\x3e\\n\\n## What\'s Changed\\n* Update charts submodule after 0.7.0 release by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/169\\n* adr: Adds ADR for project labels by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/148\\n* adr: Add instruction for release captain by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/153\\n* docs: Update rancher instructions and change addresses by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/200\\n* Update the release captain howto to the latest workflow. by @votdev in https://github.com/aquarist-labs/s3gw/pull/201\\n* Release v0.8.0 by @votdev in https://github.com/aquarist-labs/s3gw/pull/205\\n* Update docs. by @votdev in https://github.com/aquarist-labs/s3gw/pull/206\\n* Release v0.8.0 by @votdev in https://github.com/aquarist-labs/s3gw/pull/207\\n* Adapt and add ADRs by @votdev in https://github.com/aquarist-labs/s3gw/pull/209\\n* Adapt .gitmodules to new branch names. by @votdev in https://github.com/aquarist-labs/s3gw/pull/210\\n* Adapt release process docs. Tags need to be created. by @votdev in https://github.com/aquarist-labs/s3gw/pull/211\\n\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.7.0...v0.8.0\\n\\n## Containers\\n\\nThe container images can be found at:\\n- [s3gw](https://github.com/aquarist-labs/s3gw/pkgs/container/s3gw)\\n- [s3gw-ui](https://github.com/aquarist-labs/s3gw/pkgs/container/s3gw-ui)"},{"id":"release-notes-v0.7","metadata":{"permalink":"/blog/release-notes-v0.7","source":"@site/blog/2022-10-20-release-notes-0.7.md","title":"Release Notes - v0.7.0","description":"Release notes for v.0.7.0","date":"2022-10-20T00:00:00.000Z","formattedDate":"October 20, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.6,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.7.0","description":"Release notes for v.0.7.0","slug":"release-notes-v0.7","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.8.0","permalink":"/blog/release-notes-v0.8"},"nextItem":{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"}},"content":"This release adds several bug fixes, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- UI\\n - Add basic bucket management features for non-admin users.\\n They can create/update/delete buckets.\\n\\n## Fixes\\n\\n- S3GW\\n - Fixed queries to users by access key when user has multiple keys.\\n - Fixed a circular lock dependency, which could lead to a deadlock when\\n aborting multiparts for an object while finishing a different object.\\n\\n- UI\\n - Login page does not show error messages.\\n\\n## What\'s Changed\\n\\n- UI:\\n - Continuing to adapt the UI according to the Rancher UI design kit.\\n - Error reporting has been improved.\\n\\n- Charts\\n - Properly label all components of the chart to give helm hints about what is part\\n of the chart.\\n - Redesing registry access variables to be usable with private registries\\n - Improve rancher questions to guide the installation in a more user friendly form\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, on-going multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n- Metadata stored in sqlite is no longer compatible with previous versions.\\n\\n\\n\x3c!-- Release notes generated using configuration in .github/release.yaml at v0.7.0 --\x3e\\n\\n## What\'s Changed\\n* docs: revise helm install procedure by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/140\\n* docs:Adds Contributing guides by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/152\\n* Release v0.7.0 by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/158\\n* Revert 0.7.0 release by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/163\\n* Release 0.7.0 by @0xavi0 in https://github.com/aquarist-labs/s3gw/pull/168\\n\\n## New Contributors\\n* @0xavi0 made their first contribution in https://github.com/aquarist-labs/s3gw/pull/158\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.6.1...v0.7.0"},{"id":"release-notes-v0.6","metadata":{"permalink":"/blog/release-notes-v0.6","source":"@site/blog/2022-09-29-release-notes-0.6.md","title":"Release Notes - v0.6.0","description":"Release notes for v.0.6.0","date":"2022-09-29T00:00:00.000Z","formattedDate":"September 29, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.33,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.6.0","description":"Release notes for v.0.6.0","slug":"release-notes-v0.6","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.7.0","permalink":"/blog/release-notes-v0.7"},"nextItem":{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"}},"content":"This release adds several new features, together with UI improvements. In\\naddition, the documentation, testing and other have been improved.\\n\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not recommended\\nfor production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our\\n[Github repository](https://github.com/aquarist-labs/s3gw/issues/new/choose).\\n\\n## Features\\n\\n- S3GW\\n - Delete/Undelete objects.\\n - Ability to list buckets via admin REST API.\\n - Support for bucket ACL.\\n - Multipart uploads\\n - Objects are stored in metadata using bucket id instead of bucket name.\\n - Longhorn custom settings for installation.\\n - Ability to build a s3gw-test image able to run google-tests.\\n- UI\\n - Adapt the UI according to the Rancher UI design kit.\\n- Charts\\n - Set up & added helm chart to [Artifacthub.io](https://artifacthub.io/packages/helm/s3gw/s3gw)\\n\\n## Fixes\\n\\n- S3GW\\n - Show delete markers when listing object versions.\\n\\n## What\'s Changed\\n\\n- UI:\\n - Adapt the UI according to the Rancher UI design kit.\\n- Charts\\n - Storage settings redesign to allow using an existing storage class while\\n keeping it easy to use Longhorn and local storage with minimal work required\\n - Give TLS certificates to UI ingress as well -Enable TLS endpoints for\\n Traefik ingress\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads are currently tracked solely in memory. Should the gateway\\n be stopped, on-going multipart uploads will be lost.\\n- Listing multipart uploads does not account for prefix or delimiters.\\n- Metadata stored in sqlite is no longer compatible with previous versions.\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.5.0...v0.6.0"},{"id":"release-notes-v0.5","metadata":{"permalink":"/blog/release-notes-v0.5","source":"@site/blog/2022-09-15-release-notes-0.5.md","title":"Release Notes - v0.5.0","description":"Release notes for v.0.5.0","date":"2022-09-15T00:00:00.000Z","formattedDate":"September 15, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.65,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.5.0","description":"Release notes for v.0.5.0","slug":"release-notes-v0.5","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.6.0","permalink":"/blog/release-notes-v0.6"},"nextItem":{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"}},"content":"This release add a few small fixes to the last release, especially in the UI.\\nIn addition to that, testing and other development processes have improved quite\\na bit.\\n\\n\x3c!--truncate--\x3e\\n\\nThis release is meant for testing and feedback gathering. It is not\\nrecommended for production use.\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github\\nrepository](https://github.com/aquarist-labs/s3gw).\\n\\n## Features\\n\\n- UI: Add Dashboard widget framework. aquarist-labs/s3gw#91\\n- UI: Add `Total users` and `Total buckets` Dashboard widgets.\\n- Chart: The variables `hostnameNoTLS`, `ui.hostname` and `ui.hostnameNoTLS`\\n has been added to configure the hostnames of the S3GW and S3GW-UI.\\n- Chart: Defaulted `ui.enabled` to `true`.\\n- S3GW: Added columns in the sqlite buckets table: zone_group & quota\\n\\n## Fixes\\n\\n- S3GW: Fixed the admin API request: get-bucket-info where the client was\\n receiving an empty response. aquarist-labs/s3gw#87\\n- UI: Mark the user/bucket quota settings in the user form as non-functional\\n because the feature is not properly supported by the S3GW.\\n aquarist-labs/s3gw#106\\n- Chart: Rename the `access_key` and `secret_key` variable names according\\n the Helm Chart best practices guide to `accessKey` and `secretKey`.\\n- Chart: Rename the `enableIngress` variable to `ingress.enabled`.\\n- Chart: Relocate the variables `imageRegistry_ui`, `imageName_ui`,\\n `imageTag_ui` and `imagePullPolicy_ui` to `ui.imageRegistry`,\\n `ui.imageName`, `ui.imageTag` and `ui.imagePullPolicy`\\n\\n## Breaking Changes\\n\\n- None\\n\\n## Known Issues\\n\\n- Multipart uploads don\'t work\\n\\n\\n## What\'s Changed\\n* docs: update k3s-setup section by @torchiaf in https://github.com/aquarist-labs/s3gw/pull/93\\n* ci: pass credentials to s3gw-tools workflow by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/101\\n* ci: use secret inherittance by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/102\\n* Adds templates for issues & PR by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/97\\n* Updates PR template by @jhmarina in https://github.com/aquarist-labs/s3gw/pull/104\\n* ci: release workflow by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/105\\n* ci: create github release by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/109\\n* release: v0.5.0 by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/111\\n* ci: release workflow: use github token by @m-ildefons in https://github.com/aquarist-labs/s3gw/pull/112\\n\\n## New Contributors\\n* @torchiaf made their first contribution in https://github.com/aquarist-labs/s3gw/pull/93\\n\\n**Full Changelog**: https://github.com/aquarist-labs/s3gw/compare/v0.4.0...v0.5.0"},{"id":"release-notes-v0.4","metadata":{"permalink":"/blog/release-notes-v0.4","source":"@site/blog/2022-09-01-release-notes-0.4.md","title":"Release Notes - v0.4.0","description":"Release notes for v.0.4.0","date":"2022-09-01T00:00:00.000Z","formattedDate":"September 1, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.815,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.4.0","description":"Release notes for v.0.4.0","slug":"release-notes-v0.4","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.5.0","permalink":"/blog/release-notes-v0.5"},"nextItem":{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"}},"content":"With v0.4.0 we introduce Object Versioning in the Gateway.\\nOther than this, we are improving the project in almost all aspects,\\nfrom the UI and Helm Charts to the Continuos Integration and Testing.\\nRead the subsequent sections for all the changes in detail.\\n\\n\\n\x3c!--truncate--\x3e\\n\\n**This release is meant for testing and feedback gathering. It is not\\nrecommended for production use.**\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github repository][1].\\n\\n## s3gw\\n\\nThe Gateway introduces Object Versioning.\\n### Added\\n\\n- New, easy-to-read documentation. Found here: https://s3gw-docs.readthedocs.io/en/latest/\\n- Object Versioning.\\n- Enable / Disable bucket versioning.\\n- When versioning is enabled and a new object is pushed it creates a new version,\\n keeping the previous one.\\n- Objects versions list\\n- Download specific version (older versions than the last one)\\n- Object delete (delete mark is added in a new version)\\n\\n### Fixed\\n\\n- An issue where the creation time of a bucket was displayed\\n as the current machine time.\\n- The json response for creation bucket rest call for `system`\\n users.\\n\\n## s3gw-ui\\n\\nThe UI has seen several major improvements and fixes.\\n\\n### Added\\n\\n- The ability to configure none/unlimited buckets per user.\\n- User/Bucket Quota configuration per user.\\n- Basic bucket management support.\\n- Project branding.\\n\\n## s3gw-charts\\n\\n### Added\\n\\n- Set `system` flag for default user\\n- Documentation to support PVC selection\\n\\n### Changed\\n\\n- Removed Traefik installation from CI pipeline\\n- Disabled version check for linter\\n- Configured UI and added information about CORS\\n\\n### Fixed\\n\\n- Some typos in documentation and code.\\n\\n## s3gw-tools\\n\\n### Added\\n\\n- Option: \'--no-s3gw\' to env/setup.sh to install K3s only.\\n- Option: \'--import-local-image\' and \'--import-local-ui-image\' options to\\n import local s3gw and s3gw-ui images into a running K3s.\\n- Enriched test suite with: `tests/s3gw-buckets-rest-api-test.py` to test bucket-related rest calls.\\n\\n### Changed\\n\\n- Relocated docs to [s3gw repository](https://github.com/aquarist-labs/s3gw/docs).\\n- Boost system packages updated to version 80_0 in gateway\'s Dockerfiles.\\n\\n## Deploying\\n\\nPlease refer to our [documentation][2] on how to start playing with the s3gw.\\nFor Helm chart fans, information can be found [here][3].\\n\\n[1]: https://github.com/aquarist-labs/s3gw\\n[2]: https://github.com/aquarist-labs/s3gw#quickstart\\n[3]: https://github.com/aquarist-labs/s3gw-charts#install"},{"id":"release-notes-v0.3","metadata":{"permalink":"/blog/release-notes-v0.3","source":"@site/blog/2022-08-05-release-notes-0.3.md","title":"Release Notes - v0.3.0","description":"Release notes for v.0.3.0","date":"2022-08-05T00:00:00.000Z","formattedDate":"August 5, 2022","tags":[{"label":"release-notes","permalink":"/blog/tags/release-notes"}],"readingTime":1.645,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Release Notes - v0.3.0","description":"Release notes for v.0.3.0","slug":"release-notes-v0.3","authors":[{"name":"The s3gw team"}],"tags":["release-notes"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.4.0","permalink":"/blog/release-notes-v0.4"},"nextItem":{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"}},"content":"With v0.3.0 a few things changed in the overall project:\\n\\n- the `s3gw-core` repository has been renamed `s3gw-tools`;\\n- the main repository is now [s3gw][1];\\n- the `s3gw` repository contains documentation and all other s3gw-related\\n projects as submodules.\\n\\nWe are also releasing containers for `s3gw` and `s3gw-ui` with this version.\\nRead below for more information.\\n\\n\x3c!--truncate--\x3e\\n\\n**This release is meant for testing and feedback gathering. It is not\\nrecommended for production use.**\\n\\nShould a bug be found and not expected to be related to the list below, one\\nshould feel encouraged to file an issue in our [github repository][1].\\n\\n## s3gw\\n\\n### What we support\\n\\nAt the moment we support creating buckets, doing basic operations on objects\\n(PUT/GET/DELETE), and listing bucket contents.\\n\\n### What we don\'t support\\n\\n- deleting buckets.\\n- multipart uploads.\\n- everything else not specified in the previous section.\\n\\n### What Changed\\n\\n**This version introduces a new on-disk format for s3gw. Previous deployments\\nwill not work and will need to be redeployed.**\\n\\n#### Added\\n\\n- rgw/sfs: new on-disk format, based on filesystem hash tree for data\\n and sqlite for metadata.\\n- rgw/sfs: maintain one single sqlite database connection.\\n- rgw/sfs: protect sqlite access with \'std::shared_lock\'; allows multiple\\n parallel reads, but only one write at a time.\\n- rgw/sfs: allow copying objects; the current implementation breaks S3\\n semantics by returning EEXIST if the destination object exists.\\n\\n#### Known Issues\\n\\n- object copy fails if the destination object exists; this will be addressed at\\n a later stage.\\n\\n#### Changed\\n\\n- rgw/sfs: no longer create directory hierarchy when initing the store; instead,\\n ensure the sfs path exists by creating its directory if missing.\\n\\n#### Removed\\n\\n- rgw/sfs: remove unused data and metadata functions, artifacts from our\\n previous file-based implementation.\\n\\n## s3gw-ui\\n\\nThe UI has seen several improvements and fixes.\\n\\n## Deploying\\n\\nPlease refer to our [documentation][2] on how to start playing with the s3gw.\\nFor Helm chart fans, information can be found [here][3].\\n\\n[1]: https://github.com/aquarist-labs/s3gw\\n[2]: https://github.com/aquarist-labs/s3gw#quickstart\\n[3]: https://github.com/aquarist-labs/s3gw-charts#install"},{"id":"does-your-pv-need-s3-access","metadata":{"permalink":"/blog/does-your-pv-need-s3-access","source":"@site/blog/2022-07-28-pv-s3-access.md","title":"Does your PV need S3 access? We\u2019ve got you covered","description":"In a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.","date":"2022-07-28T00:00:00.000Z","formattedDate":"July 28, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"},{"label":"s3gw","permalink":"/blog/tags/s-3-gw"},{"label":"Rancher","permalink":"/blog/tags/rancher"},{"label":"Longhorn","permalink":"/blog/tags/longhorn"}],"readingTime":7.58,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Does your PV need S3 access? We\u2019ve got you covered","description":"In a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.","slug":"does-your-pv-need-s3-access","authors":[{"name":"The s3gw team"}],"tags":["blog","s3gw","Rancher","Longhorn"],"hide_table_of_contents":false},"prevItem":{"title":"Release Notes - v0.3.0","permalink":"/blog/release-notes-v0.3"},"nextItem":{"title":"Contain your excitement, the s3gw is in town","permalink":"/blog/s3gw-rados-gateway-standalone"}},"content":"Increased demand for cloud storage solutions has become a crucial topic in recent years: companies are requiring data to be made more readily available for their cloud-native applications.\\n\\n\x3c!--truncate--\x3e\\n\\nIncreased demand for cloud storage solutions has become a crucial topic in recent years: companies are requiring data to be made more readily available for their cloud-native applications.\\n\\nIn a cloud-native environment, it is important to offer storage systems that can interact with clients using a standard protocol.\\n\\n## Simple Storage Service\\n\\n![S3 logo](https://www.suse.com/c/wp-content/uploads/2022/07/s3.png)\\n\\n[Simple Storage Service,](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)\xa0or S3, is a protocol designed by Amazon that\xa0launched in the United States market in 2006. S3 is a vast protocol that covers key concepts such as\xa0*buckets*,\xa0*objects*,\xa0*keys*,\xa0*versioning*,\xa0*ACLs*\xa0and\xa0*regions*.\\n\\nTo continue with this article, you need to know that the S3 API can be invoked with REST calls and that you can just store your objects inside holders called buckets. For more information, there are other resources available online.\\n\\n## \xa0K3s and Rancher\\n\\nThis article explores the use of\xa0[K3s](https://k3s.io/)\xa0and\xa0[Rancher](https://rancher.com/)\xa0as foundations for experiments with an S3 gateway.\\n\\n![K3S logo](https://www.suse.com/c/wp-content/uploads/2022/05/k3s-icon-color-1-300x245.png)\\n\\nK3s is a lightweight Kubernetes distribution that runs smoothly on Edge low resource devices. Rancher is a graphical user manager that simplifies the underlying complexity of a Kubernetes cluster.\\n\\n![Rancher logo](https://www.suse.com/c/wp-content/uploads/2022/05/rancher-logo-cow-black.png)\\n\\nWith Rancher, you can manage a cluster in a user-friendly fashion, regardless of the Kubernetes version being used.\\n\\n## Longhorn\\n\\n![Longhorn logo](https://www.suse.com/c/wp-content/uploads/2022/07/longhorn.png)\\n\\nA Kubernetes cluster and manager alone are not sufficient when dealing with cloud storage. You could use the primitive resources offered by a standard Kubernetes cluster such as the basic persistent volume types,\xa0but we recommend installing a component that takes care of providing your pods with some advanced storage resource.\\n\\nIt is desirable to have a system that can take care of your data securely and in a redundant fasion and expose volumes with the standard Kubernetes interfaces.\xa0[Longhorn](https://longhorn.io/)\xa0is the right system for this kind of need. Built from scratch to work natively with Kubernetes, Longhorn allows pods to obtain highly available persistent volumes. The portion of storage managed by Longhorn is replicated so that a\xa0hardware failure does not compromise user\'s data.\\n\\n## S3 Gateway\\n\\n![S3GW logo](https://www.suse.com/c/wp-content/uploads/2022/07/logo-s3gw-300x256.png)\\n\\nHaving Longhorn deployed on your cluster allows the\xa0persistent volumes to be consumed by internal applications deployed on Kubernetes. If you want to give access to the data to external clients, you need an S3 gateway.\\n\\nExternal clients can store and read data to and from the cluster using the S3 API. For this role, we are going to employ\xa0[s3gw.](https://aquarist-labs.io/s3gw/)\\n\\ns3gw is being developed on the foundations of\xa0[Ceph](https://ceph.com/en/)\xa0S3 gateway: radosgw. Even if s3gw is still in its infancy and still in an early stage of development, it can already be used to test and play with S3 functionalities.\\n\\n## Let\'s start cooking ingredients\\n\\nNow that you have identified all the pieces, you are ready to start building your environment.\\\\\\nFor this tutorial, we are installing K3s on an OpenSUSE Linux OS. For the sake of simplicity, because Kubernetes needs to have certain networking resources available, it can be worth completely disabling the system firewall.\\n\\nIf you prefer to keep your firewall on, have a look\xa0[here](https://rancher.com/docs/k3s/latest/en/installation/installation-requirements/#networking).\\n\\n### Stop Firewall\\n\\nFrom a shell prompt, run the following command:\\n\\n```bash\\nsudo systemctl stop firewalld.service\\n```\\n\\n### Install K3s\\n\\nFrom a shell prompt, run the following command:\\n\\n```bash\\n$ curl -sfL | INSTALL_K3S_VERSION=v1.23.9+k3s1 sh -\\n```\\n\\nAfter installation has terminated, you can check that the cluster is running with:\\n\\n```bash\\n$ sudo kubectl get nodes\\n```\\n\\nIf everything is ok, you should see something similar:\\n\\n```bash\\nNAME STATUS ROLES AGE VERSION\\nsuse Ready control-plane,master 56s v1.23.8+k3s1\\n```\\n\\nIf you prefer using K3s with your regular user and not as root, you can run:\\n\\n```bash\\n$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config && chown $USER ~/.kube/config && chmod 600 ~/.kube/config && export KUBECONFIG=~/.kube/config\\n```\\n\\nAfter this, you will be able to operate on K3s with your user.\\n\\n### Install Helm\\n\\n![Helm logo](https://www.suse.com/c/wp-content/uploads/2022/07/helm-260x300.png)\\n\\nWe are going to install Rancher using an\xa0[Helm](https://helm.sh/)\xa0chart, so you must first install Helm on the system:\\n\\n```bash\\n$ sudo zypper install helm\\n```\\n\\n### Deploy Rancher\\n\\nLet\'s begin to install Rancher adding the its latest repo to Helm:\\n\\n```bash\\n$\xa0helm repo add rancher-latest \\n```\\n\\nAfter this, you must define a new Kubernetes namespace where Rancher will install:\\n\\n```bash\\n$ kubectl create namespace cattle-system\\n```\\n\\nAs the official\xa0[documentation](https://rancher.com/docs/rancher/v2.6/en/installation/install-rancher-on-k8s/#install-the-rancher-helm-chart)\xa0dictates, this must be named\xa0*cattle-system.*\\n\\nBecause Rancher management server is designed to be secure by default and requires SSL/TLS configuration you must deploy some additional resource:\\n\\n```bash\\n$ kubectl apply -f \\n\\n$ helm repo add jetstack \\n\\n$ helm install cert-manager jetstack/cert-manager\\\\\\n --namespace cert-manager\\\\\\n --create-namespace\\\\\\n --version v1.7.1\\n```\\n\\nLet\'s check that the cert-manager has successfully deployed and the related pods are running:\\n\\n```bash\\n$ kubectl get pods --namespace cert-manager\\n```\\n\\n```bash\\nNAME READY STATUS RESTARTS AGE\\ncert-manager-5c6866597-zw7kh 1/1 Running 0 2m\\ncert-manager-cainjector-577f6d9fd7-tr77l 1/1 Running 0 2m\\ncert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m\\n```\\n\\nNow, you are required to define an hostname in /etc/hosts pointing to the ip address of one of the host\'s physical interfaces, for example:\\n\\n10.0.0.2 rancher.local\\n\\nAfter this, you can finally launch the Rancher installation command:\\n\\n```bash\\nhelm install rancher rancher-latest/rancher\\\\\\n --namespace cattle-system\\\\\\n --set hostname=rancher.local\\\\\\n --set bootstrapPassword=admin\\n```\\n\\nWhen Rancher\'s pods have booted up,\xa0 with your browser you can navigate to:\xa0 and complete the initial setup:\\n\\n![Screenshot 1](https://www.suse.com/c/wp-content/uploads/2022/07/rancher1-1024x943.png)\\n\\nOnce you have completed the step, and saved the password, you can start exploring your local cluster with the graphical manager:\\n\\n![Screenshot 2](https://www.suse.com/c/wp-content/uploads/2022/07/rancher.local_-1024x614.png)\\n\\nDepending on what you have deployed on the cluster, you could see more or less resource consumption.\\n\\n### Deploy Longhorn\\n\\nYou can now deploy Longhorn using the Charts chooser under the Apps section on the left of the Rancher\'s dashboard:\\n\\n![](https://www.suse.com/c/wp-content/uploads/2022/07/rancher3-1024x727.png)\\n\\nThe installation is pretty straightforward and you don\'t need to change any default value of the chart.\\\\\\nIn the end, if everything has gone well, you should see the Rancher\'s console showing:\\n\\n![Screenshot 3](https://www.suse.com/c/wp-content/uploads/2022/07/ranch-longh-install-1024x596.png)\\n\\nAfter Longhorn has been installed, you can simply click on the Longhorn entry on the left Rancher\'s menu to be redirected to the Longhorn\'s dashboard:\\n\\n![](https://www.suse.com/c/wp-content/uploads/2022/07/long-dash-1024x651.png)\\n\\nA freshly installation of Longhorn shows that still no application is using a persistent volume.\\n\\n### Deploy s3gw\\n\\nYou are now ready to add the last ingredient to your system: s3gw, the S3 gateway.\\\\\\nRancher does not bundle with the\xa0[Helm repository of s3gw](https://github.com/aquarist-labs/s3gw-charts)\xa0set\xa0by default, so you must add it from the dashboard:\\n\\n![Screenshot 4](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-repo-add-1024x608.png)\\n\\nYou can choose an unique name: for example: s3gw.\\\\\\nFor the Target field you have to choose Git repository and the repository URL:\\n\\n\\n\\nIn the Git Branch field put the latest available release:\\n\\nv0.2.0\\n\\nYou can now click on Create button.\\\\\\nOn Apps section, you can now find the s3gw chart:\\n\\n![Screenshot 5](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-chart-1024x630.png)\\n\\nSo let\'s proceed with installation; you can choose a namespace and a name for s3gw:\\n\\n![Screenshot 6](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-ns1-1024x657.png)\\n\\nYou don\'t need to customize the chart, so you can leave the bottom checkbox unchecked.\\\\\\nOnce the installation completed, if everything has gone well, you should see the Rancher\'s console showing:\\n\\n![Screenshot 7](https://www.suse.com/c/wp-content/uploads/2022/07/s3gw-installed-1024x774.png)\\n\\nOn Longhorn dashboard, you can verify that the application is using a Longhorn persistent volume:\\n\\n![Screenshot 8](https://www.suse.com/c/wp-content/uploads/2022/07/lh-s3gw-1024x480.png)\\n\\n### Test the S3 gateway\\n\\nBy default the s3gw chart configures an ingress resource pointing to the S3 gateway with the FQDN: s3gw.local .\\\\\\nThus, you must define\xa0s3gw.local in /etc/hosts pointing to the ip address of one of the host\'s physical interfaces, for example:\\n\\n10.0.0.2 s3gw.local\\n\\nFor testing the S3 gateway you can rely on\xa0[s3cmd](https://github.com/s3tools/s3cmd)\xa0that is a popular command line S3 client.\\\\\\nYou can install it choosing a method listed\xa0[here](https://github.com/s3tools/s3cmd/blob/master/INSTALL.md).\\\\\\nOnce you have installed it, you can take the s3cmd configuration file from\xa0[here](https://raw.githubusercontent.com/aquarist-labs/s3gw-core/main/env/s3cmd.cfg)\xa0and use that as it is against s3gw.\\\\\\nAll you need to to is to create a directory, put s3cmd.cfg inside that and finally invoke s3cmd.\\n\\n#### Create a bucket\\n\\n```bash\\n$\xa0s3cmd -c s3cmd.cfg mb s3://foo\\n```\\n\\n#### Put some objects in the bucket\\n\\nLet\'s create a 1mb file filled with random data and put it in the\xa0 bucket:\\n\\n```bash\\n$ dd if=/dev/random bs=1k count=1k of=obj.1mb.bin\\n$ s3cmd -c s3cmd.cfg put obj.1mb.bin s3://foo\\n```\\n\\nLet\'s create a 10mb file filled with random data and put it in the bucket:\\n\\n```bash\\n$ dd if=/dev/random bs=1k count=10k of=obj.10mb.bin\\n$ s3cmd -c s3cmd.cfg put obj.10mb.bin s3://foo\\n```\\n\\n#### List objects contained in a bucket\\n\\n```bash\\n$ s3cmd -c s3cmd.cfg ls s3://foo\\n2022-07-26 15:03 10485760 s3://foo/obj.10mb.bin\\n2022-07-26 15:01 1048576 s3://foo/obj.1mb.bin\\n```\\n\\n#### Delete an object\\n\\n```bash\\n$ s3cmd -c s3cmd.cfg rm s3://foo/obj.10mb.bin\\n```\\n\\n### In summary\\n\\nIn this tutorial, you\'ve seen how to set up a K3s cluster, manage it with Rancher, install Longhorn and finally enrich the system with a S3 gateway. K3s, Rancher and Longhorn are powerful tools to set up an environment providing resilient and performing storage capabilities. If you need to expose the storage to external clients, you can choose to install s3gw with a near zero effort.\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\xa0\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42"},{"id":"s3gw-rados-gateway-standalone","metadata":{"permalink":"/blog/s3gw-rados-gateway-standalone","source":"@site/blog/2022-07-22-sg3w-is-in-town.md","title":"Contain your excitement, the s3gw is in town","description":"We\'ve developed a standalone RADOS Gateway. Welcome to the s3gw Project.","date":"2022-07-22T00:00:00.000Z","formattedDate":"July 22, 2022","tags":[{"label":"blog","permalink":"/blog/tags/blog"}],"readingTime":0.98,"hasTruncateMarker":true,"authors":[{"name":"The s3gw team"}],"frontMatter":{"title":"Contain your excitement, the s3gw is in town","description":"We\'ve developed a standalone RADOS Gateway. Welcome to the s3gw Project.","slug":"s3gw-rados-gateway-standalone","authors":[{"name":"The s3gw team"}],"tags":["blog"],"hide_table_of_contents":false},"prevItem":{"title":"Does your PV need S3 access? We\u2019ve got you covered","permalink":"/blog/does-your-pv-need-s3-access"}},"content":"The Aquarist Labs team is back with an open source and cloud-native S3 service. After spending months investigating a storage appliance built on Ceph, the team identified the need to complement the Rancher storage portfolio with their unique skillsets and lessons learned from their time developing Aquarium.\\n\\n\x3c!--truncate--\x3e\\n\\nIntroducing the [s3gw project][1], an S3-compatible gateway running a standalone [RADOS Gateway (RGW)][2] implementation, using a non-RADOS backend for standalone usage. This new project provides the required infrastructure to build a container able to run on a Kubernetes cluster with S3-compatible endpoints to applications.\\n\\nThis is the first publicly available iteration of the s3gw project. We expect (and welcome!) bugs and we know our performance is not optimal (yet!). This release is meant for testing and feedback gathering and it is not recommended for production use. See our release notes for more details.\\n\\n## Call to action\\n\\nWe would love to hear from you about what you\'d like to see on our roadmap. What would enable you best to use s3gw in your environment?\\n\\nReach out to us at\xa0\xa0or our\xa0[Slack channel](https://aquaristlabs.slack.com/archives/C03RFG0BES0). You can also join\xa0[our mailing list](https://lists.suse.com/mailman/listinfo/s3gw)\xa0or have a look at\xa0our\xa0[GitHub repository](https://github.com/aquarist-labs/s3gw)\xa0-- feature requests are welcome!\xa0\ud83d\ude42\\n\\n[1]:https://github.com/aquarist-labs/s3gw\\n[2]:https://docs.ceph.com/en/quincy/radosgw/"}]}')}}]); \ No newline at end of file diff --git a/assets/js/bf700409.2debeec5.js b/assets/js/bf700409.2debeec5.js new file mode 100644 index 0000000..36d03c5 --- /dev/null +++ b/assets/js/bf700409.2debeec5.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[4424],{3905:(e,t,r)=>{r.d(t,{Zo:()=>c,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,s=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),p=u(r),f=a,d=p["".concat(l,".").concat(f)]||p[f]||m[f]||s;return r?n.createElement(d,i(i({ref:t},c),{},{components:r})):n.createElement(d,i({ref:t},c))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=f;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[p]="string"==typeof e?e:a,i[1]=o;for(var u=2;u{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>m,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var n=r(7462),a=(r(7294),r(3905));const s={},i="Release Notes - v0.22.0",o={permalink:"/blog/2023/08/31/release-notes-0.22",source:"@site/blog/2023-08-31-release-notes-0.22.md",title:"Release Notes - v0.22.0",description:"This release contains significant improvements and new bug fixes. Notably,",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.78,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.21.0",permalink:"/blog/2023/08/31/release-notes-0.21"},nextItem:{title:"Release Notes - v0.19.0",permalink:"/blog/2023/08/03/release-notes-0.19"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes. Notably,\nthis release brings improved multipart and sqlite stability."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved SQLite WAL usage"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved disk usage when copying objects"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Improved testing"),(0,a.kt)("li",{parentName:"ul"},"ui: Various improvements")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Allow multiple delete markers"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix various multipart transactions"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Check number of file descriptors on start"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Updated bucket stats"),(0,a.kt)("li",{parentName:"ul"},"ui: unable to access UI due to admin ops verifying cert"),(0,a.kt)("li",{parentName:"ul"},"ui: The Show/Hide button must have at least one default value"),(0,a.kt)("li",{parentName:"ul"},"ui: Dropdown buttons are not rendered correct"),(0,a.kt)("li",{parentName:"ul"},"ui: Disable caching of index.html")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ef9c45c0.9a4cba71.js b/assets/js/ef9c45c0.6542cce9.js similarity index 97% rename from assets/js/ef9c45c0.9a4cba71.js rename to assets/js/ef9c45c0.6542cce9.js index 5ea93a7..0cc958c 100644 --- a/assets/js/ef9c45c0.9a4cba71.js +++ b/assets/js/ef9c45c0.6542cce9.js @@ -1 +1 @@ -"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[8347],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),g=a,d=p["".concat(l,".").concat(g)]||p[g]||f[g]||i;return n?r.createElement(d,o(o({ref:t},c),{},{components:n})):r.createElement(d,o({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.20.0",s={permalink:"/blog/2023/08/31/release-notes-0.20",source:"@site/blog/2023-08-31-release-notes-0.20.md",title:"Release Notes - v0.20.0",description:"This release contains significant improvements and new bug fixes, particularly",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.745,hasTruncateMarker:!1,authors:[],frontMatter:{},nextItem:{title:"Release Notes - v0.19.0",permalink:"/blog/2023/08/03/release-notes-0.19"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes, particularly\nin the s3gw backing store. Notably, this release brings garbage collection,\nimproved bucket listing, including filtering, and conditional GETs."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Query-based version listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Support conditional GETs"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: New garbage collection implementation"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Change on-disk file format, add suffixes"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Parity with operations required by UI")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix warnings after enabling more compilation flags"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Several code cleanup efforts"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: use global part id for multipart parts")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for both metadata and data store have changed.")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[8347],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>d});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),g=a,d=p["".concat(l,".").concat(g)]||p[g]||f[g]||i;return n?r.createElement(d,o(o({ref:t},c),{},{components:n})):r.createElement(d,o({ref:t},c))}));function d(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=g;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:a,o[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>f,frontMatter:()=>i,metadata:()=>s,toc:()=>u});var r=n(7462),a=(n(7294),n(3905));const i={},o="Release Notes - v0.20.0",s={permalink:"/blog/2023/08/31/release-notes-0.20",source:"@site/blog/2023-08-31-release-notes-0.20.md",title:"Release Notes - v0.20.0",description:"This release contains significant improvements and new bug fixes, particularly",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.745,hasTruncateMarker:!1,authors:[],frontMatter:{},nextItem:{title:"Release Notes - v0.21.0",permalink:"/blog/2023/08/31/release-notes-0.21"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,a.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("p",null,"This release contains significant improvements and new bug fixes, particularly\nin the s3gw backing store. Notably, this release brings garbage collection,\nimproved bucket listing, including filtering, and conditional GETs."),(0,a.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,a.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,a.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,a.kt)("h2",{id:"features"},"Features"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Query-based version listing"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Support conditional GETs"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: New garbage collection implementation"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Change on-disk file format, add suffixes"),(0,a.kt)("li",{parentName:"ul"},"ui backend: Parity with operations required by UI")),(0,a.kt)("h2",{id:"fixes"},"Fixes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Fix warnings after enabling more compilation flags"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: Several code cleanup efforts"),(0,a.kt)("li",{parentName:"ul"},"rgw/sfs: use global part id for multipart parts")),(0,a.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},"On-disk format for both metadata and data store have changed.")),(0,a.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f82e026f.d56b260e.js b/assets/js/f82e026f.d56b260e.js new file mode 100644 index 0000000..f18e892 --- /dev/null +++ b/assets/js/f82e026f.d56b260e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[3084],{3905:(e,t,n)=>{n.d(t,{Zo:()=>c,kt:()=>g});var r=n(7294);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var l=r.createContext({}),u=function(e){var t=r.useContext(l),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},c=function(e){var t=u(e.components);return r.createElement(l.Provider,{value:t},e.children)},p="mdxType",f={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,c=s(e,["components","mdxType","originalType","parentName"]),p=u(n),m=o,g=p["".concat(l,".").concat(m)]||p[m]||f[m]||a;return n?r.createElement(g,i(i({ref:t},c),{},{components:n})):r.createElement(g,i({ref:t},c))}));function g(e,t){var n=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=n.length,i=new Array(a);i[0]=m;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[p]="string"==typeof e?e:o,i[1]=s;for(var u=2;u{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>f,frontMatter:()=>a,metadata:()=>s,toc:()=>u});var r=n(7462),o=(n(7294),n(3905));const a={},i="Release Notes - v0.21.0",s={permalink:"/blog/2023/08/31/release-notes-0.21",source:"@site/blog/2023-08-31-release-notes-0.21.md",title:"Release Notes - v0.21.0",description:"This release contains significant improvements and new bug fixes. Notably,",date:"2023-08-31T00:00:00.000Z",formattedDate:"August 31, 2023",tags:[],readingTime:.74,hasTruncateMarker:!1,authors:[],frontMatter:{},prevItem:{title:"Release Notes - v0.20.0",permalink:"/blog/2023/08/31/release-notes-0.20"},nextItem:{title:"Release Notes - v0.22.0",permalink:"/blog/2023/08/31/release-notes-0.22"}},l={authorsImageUrls:[]},u=[{value:"Features",id:"features",level:2},{value:"Fixes",id:"fixes",level:2},{value:"Breaking Changes",id:"breaking-changes",level:2},{value:"Known Issues",id:"known-issues",level:2}],c={toc:u},p="wrapper";function f(e){let{components:t,...n}=e;return(0,o.kt)(p,(0,r.Z)({},c,n,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("p",null,"This release contains significant improvements and new bug fixes. Notably,\nthis release brings server-side encryption support, conditional copy object,\nimprovement in profiling."),(0,o.kt)("p",null,"This release is meant for testing and feedback gathering. It is not recommended\nfor production use."),(0,o.kt)("p",null,"Should a bug be found and not expected to be related with known issues, one\nshould feel encouraged to file an issue in our\n",(0,o.kt)("a",{parentName:"p",href:"https://github.com/aquarist-labs/s3gw/issues/new/choose"},"Github repository"),"."),(0,o.kt)("h2",{id:"features"},"Features"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Add server-side encryption support"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Conditional copy object"),(0,o.kt)("li",{parentName:"ul"},"ui : Make use of the UI REST API to prevent CORS issues")),(0,o.kt)("h2",{id:"fixes"},"Fixes"),(0,o.kt)("ul",null,(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Improve sqlite connection handling"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Fix missing multipart etag"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Fix etag and mtime not being sent with copy object response"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Increase build error reporting"),(0,o.kt)("li",{parentName:"ul"},"rgw/sfs: Improve profiling (sqlite, garbage collection)"),(0,o.kt)("li",{parentName:"ul"},"ui: Prevent switching bucket retention mode from Compliance to Governance")),(0,o.kt)("h2",{id:"breaking-changes"},"Breaking Changes"),(0,o.kt)("h2",{id:"known-issues"},"Known Issues"))}f.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/main.3e05aacb.js b/assets/js/main.3e05aacb.js new file mode 100644 index 0000000..e84b43c --- /dev/null +++ b/assets/js/main.3e05aacb.js @@ -0,0 +1,2 @@ +/*! For license information please see main.3e05aacb.js.LICENSE.txt */ +(self.webpackChunkk_3_s_website=self.webpackChunkk_3_s_website||[]).push([[179],{723:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(7294),a=n(7462),o=n(8356),i=n.n(o),l=n(6887);const s={"01a85c17":[()=>Promise.all([n.e(532),n.e(4013)]).then(n.bind(n,1223)),"@theme/BlogTagsListPage",1223],"02211763":[()=>n.e(3373).then(n.t.bind(n,2819,19)),"~blog/default/blog-tags-longhorn-3fe-list.json",2819],"0583c0b9":[()=>n.e(6962).then(n.t.bind(n,6270,19)),"~blog/default/blog-tags-epinio-9cf.json",6270],"0ab93d10":[()=>n.e(7486).then(n.bind(n,3592)),"@site/blog/2023-07-06-release-notes-0.18.md",3592],"121e4848":[()=>n.e(4309).then(n.bind(n,9610)),"@site/blog/2023-03-28-release-notes-0.14.md?truncated=true",9610],"127908ae":[()=>n.e(6424).then(n.bind(n,517)),"@site/blog/2023-01-25-deploy-s3gw-digital-ocean.md?truncated=true",517],"16d23d17":[()=>n.e(1933).then(n.bind(n,2442)),"@site/blog/2023-02-16-release-notes-0.12.md?truncated=true",2442],"17fd9dd9":[()=>n.e(8759).then(n.bind(n,4036)),"@site/blog/2023-04-28-release-notes-0.15.md?truncated=true",4036],"17fe24f4":[()=>n.e(1395).then(n.bind(n,1694)),"@site/blog/2023-08-03-release-notes-0.19.md?truncated=true",1694],"1f02601f":[()=>n.e(5679).then(n.bind(n,3538)),"@site/blog/2022-08-05-release-notes-0.3.md",3538],"20417f73":[()=>n.e(743).then(n.t.bind(n,7456,19)),"~blog/default/blog-tags-introduction-60a.json",7456],"2228d21c":[()=>n.e(8413).then(n.bind(n,6650)),"@site/blog/2023-03-09-release-notes-0.13.md",6650],"28fe6e5c":[()=>n.e(4571).then(n.bind(n,7151)),"@site/blog/2023-08-31-release-notes-0.21.md?truncated=true",7151],"2f3b5f1f":[()=>n.e(3104).then(n.bind(n,6627)),"@site/blog/2023-03-01-epinio-meets-s3gw.md",6627],"343590b1":[()=>n.e(1034).then(n.bind(n,3189)),"@site/blog/2023-08-31-release-notes-0.20.md?truncated=true",3189],"34ed9c24":[()=>n.e(8890).then(n.bind(n,3933)),"@site/blog/2022-11-21-introduction-to-s3gw.md",3933],"391c67b6":[()=>n.e(7653).then(n.bind(n,4433)),"@site/blog/2023-03-28-release-notes-0.14.md",4433],"3a4b58aa":[()=>n.e(4152).then(n.bind(n,2012)),"@site/blog/2022-12-01-release-notes-0.9.md?truncated=true",2012],"3d8681a7":[()=>n.e(8509).then(n.bind(n,789)),"@site/blog/2023-06-19-release-notes-0.17.md?truncated=true",789],"3ebbadce":[()=>n.e(2667).then(n.bind(n,6069)),"@site/blog/2022-11-11-release-notes-0.8.md?truncated=true",6069],"3f3a03c1":[()=>n.e(4451).then(n.t.bind(n,1721,19)),"~blog/default/blog-tags-blog-476-list.json",1721],"4a23d510":[()=>n.e(5906).then(n.bind(n,2188)),"@site/blog/2023-03-01-epinio-meets-s3gw.md?truncated=true",2188],"4b2a568b":[()=>n.e(3943).then(n.t.bind(n,4469,19)),"/home/runner/work/s3gw-website/s3gw-website/.docusaurus/docusaurus-plugin-content-blog/default/plugin-route-context-module-100.json",4469],"4bb6553e":[()=>n.e(791).then(n.bind(n,2246)),"@site/blog/2023-08-31-release-notes-0.22.md",2246],"594097fd":[()=>n.e(8599).then(n.bind(n,9925)),"@site/blog/2022-07-22-sg3w-is-in-town.md?truncated=true",9925],"5ad2500b":[()=>n.e(2979).then(n.t.bind(n,3599,19)),"~blog/default/blog-tags-introduction-60a-list.json",3599],"5ceb4ad9":[()=>n.e(6664).then(n.bind(n,9373)),"@site/blog/2022-12-22-release-notes-0.10.md",9373],"5d721fa8":[()=>n.e(9821).then(n.bind(n,901)),"@site/blog/2023-02-16-release-notes-0.12.md",901],"5e9f5e1a":[()=>Promise.resolve().then(n.bind(n,6809)),"@generated/docusaurus.config",6809],"5ec3e0c0":[()=>n.e(3849).then(n.bind(n,3773)),"@site/blog/2023-05-11-release-notes-0.16.md?truncated=true",3773],"614a375c":[()=>n.e(1530).then(n.t.bind(n,6610,19)),"~blog/default/blog-tags-rancher-d62.json",6610],"61d02d9f":[()=>n.e(3548).then(n.bind(n,3668)),"@site/blog/2022-10-20-release-notes-0.7.md?truncated=true",3668],"631037e5":[()=>n.e(801).then(n.t.bind(n,7064,19)),"~blog/default/blog-tags-blog-476.json",7064],"6347edec":[()=>n.e(1294).then(n.bind(n,6443)),"@site/blog/2022-09-29-release-notes-0.6.md",6443],"6690b188":[()=>n.e(100).then(n.bind(n,1525)),"@site/blog/2022-11-21-introduction-to-s3gw.md?truncated=true",1525],"6875c492":[()=>Promise.all([n.e(532),n.e(814),n.e(6076),n.e(8610)]).then(n.bind(n,1714)),"@theme/BlogTagsPostsPage",1714],"6bef295d":[()=>n.e(4018).then(n.t.bind(n,5745,19)),"/home/runner/work/s3gw-website/s3gw-website/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",5745],"6c488a44":[()=>n.e(8827).then(n.t.bind(n,3902,19)),"~blog/default/blog-tags-rancher-d62-list.json",3902],"6d083898":[()=>n.e(4469).then(n.bind(n,2650)),"@site/blog/2022-11-11-release-notes-0.8.md",2650],"6ea5c557":[()=>n.e(8189).then(n.t.bind(n,5295,19)),"~blog/default/blog-tags-digital-ocean-ae6.json",5295],"724619a3":[()=>n.e(1993).then(n.t.bind(n,7432,19)),"~blog/default/blog-tags-s-3-gw-34a.json",7432],"7560b79e":[()=>n.e(6801).then(n.bind(n,3740)),"@site/blog/2023-08-03-release-notes-0.19.md",3740],"7d0d7270":[()=>n.e(2607).then(n.bind(n,1472)),"@site/blog/2022-07-28-pv-s3-access.md?truncated=true",1472],"814f3328":[()=>n.e(2535).then(n.t.bind(n,5641,19)),"~blog/default/blog-post-list-prop-default.json",5641],82494678:[()=>n.e(2864).then(n.bind(n,7311)),"@site/blog/2023-04-28-release-notes-0.15.md",7311],"87f18743":[()=>n.e(8574).then(n.bind(n,8546)),"@site/blog/2022-09-01-release-notes-0.4.md?truncated=true",8546],"890fa5ed":[()=>n.e(9541).then(n.t.bind(n,9596,19)),"~blog/default/blog-tags-release-notes-d97-list.json",9596],"89ee49ca":[()=>n.e(7037).then(n.bind(n,802)),"@site/blog/2022-09-15-release-notes-0.5.md?truncated=true",802],"8ee96678":[()=>n.e(2658).then(n.bind(n,7752)),"@site/blog/2022-07-22-sg3w-is-in-town.md",7752],"92005ed1":[()=>n.e(1496).then(n.bind(n,1656)),"@site/blog/2023-03-09-release-notes-0.13.md?truncated=true",1656],"97d7d33e":[()=>n.e(678).then(n.t.bind(n,4430,19)),"~blog/default/blog-tags-epinio-9cf-list.json",4430],99476364:[()=>n.e(1775).then(n.t.bind(n,3338,19)),"~blog/default/blog-tags-digital-ocean-ae6-list.json",3338],"9be2a502":[()=>n.e(1664).then(n.bind(n,5737)),"@site/blog/2022-09-01-release-notes-0.4.md",5737],"9d2a1a69":[()=>n.e(6270).then(n.bind(n,3536)),"@site/blog/2023-05-11-release-notes-0.16.md",3536],"9e4087bc":[()=>n.e(3608).then(n.bind(n,3169)),"@theme/BlogArchivePage",3169],"9f92aa88":[()=>n.e(7731).then(n.bind(n,6967)),"@site/blog/2022-12-01-release-notes-0.9.md",6967],a6aa9e1f:[()=>Promise.all([n.e(532),n.e(814),n.e(6076),n.e(3089)]).then(n.bind(n,46)),"@theme/BlogListPage",46],a7023ddc:[()=>n.e(1713).then(n.t.bind(n,3457,19)),"~blog/default/blog-tags-tags-4c2.json",3457],aab77db4:[()=>n.e(9142).then(n.t.bind(n,9882,19)),"~blog/default/blog-tags-release-notes-d97.json",9882],b2b675dd:[()=>n.e(533).then(n.t.bind(n,8017,19)),"~blog/default/blog-c06.json",8017],b2f554cd:[()=>n.e(1477).then(n.t.bind(n,10,19)),"~blog/default/blog-archive-80c.json",10],b769bad8:[()=>n.e(3017).then(n.bind(n,9796)),"@site/blog/2022-09-15-release-notes-0.5.md",9796],b78c41b7:[()=>n.e(8067).then(n.t.bind(n,1270,19)),"~blog/default/blog-tags-s-3-gw-34a-list.json",1270],b9c52201:[()=>n.e(638).then(n.bind(n,9722)),"@site/blog/2022-12-22-release-notes-0.10.md?truncated=true",9722],bf700409:[()=>n.e(4424).then(n.bind(n,7475)),"@site/blog/2023-08-31-release-notes-0.22.md?truncated=true",7475],c4f5d8e4:[()=>Promise.all([n.e(532),n.e(814),n.e(4195)]).then(n.bind(n,9294)),"@site/src/pages/index.js",9294],cb2b6c03:[()=>n.e(1754).then(n.t.bind(n,2798,19)),"~blog/default/blog-tags-longhorn-3fe.json",2798],ccc49370:[()=>Promise.all([n.e(532),n.e(814),n.e(6076),n.e(6103)]).then(n.bind(n,8964)),"@theme/BlogPostPage",8964],cd8c94b5:[()=>n.e(9401).then(n.bind(n,927)),"@site/blog/2022-08-05-release-notes-0.3.md?truncated=true",927],cd92267a:[()=>n.e(7006).then(n.bind(n,7188)),"@site/blog/2023-06-19-release-notes-0.17.md",7188],cf36d854:[()=>n.e(9646).then(n.bind(n,4223)),"@site/blog/2023-07-06-release-notes-0.18.md?truncated=true",4223],d62552e4:[()=>n.e(6963).then(n.bind(n,404)),"@site/blog/2022-10-20-release-notes-0.7.md",404],d70e968b:[()=>n.e(3286).then(n.bind(n,4405)),"@site/blog/2022-07-28-pv-s3-access.md",4405],de93a4c4:[()=>n.e(1168).then(n.bind(n,4270)),"@site/blog/2023-01-27-release-notes-0.11.md",4270],e58d2a17:[()=>n.e(9354).then(n.bind(n,8202)),"@site/blog/2022-09-29-release-notes-0.6.md?truncated=true",8202],e747c2c4:[()=>n.e(7093).then(n.bind(n,2873)),"@site/blog/2023-01-27-release-notes-0.11.md?truncated=true",2873],ef9c45c0:[()=>n.e(8347).then(n.bind(n,4492)),"@site/blog/2023-08-31-release-notes-0.20.md",4492],f2203f0e:[()=>n.e(2138).then(n.bind(n,2183)),"@site/blog/2023-01-25-deploy-s3gw-digital-ocean.md",2183],f82e026f:[()=>n.e(3084).then(n.bind(n,2592)),"@site/blog/2023-08-31-release-notes-0.21.md",2592]};function u(e){let{error:t,retry:n,pastDelay:a}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):a?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(9670),d=n(226);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>n.e(4972).then(n.bind(n,4972)),modules:["@theme/NotFound"],webpack:()=>[4972],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const o=l[`${e}-${t}`],f={},p=[],m=[],g=(0,c.Z)(o);return Object.entries(g).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),m.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>m,render(t,n){const i=JSON.parse(JSON.stringify(o));Object.entries(t).forEach((t=>{let[n,r]=t;const a=r.default;if(!a)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof a&&"function"!=typeof a||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{a[e]=r[e]}));let o=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{o=o[e]})),o[l[l.length-1]]=a}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,a.Z)({},i,n)))}})}const p=[{path:"/blog",component:f("/blog","c1c"),exact:!0},{path:"/blog/2023/08/03/release-notes-0.19",component:f("/blog/2023/08/03/release-notes-0.19","afc"),exact:!0},{path:"/blog/2023/08/31/release-notes-0.20",component:f("/blog/2023/08/31/release-notes-0.20","fb9"),exact:!0},{path:"/blog/2023/08/31/release-notes-0.21",component:f("/blog/2023/08/31/release-notes-0.21","3ba"),exact:!0},{path:"/blog/2023/08/31/release-notes-0.22",component:f("/blog/2023/08/31/release-notes-0.22","7e6"),exact:!0},{path:"/blog/archive",component:f("/blog/archive","c95"),exact:!0},{path:"/blog/deploy-s3gw-digital-ocean",component:f("/blog/deploy-s3gw-digital-ocean","74c"),exact:!0},{path:"/blog/does-your-pv-need-s3-access",component:f("/blog/does-your-pv-need-s3-access","d1b"),exact:!0},{path:"/blog/epinio-meets-s3gw",component:f("/blog/epinio-meets-s3gw","7c6"),exact:!0},{path:"/blog/introduction-to-s3gw",component:f("/blog/introduction-to-s3gw","02a"),exact:!0},{path:"/blog/release-notes-v0.10",component:f("/blog/release-notes-v0.10","881"),exact:!0},{path:"/blog/release-notes-v0.11",component:f("/blog/release-notes-v0.11","111"),exact:!0},{path:"/blog/release-notes-v0.12",component:f("/blog/release-notes-v0.12","785"),exact:!0},{path:"/blog/release-notes-v0.13",component:f("/blog/release-notes-v0.13","dfd"),exact:!0},{path:"/blog/release-notes-v0.14",component:f("/blog/release-notes-v0.14","b21"),exact:!0},{path:"/blog/release-notes-v0.15",component:f("/blog/release-notes-v0.15","8df"),exact:!0},{path:"/blog/release-notes-v0.16",component:f("/blog/release-notes-v0.16","c9c"),exact:!0},{path:"/blog/release-notes-v0.17",component:f("/blog/release-notes-v0.17","d58"),exact:!0},{path:"/blog/release-notes-v0.18",component:f("/blog/release-notes-v0.18","cd2"),exact:!0},{path:"/blog/release-notes-v0.3",component:f("/blog/release-notes-v0.3","48c"),exact:!0},{path:"/blog/release-notes-v0.4",component:f("/blog/release-notes-v0.4","1f2"),exact:!0},{path:"/blog/release-notes-v0.5",component:f("/blog/release-notes-v0.5","d00"),exact:!0},{path:"/blog/release-notes-v0.6",component:f("/blog/release-notes-v0.6","c76"),exact:!0},{path:"/blog/release-notes-v0.7",component:f("/blog/release-notes-v0.7","0b2"),exact:!0},{path:"/blog/release-notes-v0.8",component:f("/blog/release-notes-v0.8","911"),exact:!0},{path:"/blog/release-notes-v0.9",component:f("/blog/release-notes-v0.9","a2d"),exact:!0},{path:"/blog/s3gw-rados-gateway-standalone",component:f("/blog/s3gw-rados-gateway-standalone","39f"),exact:!0},{path:"/blog/tags",component:f("/blog/tags","512"),exact:!0},{path:"/blog/tags/blog",component:f("/blog/tags/blog","68e"),exact:!0},{path:"/blog/tags/digital-ocean",component:f("/blog/tags/digital-ocean","e38"),exact:!0},{path:"/blog/tags/epinio",component:f("/blog/tags/epinio","6d6"),exact:!0},{path:"/blog/tags/introduction",component:f("/blog/tags/introduction","bb9"),exact:!0},{path:"/blog/tags/longhorn",component:f("/blog/tags/longhorn","1bb"),exact:!0},{path:"/blog/tags/rancher",component:f("/blog/tags/rancher","bfa"),exact:!0},{path:"/blog/tags/release-notes",component:f("/blog/tags/release-notes","7b8"),exact:!0},{path:"/blog/tags/s-3-gw",component:f("/blog/tags/s-3-gw","d82"),exact:!0},{path:"/",component:f("/","e16"),exact:!0},{path:"*",component:f("*")}]},8934:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,t:()=>o});var r=n(7294);const a=r.createContext(!1);function o(e){let{children:t}=e;const[n,o]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{o(!0)}),[]),r.createElement(a.Provider,{value:n},t)}},9908:(e,t,n)=>{"use strict";var r=n(7294),a=n(3935),o=n(3727),i=n(405),l=n(412);const s=[n(2497),n(3310),n(8320),n(2295)];var u=n(723),c=n(6550),d=n(7462);function f(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var r=e.path?(0,c.LX)(t,e):n.length?n[n.length-1].match:c.F0.computeRootMatch(t);return r&&(n.push({route:e,match:r}),e.routes&&f(e.routes,t,n)),r})),n}function p(e){let{children:t}=e;return r.createElement(r.Fragment,null,t)}var m=n(5742),g=n(2263),h=n(4996),b=n(6668),v=n(1944),y=n(4711),w=n(9727);const k="default";var E=n(197);function S(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,g.Z)(),n=(0,y.l)();return r.createElement(m.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:a}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:a})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function _(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,g.Z)(),a=function(){const{siteConfig:{url:e}}=(0,g.Z)(),{pathname:t}=(0,c.TH)();return e+(0,h.Z)(t)}(),o=t?`${n}${t}`:a;return r.createElement(m.Z,null,r.createElement("meta",{property:"og:url",content:o}),r.createElement("link",{rel:"canonical",href:o}))}function x(){const{i18n:{currentLocale:e}}=(0,g.Z)(),{metadata:t,image:n}=(0,b.L)();return r.createElement(r.Fragment,null,r.createElement(m.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(v.d,{image:n}),r.createElement(_,null),r.createElement(S,null),r.createElement(E.Z,{tag:k,locale:e}),r.createElement(m.Z,null,t.map(((e,t)=>r.createElement("meta",(0,d.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if(f(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var A=n(8934),L=n(8940);function R(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{const r=t.default?.[e]??t[e];return r?.(...n)}));return()=>a.forEach((e=>e?.()))}const N=function(e){let{children:t,location:n,previousLocation:a}=e;return(0,r.useLayoutEffect)((()=>{a!==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:a}),R("onRouteDidUpdate",{previousLocation:a,location:n}))}),[a,n]),t};function P(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>f(u.Z,e))).flat();return Promise.all(t.map((e=>e.route.component.preload?.())))}class O extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.Z.canUseDOM?R("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=R("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),P(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const D=O,I="docusaurus-base-url-issue-banner-container",M="docusaurus-base-url-issue-banner",F="docusaurus-base-url-issue-banner-suggestion-container",B="__DOCUSAURUS_INSERT_BASEURL_BANNER";function j(e){return`\nwindow['${B}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${B}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${I}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[B]=!1}),[]),r.createElement(r.Fragment,null,!l.Z.canUseDOM&&r.createElement(m.Z,null,r.createElement("script",null,j(e))),r.createElement("div",{id:I}))}function U(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,g.Z)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(z,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:a,localeConfigs:o}}=(0,g.Z)(),i=(0,h.Z)(e),{htmlLang:l,direction:s}=o[a];return r.createElement(m.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var q=n(4763);function G(){const e=function(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?r.createElement(c.rs,n,e.map((function(e,n){return r.createElement(c.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,d.Z)({},n,{},t,{route:e})):r.createElement(e.component,(0,d.Z)({},n,t,{route:e}))}})}))):null}(u.Z),t=(0,c.TH)();return r.createElement(q.Z,null,r.createElement(L.M,null,r.createElement(A.t,null,r.createElement(p,null,r.createElement($,null),r.createElement(x,null),r.createElement(U,null),r.createElement(D,{location:T(t)},e)))))}var H=n(6887);const Z=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 V=n(9670);const W=new Set,Y=new Set,K=()=>navigator.connection?.effectiveType.includes("2g")||navigator.connection?.saveData,Q={prefetch(e){if(!(e=>!K()&&!Y.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=f(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(H).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,V.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?Z(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!K()&&!Y.has(e))(e)&&(Y.add(e),P(e))},X=Object.freeze(Q);if(l.Z.canUseDOM){window.docusaurus=X;const e=a.hydrate;P(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(o.VK,null,r.createElement(G,null))),document.getElementById("__docusaurus"))}))}},8940:(e,t,n)=>{"use strict";n.d(t,{_:()=>u,M:()=>c});var r=n(7294),a=n(6809);const o=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var i=n(7529);const l=JSON.parse('{"docusaurusVersion":"2.3.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.3.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.3.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.3.1"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.3.1"}}}'),s={siteConfig:a.default,siteMetadata:l,globalData:{},i18n:o,codeTranslations:i},u=r.createContext(s);function c(e){let{children:t}=e;return r.createElement(u.Provider,{value:s},t)}},4763:(e,t,n)=>{"use strict";n.d(t,{Z:()=>c});var r=n(7294),a=n(412),o=n(5742),i=n(6221);function l(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",height:"50vh",width:"100%",fontSize:"20px"}},r.createElement("h1",null,"This page crashed."),r.createElement("p",null,t.message),r.createElement("button",{type:"button",onClick:n},"Try again"))}function s(e){let{error:t,tryAgain:n}=e;return r.createElement(c,{fallback:()=>r.createElement(l,{error:t,tryAgain:n})},r.createElement(o.Z,null,r.createElement("title",null,"Page Error")),r.createElement(i.Z,null,r.createElement(l,{error:t,tryAgain:n})))}const u=e=>r.createElement(s,e);class c 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??u)(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});var r=n(7294),a=n(405);function o(e){return r.createElement(a.ql,e)}},9960:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=n(7462),a=n(7294),o=n(3727),i=n(8780),l=n(2263),s=n(3919),u=n(412);const c=a.createContext({collectLink:()=>{}}),d=()=>(0,a.useContext)(c);var f=n(4996);const p=e=>e.startsWith("/");function m(e,t){let{isNavLink:n,to:c,href:m,activeClassName:g,isActive:h,"data-noBrokenLinkCheck":b,autoAddBaseUrl:v=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:k}}=(0,l.Z)(),{withBaseUrl:E}=(0,f.C)(),S=d(),_=(0,a.useRef)(null);(0,a.useImperativeHandle)(t,(()=>_.current));const x=c||m;const C=(0,s.Z)(x),T=x?.replace("pathname://","");let A=void 0!==T?(L=T,v&&p(L)?E(L):L):void 0;var L;A&&C&&(A=(0,i.applyTrailingSlash)(A,{trailingSlash:w,baseUrl:k}));const R=(0,a.useRef)(!1),N=n?o.OL:o.rU,P=u.Z.canUseIntersectionObserver,O=(0,a.useRef)(),D=()=>{R.current||null==A||(window.docusaurus.preload(A),R.current=!0)};(0,a.useEffect)((()=>(!P&&C&&null!=A&&window.docusaurus.prefetch(A),()=>{P&&O.current&&O.current.disconnect()})),[O,A,P,C]);const I=A?.startsWith("#")??!1,M=!A||!C||I;return M||b||S.collectLink(A),M?a.createElement("a",(0,r.Z)({ref:_,href:A},x&&!C&&{target:"_blank",rel:"noopener noreferrer"},y)):a.createElement(N,(0,r.Z)({},y,{onMouseEnter:D,onTouchStart:D,innerRef:e=>{_.current=e,P&&e&&C&&(O.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(O.current.unobserve(e),O.current.disconnect(),null!=A&&window.docusaurus.prefetch(A))}))})),O.current.observe(e))},to:A},n&&{isActive:h,activeClassName:g}))}const g=a.forwardRef(m)},1875:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r=()=>null},5999:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s,I:()=>l});var r=n(7294);function a(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=t?.[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var o=n(7529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return o[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return a(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:o}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,a(l,o))}},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,{C:()=>i,Z:()=>l});var r=n(7294),a=n(2263),o=n(3919);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,a.Z)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:a=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,o.b)(n))return n;if(a)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},2263:(e,t,n)=>{"use strict";n.d(t,{Z:()=>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._)}},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=".",n={};return function e(a,o){Object.entries(a).forEach((a=>{let[i,l]=a;const s=o?`${o}${t}${i}`:i;r(l)?e(l,s):n[s]=l}))}(e),n}},226:(e,t,n)=>{"use strict";n.d(t,{_:()=>a,z:()=>o});var r=n(7294);const a=r.createContext(null);function o(e){let{children:t,value:n}=e;const o=r.useContext(a),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...n?.data};return{plugin:t.plugin,data:r}}({parent:o,value:n})),[o,n]);return r.createElement(a.Provider,{value:i},t)}},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(7410),a=n(6809);!function(e){const{themeConfig:{prism:t}}=a.default,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},6221:(e,t,n)=>{"use strict";n.d(t,{Z:()=>Ft});var r=n(7294),a=n(6010),o=n(4763),i=n(1944),l=n(7462),s=n(6550),u=n(5999),c=n(902);function d(e){const t=(0,s.TH)(),n=(0,c.D9)(t),a=(0,c.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&a({location:t,previousLocation:n})}),[a,t,n])}const f="docusaurus_skipToContent_fallback";function p(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function m(){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(f);t&&p(t)}),[]);return d((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&p(e.current)})),{containerRef:e,onClick:n}}const g=(0,u.I)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function h(e){const t=e.children??g,{containerRef:n,onClick:a}=m();return r.createElement("div",{ref:n,role:"region","aria-label":g},r.createElement("a",(0,l.Z)({},e,{href:`#${f}`,onClick:a}),t))}var b=n(5281),v=n(9727);const y={skipToContent:"skipToContent_fXgn"};function w(){return r.createElement(h,{className:y.skipToContent})}var k=n(6668),E=n(2389),S=n(12);const _=(0,S.WA)("docusaurus.announcement.dismiss"),x=(0,S.WA)("docusaurus.announcement.id"),C=()=>"true"===_.get(),T=e=>_.set(String(e)),A=r.createContext(null);function L(e){let{width:t=21,height:n=21,color:a="currentColor",strokeWidth:o=1.2,className:i,...s}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 15 15",width:t,height:n},s),r.createElement("g",{stroke:a,strokeWidth:o},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const R={closeButton:"closeButton_CVFx"};function N(e){return r.createElement("button",(0,l.Z)({type:"button","aria-label":(0,u.I)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,a.Z)("clean-btn close",R.closeButton,e.className)}),r.createElement(L,{width:14,height:14,strokeWidth:3.1}))}const P={content:"content_knG7"};function O(e){const{announcementBar:t}=(0,k.L)(),{content:n}=t;return r.createElement("div",(0,l.Z)({},e,{className:(0,a.Z)(P.content,e.className),dangerouslySetInnerHTML:{__html:n}}))}const D={announcementBar:"announcementBar_mb4j",announcementBarPlaceholder:"announcementBarPlaceholder_vyr4",announcementBarClose:"announcementBarClose_gvF7",announcementBarContent:"announcementBarContent_xLdY"};function I(){const{announcementBar:e}=(0,k.L)(),{isActive:t,close:n}=function(){const e=(0,r.useContext)(A);if(!e)throw new c.i6("AnnouncementBarProvider");return e}();if(!t)return null;const{backgroundColor:a,textColor:o,isCloseable:i}=e;return r.createElement("div",{className:D.announcementBar,style:{backgroundColor:a,color:o},role:"banner"},i&&r.createElement("div",{className:D.announcementBarPlaceholder}),r.createElement(O,{className:D.announcementBarContent}),i&&r.createElement(N,{onClick:n,className:D.announcementBarClose}))}var M=n(3102),F=n(7524);n(1688);function B(e){!function(e){const t=(0,s.k6)(),n=(0,c.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}const j=r.createContext(void 0);function z(){const e=function(){const e=(0,M.HY)(),{items:t}=(0,k.L)().navbar;return 0===t.length&&!e.component}(),t=(0,F.i)(),n=!e&&"mobile"===t,[a,o]=(0,r.useState)(!1);B((()=>{if(a)return o(!1),!1}));const i=(0,r.useCallback)((()=>{o((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&o(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:i,shown:a})),[e,n,i,a])}function U(e){let{children:t}=e;const n=z();return r.createElement(j.Provider,{value:n},t)}function $(){const e=r.useContext(j);if(void 0===e)throw new c.i6("NavbarMobileSidebarProvider");return e}var q=n(412);const G=r.createContext(void 0);function H(){const e=(0,r.useContext)(G);if(null==e)throw new c.i6("ScrollControllerProvider");return e}const Z=()=>q.Z.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function V(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 function(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=H(),a=(0,r.useRef)(Z()),o=(0,c.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=Z();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])}(((t,r)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{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}}const W=r.createContext(null);function Y(e){let{children:t}=e;const n=function(){const e=$(),t=(0,M.HY)(),[n,a]=(0,r.useState)(!1),o=null!==t.component,i=(0,c.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 r.createElement(W.Provider,{value:n},t)}function K(e){if(e.component){const t=e.component;return r.createElement(t,e.props)}}function Q(){const e=(0,r.useContext)(W);if(!e)throw new c.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,a=(0,r.useCallback)((()=>n(!1)),[n]),o=(0,M.HY)();return(0,r.useMemo)((()=>({shown:t,hide:a,content:K(o)})),[a,o,t])}function X(e){let{header:t,primaryMenu:n,secondaryMenu:o}=e;const{shown:i}=Q();return r.createElement("div",{className:"navbar-sidebar"},t,r.createElement("div",{className:(0,a.Z)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":i})},r.createElement("div",{className:"navbar-sidebar__item menu"},n),r.createElement("div",{className:"navbar-sidebar__item menu"},o)))}var J=n(2949);function ee(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}function te(e){return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:24,height:24},e),r.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}const ne={toggle:"toggle_vylO",toggleButton:"toggleButton_gllP",darkToggleIcon:"darkToggleIcon_wfgR",lightToggleIcon:"lightToggleIcon_pyhR",toggleButtonDisabled:"toggleButtonDisabled_aARS"};function re(e){let{className:t,value:n,onChange:o}=e;const i=(0,E.Z)(),l=(0,u.I)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===n?(0,u.I)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,u.I)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return r.createElement("div",{className:(0,a.Z)(ne.toggle,t)},r.createElement("button",{className:(0,a.Z)("clean-btn",ne.toggleButton,!i&&ne.toggleButtonDisabled),type:"button",onClick:()=>o("dark"===n?"light":"dark"),disabled:!i,title:l,"aria-label":l,"aria-live":"polite"},r.createElement(ee,{className:(0,a.Z)(ne.toggleIcon,ne.lightToggleIcon)}),r.createElement(te,{className:(0,a.Z)(ne.toggleIcon,ne.darkToggleIcon)})))}const ae=r.memo(re);function oe(e){let{className:t}=e;const n=(0,k.L)().colorMode.disableSwitch,{colorMode:a,setColorMode:o}=(0,J.I)();return n?null:r.createElement(ae,{className:t,value:a,onChange:o})}var ie=n(9960),le=n(4996),se=n(2263),ue=n(941);function ce(e){let{logo:t,alt:n,imageClassName:a}=e;const o={light:(0,le.Z)(t.src),dark:(0,le.Z)(t.srcDark||t.src)},i=r.createElement(ue.Z,{className:t.className,sources:o,height:t.height,width:t.width,alt:n,style:t.style});return a?r.createElement("div",{className:a},i):i}function de(e){const{siteConfig:{title:t}}=(0,se.Z)(),{navbar:{title:n,logo:a}}=(0,k.L)(),{imageClassName:o,titleClassName:i,...s}=e,u=(0,le.Z)(a?.href||"/"),c=n?"":t,d=a?.alt??c;return r.createElement(ie.Z,(0,l.Z)({to:u},s,a?.target&&{target:a.target}),a&&r.createElement(ce,{logo:a,alt:d,imageClassName:o}),null!=n&&r.createElement("b",{className:i},n))}function fe(){return r.createElement(de,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}function pe(){const e=$();return r.createElement("button",{type:"button","aria-label":(0,u.I)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},r.createElement(L,{color:"var(--ifm-color-emphasis-600)"}))}function me(){return r.createElement("div",{className:"navbar-sidebar__brand"},r.createElement(fe,null),r.createElement(oe,{className:"margin-right--md"}),r.createElement(pe,null))}var ge=n(3919);function he(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}const be={iconExternalLink:"iconExternalLink_nPIU"};function ve(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:be.iconExternalLink},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}function ye(e){let{activeBasePath:t,activeBaseRegex:n,to:a,href:o,label:i,html:s,isDropdownLink:u,prependBaseUrlToHref:c,...d}=e;const f=(0,le.Z)(a),p=(0,le.Z)(t),m=(0,le.Z)(o,{forcePrependBaseUrl:!0}),g=i&&o&&!(0,ge.Z)(o),h=s?{dangerouslySetInnerHTML:{__html:s}}:{children:r.createElement(r.Fragment,null,i,g&&r.createElement(ve,u&&{width:12,height:12}))};return o?r.createElement(ie.Z,(0,l.Z)({href:c?m:o},d,h)):r.createElement(ie.Z,(0,l.Z)({to:f,isNavLink:!0},(t||n)&&{isActive:(e,t)=>n?he(n,t.pathname):t.pathname.startsWith(p)},d,h))}function we(e){let{className:t,isDropdownItem:n=!1,...o}=e;const i=r.createElement(ye,(0,l.Z)({className:(0,a.Z)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},o));return n?r.createElement("li",null,i):i}function ke(e){let{className:t,isDropdownItem:n,...o}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(ye,(0,l.Z)({className:(0,a.Z)("menu__link",t)},o)))}function Ee(e){let{mobile:t=!1,position:n,...a}=e;const o=t?ke:we;return r.createElement(o,(0,l.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var Se=n(6043);n(723);function _e(e,t){return e.some((e=>function(e,t){return!!function(e,t){const n=e=>(!e||e.endsWith("/")?e:`${e}/`)?.toLowerCase();return n(e)===n(t)}(e.to,t)||!!he(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function xe(e){let{items:t,position:n,className:o,onClick:i,...s}=e;const u=(0,r.useRef)(null),[c,d]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{const e=e=>{u.current&&!u.current.contains(e.target)&&d(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e)}}),[u]),r.createElement("div",{ref:u,className:(0,a.Z)("navbar__item","dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":c})},r.createElement(ye,(0,l.Z)({"aria-haspopup":"true","aria-expanded":c,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(!c))}}),s.children??s.label),r.createElement("ul",{className:"dropdown__menu"},t.map(((e,n)=>r.createElement(nt,(0,l.Z)({isDropdownItem:!0,onKeyDown:e=>{if(n===t.length-1&&"Tab"===e.key){e.preventDefault(),d(!1);const t=u.current.nextElementSibling;if(t){(t instanceof HTMLAnchorElement?t:t.querySelector("a")).focus()}}},activeClassName:"dropdown__link--active"},e,{key:n}))))))}function Ce(e){let{items:t,className:n,position:o,onClick:i,...u}=e;const c=function(){const{siteConfig:{baseUrl:e}}=(0,se.Z)(),{pathname:t}=(0,s.TH)();return t.replace(e,"/")}(),d=_e(t,c),{collapsed:f,toggleCollapsed:p,setCollapsed:m}=(0,Se.u)({initialState:()=>!d});return(0,r.useEffect)((()=>{d&&m(!d)}),[c,d,m]),r.createElement("li",{className:(0,a.Z)("menu__list-item",{"menu__list-item--collapsed":f})},r.createElement(ye,(0,l.Z)({role:"button",className:(0,a.Z)("menu__link menu__link--sublist menu__link--sublist-caret",n)},u,{onClick:e=>{e.preventDefault(),p()}}),u.children??u.label),r.createElement(Se.z,{lazy:!0,as:"ul",className:"menu__list",collapsed:f},t.map(((e,t)=>r.createElement(nt,(0,l.Z)({mobile:!0,isDropdownItem:!0,onClick:i,activeClassName:"menu__link--active"},e,{key:t}))))))}function Te(e){let{mobile:t=!1,...n}=e;const a=t?Ce:xe;return r.createElement(a,n)}var Ae=n(4711);function Le(e){let{width:t=20,height:n=20,...a}=e;return r.createElement("svg",(0,l.Z)({viewBox:"0 0 24 24",width:t,height:n,"aria-hidden":!0},a),r.createElement("path",{fill:"currentColor",d:"M12.87 15.07l-2.54-2.51.03-.03c1.74-1.94 2.98-4.17 3.71-6.53H17V4h-7V2H8v2H1v1.99h11.17C11.5 7.92 10.44 9.75 9 11.35 8.07 10.32 7.3 9.19 6.69 8h-2c.73 1.63 1.73 3.17 2.98 4.56l-5.09 5.02L4 19l5-5 3.11 3.11.76-2.04zM18.5 10h-2L12 22h2l1.12-3h4.75L21 22h2l-4.5-12zm-2.62 7l1.62-4.33L19.12 17h-3.24z"}))}const Re={iconLanguage:"iconLanguage_nlXk"};var Ne=n(1875);const Pe={searchBox:"searchBox_ZlJk"};function Oe(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.Z)(n,Pe.searchBox)},t)}const De="default";function Ie(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,se.Z)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const Me=e=>e.versions.find((e=>e.isLast));function Fe(e,t){const n=function(e,t){const n=Me(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,s.LX)(t,{path:e.path,exact:!1,strict:!1})))}(e,t),r=n?.docs.find((e=>!!(0,s.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:r,alternateDocVersions:r?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(r.id):{}}}const Be={},je=()=>Ie("docusaurus-plugin-content-docs")??Be,ze=e=>function(e,t,n){void 0===t&&(t=De),void 0===n&&(n={});const r=Ie(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});function Ue(e){const t=ze(e),{pathname:n}=(0,s.TH)();return Fe(t,n)}const $e=e=>`docs-preferred-version-${e}`,qe={save:(e,t,n)=>{(0,S.WA)($e(e),{persistence:t}).set(n)},read:(e,t)=>(0,S.WA)($e(e),{persistence:t}).get(),clear:(e,t)=>{(0,S.WA)($e(e),{persistence:t}).del()}},Ge=e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}])));const He=r.createContext(null);function Ze(){const e=je(),t=(0,k.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,o]=(0,r.useState)((()=>Ge(n)));(0,r.useEffect)((()=>{o(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function a(e){const t=qe.read(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(qe.clear(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,a(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){qe.save(e,t,n),o((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function Ve(e){let{children:t}=e;const n=Ze();return r.createElement(He.Provider,{value:n},t)}function We(){const e=(0,r.useContext)(He);if(!e)throw new c.i6("DocsPreferredVersionContextProvider");return e}function Ye(e){void 0===e&&(e=De);const t=ze(e),[n,a]=We(),{preferredVersionName:o}=n[e];return{preferredVersion:t.versions.find((e=>e.name===o))??null,savePreferredVersionName:(0,r.useCallback)((t=>{a.savePreferredVersion(e,t)}),[a,e])}}function Ke(e){return Array.from(new Set(e))}const Qe=!!je;function Xe(e){const{activeVersion:t}=Ue(e),{preferredVersion:n}=Ye(e),a=function(e){const t=ze(e);return Me(t)}(e);return(0,r.useMemo)((()=>Ke([t,n,a].filter(Boolean))),[t,n,a])}const Je=e=>e.docs.find((t=>t.id===e.mainDocId));const et=e=>e.docs.find((t=>t.id===e.mainDocId));const tt={default:Ee,localeDropdown:function(e){let{mobile:t,dropdownItemsBefore:n,dropdownItemsAfter:a,...o}=e;const{i18n:{currentLocale:i,locales:c,localeConfigs:d}}=(0,se.Z)(),f=(0,Ae.l)(),{search:p,hash:m}=(0,s.TH)(),g=[...n,...c.map((e=>{const n=`${`pathname://${f.createUrl({locale:e,fullyQualified:!1})}`}${p}${m}`;return{label:d[e].label,lang:d[e].htmlLang,to:n,target:"_self",autoAddBaseUrl:!1,className:e===i?t?"menu__link--active":"dropdown__link--active":""}})),...a],h=t?(0,u.I)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):d[i].label;return r.createElement(Te,(0,l.Z)({},o,{mobile:t,label:r.createElement(r.Fragment,null,r.createElement(Le,{className:Re.iconLanguage}),h),items:g}))},search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(Oe,{className:n},r.createElement(Ne.Z,null))},dropdown:Te,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.Z)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=Ue(a),s=function(e,t){const n=Xe(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(`DocNavbarItem: 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- ${Ke(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}(t,a);return null===s?null:r.createElement(Ee,(0,l.Z)({exact:!0},o,{isActive:()=>i?.path===s.path||!!i?.sidebar&&i.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...o}=e;const{activeDoc:i}=Ue(a),s=function(e,t){const n=Xe(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(", ")}".\n Available sidebar ids are:\n - ${Object.keys(t).join("\n- ")}`);return r[1]}),[e,n])}(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(Ee,(0,l.Z)({exact:!0},o,{isActive:()=>i?.sidebar===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...o}=e;const i=Xe(a)[0],s=t??i.label,u=n??Je(i).path;return r.createElement(Ee,(0,l.Z)({},o,{label:s,to:u}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:o,dropdownItemsAfter:i,...c}=e;const{search:d,hash:f}=(0,s.TH)(),p=Ue(n),m=ze(n).versions,{savePreferredVersionName:g}=Ye(n),h=[...o,...m.map((e=>{const t=p.alternateDocVersions[e.name]??et(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>g(e.name)}})),...i],b=Xe(n)[0],v=t&&h.length>1?(0,u.I)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):b.label,y=t&&h.length>1?void 0:et(b).path;return h.length<=1?r.createElement(Ee,(0,l.Z)({},c,{mobile:t,label:v,to:y,isActive:a?()=>!1:void 0})):r.createElement(Te,(0,l.Z)({},c,{mobile:t,label:v,to:y,items:h,isActive:a?()=>!1:void 0}))}};function nt(e){let{type:t,...n}=e;const a=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),o=tt[a];if(!o)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(o,n)}function rt(){const e=$(),t=(0,k.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(nt,(0,l.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}function at(e){return r.createElement("button",(0,l.Z)({},e,{type:"button",className:"clean-btn navbar-sidebar__back"}),r.createElement(u.Z,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"\u2190 Back to main menu"))}function ot(){const e=0===(0,k.L)().navbar.items.length,t=Q();return r.createElement(r.Fragment,null,!e&&r.createElement(at,{onClick:()=>t.hide()}),t.content)}function it(){const e=$();var t;return void 0===(t=e.shown)&&(t=!0),(0,r.useEffect)((()=>(document.body.style.overflow=t?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[t]),e.shouldRender?r.createElement(X,{header:r.createElement(me,null),primaryMenu:r.createElement(rt,null),secondaryMenu:r.createElement(ot,null)}):null}const lt={navbarHideable:"navbarHideable_m1mJ",navbarHidden:"navbarHidden_jGov"};function st(e){return r.createElement("div",(0,l.Z)({role:"presentation"},e,{className:(0,a.Z)("navbar-sidebar__backdrop",e.className)}))}function ut(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:o}}=(0,k.L)(),i=$(),{navbarRef:l,isNavbarVisible:s}=V(n);return r.createElement("nav",{ref:l,"aria-label":(0,u.I)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.Z)("navbar","navbar--fixed-top",n&&[lt.navbarHideable,!s&<.navbarHidden],{"navbar--dark":"dark"===o,"navbar--primary":"primary"===o,"navbar-sidebar--show":i.shown})},t,r.createElement(st,{onClick:i.toggle}),r.createElement(it,null))}const ct="right";function dt(e){let{width:t=30,height:n=30,className:a,...o}=e;return r.createElement("svg",(0,l.Z)({className:a,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},o),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function ft(){const{toggle:e,shown:t}=$();return r.createElement("button",{onClick:e,"aria-label":(0,u.I)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(dt,null))}const pt={colorModeToggle:"colorModeToggle_DEke"};function mt(e){let{items:t}=e;return r.createElement(r.Fragment,null,t.map(((e,t)=>r.createElement(nt,(0,l.Z)({},e,{key:t})))))}function gt(e){let{left:t,right:n}=e;return r.createElement("div",{className:"navbar__inner"},r.createElement("div",{className:"navbar__items"},t),r.createElement("div",{className:"navbar__items navbar__items--right"},n))}function ht(){const e=$(),t=(0,k.L)().navbar.items,[n,a]=function(e){function t(e){return"left"===(e.position??ct)}return[e.filter(t),e.filter((e=>!t(e)))]}(t),o=t.find((e=>"search"===e.type));return r.createElement(gt,{left:r.createElement(r.Fragment,null,!e.disabled&&r.createElement(ft,null),r.createElement(fe,null),r.createElement(mt,{items:n})),right:r.createElement(r.Fragment,null,r.createElement(mt,{items:a}),r.createElement(oe,{className:pt.colorModeToggle}),!o&&r.createElement(Oe,null,r.createElement(Ne.Z,null)))})}function bt(){return r.createElement(ut,null,r.createElement(ht,null))}function vt(e){let{item:t}=e;const{to:n,href:a,label:o,prependBaseUrlToHref:i,...s}=t,u=(0,le.Z)(n),c=(0,le.Z)(a,{forcePrependBaseUrl:!0});return r.createElement(ie.Z,(0,l.Z)({className:"footer__link-item"},a?{href:i?c:a}:{to:u},s),o,a&&!(0,ge.Z)(a)&&r.createElement(ve,null))}function yt(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(vt,{item:t}))}function wt(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(yt,{key:t,item:e})))))}function kt(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(wt,{key:t,column:e}))))}function Et(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function St(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(vt,{item:t})}function _t(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(St,{item:e}),t.length!==n+1&&r.createElement(Et,null))))))}function xt(e){let{links:t}=e;return function(e){return"title"in e[0]}(t)?r.createElement(kt,{columns:t}):r.createElement(_t,{links:t})}const Ct={footerLogoLink:"footerLogoLink_BH7S"};function Tt(e){let{logo:t}=e;const{withBaseUrl:n}=(0,le.C)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(ue.Z,{className:(0,a.Z)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function At(e){let{logo:t}=e;return t.href?r.createElement(ie.Z,{href:t.href,className:Ct.footerLogoLink,target:t.target},r.createElement(Tt,{logo:t})):r.createElement(Tt,{logo:t})}function Lt(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}function Rt(e){let{style:t,links:n,logo:o,copyright:i}=e;return r.createElement("footer",{className:(0,a.Z)("footer",{"footer--dark":"dark"===t})},r.createElement("div",{className:"container container-fluid"},n,(o||i)&&r.createElement("div",{className:"footer__bottom text--center"},o&&r.createElement("div",{className:"margin-bottom--sm"},o),i)))}function Nt(){const{footer:e}=(0,k.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:o}=e;return r.createElement(Rt,{style:o,links:n&&n.length>0&&r.createElement(xt,{links:n}),logo:a&&r.createElement(At,{logo:a}),copyright:t&&r.createElement(Lt,{copyright:t})})}const Pt=r.memo(Nt),Ot=(0,c.Qc)([J.S,function(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,k.L)(),t=(0,E.Z)(),[n,a]=(0,r.useState)((()=>!!t&&C()));(0,r.useEffect)((()=>{a(C())}),[]);const o=(0,r.useCallback)((()=>{T(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=x.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;x.set(t),r&&T(!1),!r&&C()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:o})),[e,n,o])}();return r.createElement(A.Provider,{value:n},t)},function(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(G.Provider,{value:n},t)},function(e){let{children:t}=e;return Qe?r.createElement(Ve,null,t):r.createElement(r.Fragment,null,t)},i.VC,function(e){let{children:t}=e;return r.createElement(M.n2,null,r.createElement(U,null,r.createElement(Y,null,t)))}]);function Dt(e){let{children:t}=e;return r.createElement(Ot,null,t)}function It(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(u.Z,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("p",null,t.message),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},r.createElement(u.Z,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again when the page crashed"},"Try again"))))))}const Mt={mainWrapper:"mainWrapper_z2l0"};function Ft(e){const{children:t,noFooter:n,wrapperClassName:l,title:s,description:u}=e;return(0,v.t)(),r.createElement(Dt,null,r.createElement(i.d,{title:s,description:u}),r.createElement(w,null),r.createElement(I,null),r.createElement(bt,null),r.createElement("div",{id:f,className:(0,a.Z)(b.k.wrapper.main,Mt.mainWrapper,l)},r.createElement(o.Z,{fallback:e=>r.createElement(It,e)},t)),!n&&r.createElement(Pt,null))}},197:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(7294),a=n(5742);function o(e){let{locale:t,version:n,tag:o}=e;const i=t;return r.createElement(a.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),o&&r.createElement("meta",{name:"docusaurus_tag",content:o}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),o&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:o}))}},941:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(7462),a=n(7294),o=n(6010),i=n(2389),l=n(2949);const s={themedImage:"themedImage_ToTc","themedImage--light":"themedImage--light_HNdA","themedImage--dark":"themedImage--dark_i4oU"};function u(e){const t=(0,i.Z)(),{colorMode:n}=(0,l.I)(),{sources:u,className:c,alt:d,...f}=e,p=t?"dark"===n?["dark"]:["light"]:["light","dark"];return a.createElement(a.Fragment,null,p.map((e=>a.createElement("img",(0,r.Z)({key:e,src:u[e],alt:d,className:(0,o.Z)(s.themedImage,s[`themedImage--${e}`],c)},f)))))}},6043:(e,t,n)=>{"use strict";n.d(t,{u:()=>l,z:()=>g});var r=n(7462),a=n(7294),o=n(412);const i="ease-in-out";function l(e){let{initialState:t}=e;const[n,r]=(0,a.useState)(t??!1),o=(0,a.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const s={display:"none",overflow:"hidden",height:"0px"},u={display:"block",overflow:"visible",height:"auto"};function c(e,t){const n=t?s:u;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function d(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,a.useRef)(!1);(0,a.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=r?.duration??function(e){const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${r?.easing??i}`,height:`${t}px`}}function l(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return c(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(l(),requestAnimationFrame((()=>{e.style.height=s.height,e.style.overflow=s.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{l()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function f(e){if(!o.Z.canUseDOM)return e?s:u}function p(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:i,className:l,disableSSRStyle:s}=e;const u=(0,a.useRef)(null);return d({collapsibleRef:u,collapsed:n,animation:o}),a.createElement(t,{ref:u,style:s?void 0:f(n),onTransitionEnd:e=>{"height"===e.propertyName&&(c(u.current,n),i?.(n))},className:l},r)}function m(e){let{collapsed:t,...n}=e;const[o,i]=(0,a.useState)(!t),[l,s]=(0,a.useState)(t);return(0,a.useLayoutEffect)((()=>{t||i(!0)}),[t]),(0,a.useLayoutEffect)((()=>{o&&s(t)}),[o,t]),o?a.createElement(p,(0,r.Z)({},n,{collapsed:l})):null}function g(e){let{lazy:t,...n}=e;const r=t?m:p;return a.createElement(r,n)}},2949:(e,t,n)=>{"use strict";n.d(t,{I:()=>h,S:()=>g});var r=n(7294),a=n(412),o=n(902),i=n(12),l=n(6668);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d={light:"light",dark:"dark"},f=e=>e===d.dark?d.dark:d.light,p=e=>a.Z.canUseDOM?f(document.documentElement.getAttribute("data-theme")):f(e),m=e=>{c.set(f(e))};function g(e){let{children:t}=e;const n=function(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,o]=(0,r.useState)(p(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const i=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:a=!0}=r;t?(o(t),a&&m(t)):(o(n?window.matchMedia("(prefers-color-scheme: dark)").matches?d.dark:d.light:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",f(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&i(f(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,i]);const s=(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||s.current?s.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===d.dark},setLightTheme(){i(d.light)},setDarkTheme(){i(d.dark)}})),[a,i])}();return r.createElement(s.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(s);if(null==e)throw new o.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},3102:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(7294),a=n(902);const o=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(o.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(o);if(!e)throw new a.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(o);if(!i)throw new a.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,a.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),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:()=>u});var r=n(7294),a=n(412);const o={desktop:"desktop",mobile:"mobile",ssr:"ssr"},i=996;function l(){return a.Z.canUseDOM?window.innerWidth>i?o.desktop:o.mobile:o.ssr}const s=!1;function u(){const[e,t]=(0,r.useState)((()=>s?"ssr":l()));return(0,r.useEffect)((()=>{function e(){t(l())}const n=s?window.setTimeout(e,1e3):void 0;return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(n)}}),[]),e}},5281:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",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:{}}},1944:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(7294),a=n(6010),o=n(5742),i=n(226);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(4996),u=n(2263);function c(e){let{title:t,description:n,keywords:a,image:i,children:l}=e;const c=function(e){const{siteConfig:t}=(0,u.Z)(),{title:n,titleDelimiter:r}=t;return e?.trim().length?`${e.trim()} ${r} ${n}`:n}(t),{withBaseUrl:d}=(0,s.C)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(o.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),a&&r.createElement("meta",{name:"keywords",content:Array.isArray(a)?a.join(","):a}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,a.Z)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(o.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),o=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,a.Z)(o,i)},t)}},902:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>o});var r=n(7294);const a=n(412).Z.canUseDOM?r.useLayoutEffect:r.useEffect;function o(e){const t=(0,r.useRef)(e);return a((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return a((()=>{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+\.)?(?\w+)/)?.groups.name??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},12:(e,t,n)=>{"use strict";n.d(t,{WA:()=>s});n(7294),n(1688);const r="localStorage";function a(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 o(e){if(void 0===e&&(e=r),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,i||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),i=!0),null}var t}let i=!1;const l={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function s(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=o(t?.persistence);return null===n?l:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),a({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),a({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}},4711:(e,t,n)=>{"use strict";n.d(t,{l:()=>o});var r=n(2263),a=n(6550);function o(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:o}}=(0,r.Z)(),{pathname:i}=(0,a.TH)(),l=o===n?e:e.replace(`/${o}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:a}=e;return`${a?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},6668:(e,t,n)=>{"use strict";n.d(t,{L:()=>a});var r=n(2263);function a(){return(0,r.Z)().siteConfig.themeConfig}},8802:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[a]=e.split(/[#?]/),o="/"===a||a===r?a:(i=a,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(a,o)}},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.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="post-content";var a=n(8802);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(a).default}})},6010:(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;ta});const a=function(){for(var e,t,n=0,a="";n{"use strict";n.d(t,{lX:()=>w,q_:()=>C,ob:()=>p,PP:()=>A,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=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 m=i.join("/");return n&&"/"!==m.substr(-1)&&(m+="/"),m};var l=n(8776);function s(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(l){throw l instanceof URIError?new URIError('Pathname "'+o.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}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 m(){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;rt?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:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t{"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},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||a}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,m=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(m){var a=p(n);a&&a!==m&&e(t,a,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),g=s(n),h=0;h{"use strict";e.exports=function(e,t,n,r,a,o,i,l){if(!e){var s;if(void 0===t)s=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,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},5826:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},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:'
'};function a(e,t,n){return en?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,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(o,{transition:"none",opacity:1}),o.offsetWidth,setTimeout((function(){s(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),l=e?"-100":o(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,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 l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=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)},7418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(a){return!1}}()?Object.assign:function(e,a){for(var o,i,l=function(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}(e),s=1;s{"use strict";n.d(t,{Z:()=>o});var r=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(/=d.reach);S+=E.value.length,E=E.next){var _=E.value;if(t.length>e.length)return;if(!(_ instanceof a)){var x,C=1;if(v){if(!(x=o(k,S,e,b))||x.index>=e.length)break;var T=x.index,A=x.index+x[0].length,L=S;for(L+=E.value.length;T>=L;)L+=(E=E.next).value.length;if(S=L-=E.value.length,E.value instanceof a)continue;for(var R=E;R!==t.tail&&(Ld.reach&&(d.reach=D);var I=E.prev;if(P&&(I=s(t,I,P),S+=P.length),u(t,I,C),E=s(t,I,new a(f,h?r.tokenize(N,h):N,y,N)),O&&s(t,E,O),C>1){var M={cause:f+","+m,reach:D};i(e,t,n,E.prev,S,M),d&&M.reach>d.reach&&(d.reach=M.reach)}}}}}}function l(){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 s(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"+o.content+""},r}(),a=r;r.default=r,a.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\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://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},a.languages.markup.tag.inside["attr-value"].inside.entity=a.languages.markup.entity,a.languages.markup.doctype.inside["internal-subset"].inside=a.languages.markup,a.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(a.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:a.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:a.languages[t]};var o={};o[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},a.languages.insertBefore("markup","cdata",o)}}),Object.defineProperty(a.languages.markup.tag,"addAttribute",{value:function(e,t){a.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:a.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),a.languages.html=a.languages.markup,a.languages.mathml=a.languages.markup,a.languages.svg=a.languages.markup,a.languages.xml=a.languages.extend("markup",{}),a.languages.ssml=a.languages.xml,a.languages.atom=a.languages.xml,a.languages.rss=a.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var a=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],o=r.variable[1].inside,i=0;i]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},a.languages.c=a.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|[?:~]|[-+*/%&|^!=<>]=?/}),a.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),a.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},a.languages.c.string],char:a.languages.c.char,comment:a.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:a.languages.c}}}}),a.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 a.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//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+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//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"])}(a),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(a),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},a={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:a,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:a})}(a),a.languages.javascript=a.languages.extend("clike",{"class-name":[a.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}|\?\?=?|\?\.?|[~:]/}),a.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,a.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:a.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:a.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:a.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:a.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:a.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),a.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:a.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"}}),a.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),a.languages.markup&&(a.languages.markup.tag.addInlined("script","javascript"),a.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")),a.languages.js=a.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(a),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]|[?:-])(?:[ \t]*(?:(?![#:])|:))*/.source.replace(//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<>[ \t]+)?)(?:<>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<>/g,(function(){return r})).replace(/<>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<>[ \t]+)?)<>(?=\s*:\s)/.source.replace(/<>/g,(function(){return r})).replace(/<>/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}(a),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(//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;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__(?:(?!_)|_(?:(?!_))+_)+__\b|\*\*(?:(?!\*)|\*(?:(?!\*))+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)|__(?:(?!_))+__)+_\b|\*(?:(?!\*)|\*\*(?:(?!\*))+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~))+\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(/!?\[(?:(?!\]))+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\]))+\])/.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",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(a),a.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:a.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+/},a.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;n0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n?|<|>)?|>[>=]?|\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 l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var a={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",a),a.tokens=e.tokenize(a.code,a.grammar),e.hooks.run("after-tokenize",a),a.tokens}function u(t){var n={};n["interpolation-punctuation"]=a;var o=e.tokenize(t,n);if(3===o.length){var i=[1,1];i.push.apply(i,s(o[1],e.languages.javascript,"javascript")),o.splice.apply(o,i)}return new e.Token("interpolation",o,r.alias,t)}function c(t,n,r){var a=e.tokenize(t,{interpolation:{pattern:RegExp(o),lookbehind:!0}}),i=0,c={},d=s(a.map((function(e){if("string"==typeof e)return e;for(var n,a=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=a,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var a=f[i],o="string"==typeof r?r:r.content,l=o.indexOf(a);if(-1!==l){++i;var s=o.substring(0,l),d=u(c[a]),p=o.substring(l+a.length),m=[];if(s&&m.push(s),m.push(d),p){var g=[p];e(g),m.push.apply(m,g)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(m)),n+=m.length-1):r.content=m}}else{var h=r.content;Array.isArray(h)?e(h):e([h])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,a=n.length;r]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,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}(a),function(e){function t(e,t){return RegExp(e.replace(//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*)(?:(?:\s*,\s*(?:\*\s*as\s+|\{[^{}]*\}))?|\*\s*as\s+|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+)?(?=\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*)#?/.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*\.{3}(?:[^{}]|)*\})/.source;function o(e,t){return e=e.replace(//g,(function(){return n})).replace(//g,(function(){return r})).replace(//g,(function(){return a})),RegExp(e,t)}a=o(a).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=o(/<\/?(?:[\w.:-]+(?:+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\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(//.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:o(/=/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r0&&n[n.length-1].tagName===i(a.content[0].content[1])&&n.pop():"/>"===a.content[a.content.length-1].content||n.push({tagName:i(a.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===a.type&&"{"===a.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===a.type&&"}"===a.content?n[n.length-1].openedBraces--:o=!0),(o||"string"==typeof a)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(a);r0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}a.content&&"string"!=typeof a.content&&l(a.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(a),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})}(a),a.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},a.languages.go=a.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/}),a.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete a.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,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,l=i.length;-1!==n.code.indexOf(a=t(r,l));)++l;return i[l]=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(l){for(var s=0;s=o.length);s++){var u=l[s];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),m=f.indexOf(p);if(m>-1){++a;var g=f.substring(0,m),h=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),b=f.substring(m+p.length),v=[];g&&v.push.apply(v,i([g])),v.push(h),b&&v.push.apply(v,i([b])),"string"==typeof u?l.splice.apply(l,[s,1].concat(v)):u.content=v}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(a),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(a),a.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},a.languages.webmanifest=a.languages.json,a.languages.less=a.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),a.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),a.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},a.languages.objectivec=a.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 a.languages.objectivec["class-name"],a.languages.objc=a.languages.objectivec,a.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},a.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:/[{}[\];(),.:]/},a.languages.python["string-interpolation"].inside.interpolation.inside.rest=a.languages.python,a.languages.py=a.languages.python,a.languages.reason=a.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/}),a.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 a.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(a),a.languages.scss=a.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),a.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),a.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),a.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),a.languages.scss.atrule.inside.rest=a.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(a),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(a),a.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const o=a},9901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to WebPlatform.org documentation. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (.comment can become .namespace--comment) or replace them with your defined ones (like .editor__comment). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the highlightAll and highlightAllUnder methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(9901),a=n(9642),o=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...o,...Object.keys(Prism.languages)];a(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(6500).resolve(t)],delete Prism.languages[e],n(6500)(t),o.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};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=6726},6500:(e,t,n)=>{var r={"./":2885};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=6500},9642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in a(t,o),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,o.pop()}}return function(e){var t=n[e];return t||(a(e,r),t=n[e]),t}}function a(e){for(var t in e)return!0;return!1}return function(o,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var a in r)if("meta"!=a){var o=r[a];t[a]="string"==typeof o?{title:o}:o}}return t}(o),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var a in n={},e){var o=e[a];t(o&&o.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+a+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+a+" because it is a component.");n[t]=a}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(s),m=c;a(m);){for(var g in f={},m){var h=s[g];t(h&&h.modify,(function(e){e in d&&(f[e]=!0)}))}for(var b in d)if(!(b in c))for(var v in p(b))if(v in c){f[b]=!0;break}for(var y in m=f)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,a){var o=a?a.series:void 0,i=a?a.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var a,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)a=r(e);else{var f=i(c.map((function(e){var t=u(e);return delete s[e],t})));o?a=o(f,(function(){return r(e)})):r(e)}return l[e]=a}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,t,n)}};return w}}();e.exports=t},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 l=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 l.name="Invariant Violation",l}}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(7418),o=n(3840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n