");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}body{counter-reset:katexEqnNo mmlEqnNo}:root{--color-prettylights-syntax-comment:#57606a;--color-prettylights-syntax-constant:#0550ae;--color-prettylights-syntax-entity:#6639ba;--color-prettylights-syntax-storage-modifier-import:#24292f;--color-prettylights-syntax-entity-tag:#116329;--color-prettylights-syntax-keyword:#cf222e;--color-prettylights-syntax-string:#0a3069;--color-prettylights-syntax-variable:#953800;--color-prettylights-syntax-brackethighlighter-unmatched:#82071e;--color-prettylights-syntax-invalid-illegal-text:#f6f8fa;--color-prettylights-syntax-invalid-illegal-bg:#82071e;--color-prettylights-syntax-carriage-return-text:#f6f8fa;--color-prettylights-syntax-carriage-return-bg:#cf222e;--color-prettylights-syntax-string-regexp:#116329;--color-prettylights-syntax-markup-list:#3b2300;--color-prettylights-syntax-markup-heading:#0550ae;--color-prettylights-syntax-markup-italic:#24292f;--color-prettylights-syntax-markup-bold:#24292f;--color-prettylights-syntax-markup-deleted-text:#82071e;--color-prettylights-syntax-markup-deleted-bg:#ffebe9;--color-prettylights-syntax-markup-inserted-text:#116329;--color-prettylights-syntax-markup-inserted-bg:#dafbe1;--color-prettylights-syntax-markup-changed-text:#953800;--color-prettylights-syntax-markup-changed-bg:#ffd8b5;--color-prettylights-syntax-markup-ignored-text:#eaeef2;--color-prettylights-syntax-markup-ignored-bg:#0550ae;--color-prettylights-syntax-meta-diff-range:#8250df;--color-prettylights-syntax-brackethighlighter-angle:#57606a;--color-prettylights-syntax-sublimelinter-gutter-mark:#8c959f;--color-prettylights-syntax-constant-other-reference-link:#0a3069}.pl-en{color:var(--color-prettylights-syntax-entity)}.pl-k{color:var(--color-prettylights-syntax-keyword)}.pl-pds,.pl-s{color:var(--color-prettylights-syntax-string)}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}body,html{position:absolute;inset:0;overflow:hidden}body,h1,html,p,ul{padding:0;margin:0}html{font-size:16px}@media screen and (min-width:58em){html{font-size:24px}}a{color:inherit;text-decoration:inherit}*{box-sizing:border-box}body{position:absolute;inset:0;display:grid;grid-template-rows:auto 1fr;overflow:hidden}._container_1th49_55{font-family:"Exo 2 Variable",sans-serif;display:flex;flex-direction:column;font-size:1rem;overflow:auto;position:relative}._footer_1th49_64{flex:0 0 auto;color:#fff;background-color:#3f51b5;text-align:center;padding:.2rem .2rem .3rem;position:relative;user-select:none}._footer_1th49_64 ._icons_1th49_74{display:none}@media screen and (min-width:38em){._footer_1th49_64 ._icons_1th49_74{display:flex;gap:.3em;position:absolute;left:3rem;bottom:.25rem;text-align:left}}@media screen and (min-width:58em){._footer_1th49_64{font-size:.8rem}}._footer_1th49_64 a{color:#fff;text-decoration:none}@media (hover:hover){._footer_1th49_64 a:hover{color:#ffba67}}._main_1th49_102{flex:1 0 auto;color:#303030;max-width:100em;margin:1rem}@media screen and (min-width:38em){._main_1th49_102{margin:2rem 3rem}}._main_1th49_102>h1:first-child{margin-top:-2rem;padding-top:2rem}._main_1th49_102 h1{font-size:2.25rem;padding-top:1.5rem;padding-bottom:.75rem;font-weight:400}._main_1th49_102 h1{text-align:center}@media screen and (min-width:38em){._main_1th49_102 h1{text-align:left}}._main_1th49_102 p{text-align:justify;hyphens:auto;margin-bottom:.5em}._main_1th49_102 .highlight{margin-block-end:.75em}._main_1th49_102 .highlight .highlight-header{display:none}._main_1th49_102 .highlight pre{border:1px solid #606060;margin:0;white-space:pre-wrap;user-select:contain}._main_1th49_102 .highlight pre>code{font-family:Roboto Mono Variable,monospace;line-height:1.3em;tab-size:2}._main_1th49_102 .highlight pre:not(.one-line)>code{display:table}._main_1th49_102 .highlight pre:not(.one-line)>code .line{display:table-row}._main_1th49_102 .highlight pre:not(.one-line)>code .line .line-number{border-inline-start:2px solid #F0F0F0;display:table-cell;user-select:none;height:100%;padding-inline-start:1em;padding-inline-end:.5em;color:var(--color-prettylights-syntax-sublimelinter-gutter-mark);background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text{display:table-cell;width:100%;padding-inline:.5em;overflow-wrap:anywhere}._main_1th49_102 .highlight pre:not(.one-line)>code .line .text .indent{white-space:pre}@media (hover:hover){._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover{background-color:#f0f0f0}._main_1th49_102 .highlight pre:not(.one-line)>code .line:hover .line-number{color:#000;border-inline-start:2px solid #606060;background-color:#e0e0e0}}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-ext-wght-normal.9_1vLTtc.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Cinzel Variable;font-style:normal;font-display:swap;font-weight:400 900;src:url(/_astro/cinzel-latin-wght-normal.DS2jhxdi.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-normal.B5xQCqZ8.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-normal.Cho_hbqG.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-normal.BNOz-EOU.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-normal.OsFGN4qS.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-normal.DllOx71z.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-ext-wght-italic.DWfNeZM3.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C88,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-cyrillic-wght-italic.U6Mqfn83.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-vietnamese-wght-italic.CCZ786PG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-ext-wght-italic.0wO9IMfB.woff2) format("woff2-variations");unicode-range:U+0100-02AF,U+0304,U+0308,U+0329,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Exo 2 Variable";font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/exo-2-latin-wght-italic.CbsmNhw9.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Academicons;font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAARgAAwAAAAABtAAAAQTAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAATAgEEQgKhyiGAAsMAAE2AiQDFAQgBYFmByAbSwXILgpsY9rgDQcEHWs2s/qWB5G3hYd4gF/337mDv7Mmq5SQYCUyOQJM66q076e8zze7nvzvwaoEF/QtaZ1pHVTmbeFjAerk9PqlZZh6gEkUWZRoWqvUNJIDJxxJYLkEGFEEx5tt8lLQ2F/Afvqjv0iCudCPSXlcs5NqRS3Wvjo2lmsFqU9QKah3rN0RQXy3dpCE2yEhJQwKU4C+jv+tvBVFJI3BccV837Ap45LgBnN5EzZ3S5NwDboBYdqp5k+JYpRKachhot03CshEou9zWcTz729yOeqFZWKLWA/W5SxYPPQiYdXuEUhBAZQg9AFhDoCFiIjli1ekbaSiDktG7ZnX2Io2jppe5Ho9OJfSeaFotyQkneoEj6qvy6TjPJ1oRMMqmz8XLTF4aGdj02bepapSmfEamTss1Bxh6tyO2oaNdCWjgpvhFAsVVIclpZZPIoWb88RB+UADk7Wr1lcuqVhXtXQeKgC7yhhY7XgAltQ/KO0ahLGnkNL5UH9SVO+QdWEqxjpv6k6A/Ts0jFXDQEiR0NSdsDNQsGQPXkJoOLoRlpy+cAar+0h1E1IO88MTMp5rWL3WRDi0YK2KXbfpe/ZQtncv1XlwGSl9FJaqTiFl26FxzNjBg9Jz+dBBWFJP0/ZgjCTx3nDsetPc0K9qsl55GCmnLmEMBdfv5+EPGHbec1SL1mD9yqRIKC0Qoc8LB15H86cse1Tz3qRu2jhsWEWzuGDpVjUmNBQXjR58ZUb8o7WppRuX5Cw+fmxQVOveeeOSIpbMT17RIXy3x+6VS8oSxpbWPxkVj2rrO3Uog8LPRabMYTu50W7dXG4pUnb9ErK1CWljKyrKA8tEec3DLWvoFa+detZkYuoZnfCkRW3aF7UMdlT9Ux6Vqt28ebuMDl0y2oW0bJc+e9zLXNnwjyj0tl7rYOyomf5LPduO9kw8RtfyXIp9nCshsLCU/XjTrzO2pt1LNpiPi5WZ3becWLdvHH6vKLv+PL/9RlEMivOtdqClZzx/aW5Vl+m/qp9meUXPHvJx2L4s+GeFNS3Iu36Hvn1au4LjI4jz7FEXmUpcu4+4oHc0YNXcVq3npfyYV6b9xnZ048nn3/uRiodVHhb5tCb6ZJcdl52XP1z5Xcpu/MOfdlPr0wPe6QaonbsdGl2EgPBlyp3v3SfW3ulrVtAD4J17bwR8Hh35/3/uVhToCpCZigPh2kdFY2gGgHuzwRpSVxUPt9SOyIIMpfIbCEiTZOUAEYKAbroD8pnAU0j8AdRKUMZ8JVLENCU2SMh8Mq+kKkHzxi6bL1mBQuly5WipuSbaa6KVavr0aVEeFUiVDEmLcdDMWh1U012ieEmSZUuXaKVVCEbNNdYmhi00e5aWRkiWqliWeAW7TE9OK/dOeQ==) format("woff2")}.ai{font-family:Academicons;font-weight:400;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.ai-doi:before{content:""}.ai-google-scholar:before{content:""}.ai-orcid:before{content:""}:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAANoAAoAAAAABkQAAAMeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAAPAqFGIQPCwgAATYCJAMMBCAFgzQHIBsEBciOw3R7I9skyZdJ181/Hk//3JdkcCamg9x1IL/kth+wy8O38/2rIsi7y7M4n/EApz6wYKCbuKa+VgBVLwBHOtGmKp7A9GkBVkCjPP+nra0LhzNvtUsiNtEneiTJWfRrBfDxlKZAANrUCkCajfzGxgiAERIMN7EH5FdRDg5+nPVxDp3VbAPoRRaA2B6LNgKQAAADcABzHAIlzxOgVSSMLmk0IN2M2xi3BqkQR6YF0KV5AOAXGjwZiM7UBVt0HVorQTGUhhRfTTbXS5X6N/K2e6+2BTje6ruORMvcdjvPsduXcapERQt81kRs89rhMzdyhcdKz7IZeuNIrT/ewn2GhdJKbakyj5gBpb6aVHpVV4uJtOya/FDJMsuhBO9xrkvdl9sOtVTt76G2UNqs0h9vNcdqe/Tu0qFWaiuV7Wy7FW7LLIbSCv3xbpO92mKW9UxzpYUSc61Xkmu5Kh2GYAhmeNxQHCm7nnQ483Rp+c2M5ZAei4sh+dXTHlpaAJDWFDJFkq/ct54qkNo3Gmai/5g+ff4QPePDae3bazFkPfs9DW50HtBBztkZ6J+7t/Hhg/BHR/knZ+ueY1kwx2vxjBfYEyZPZFxiU25K5Jkg5+SD2pFCAfwXtUXx9yDbxsSA17eyYmQSGtaTDRyww6S0BTh6ZJGtheW2iF2bOEYp5tXZeyxEcazpwAmmwE2Z9JJO7Pj2ffNYUXTb06GDufF3Qa0+9Ju5ORgKBiZZNg8uoFhKtRw8KQXTy0VnZzG4mcpWMJlEJBeZqUuwjMnEfaKZs/QOFxkAAARcESA/s4Q649hvOvoMAPA46MTIskTzRbONTaGzAHQwIvCdCXZvgA8BtfxXIoZAC6Af4LicB49OBKDjRdoqcSjrAggN9yGQaG8Fxsh9gZNqZjW/FwTNQm+lJRSQqrNOepDrrUV3nXXUIlySbhp00jyTfgqZ1nrq4NhNqRbddNcWdyFJhAgh/AUKEiVMiCDBwkg8vetJuVHSyyEanZlw/sLaDebFNIaTHvMlVfvBuqyU3yyFzrroq5u2WmvDD89TEy+SpjjVn+awAQA=) format("woff2")}.fab{font-weight:400}.fa-github:before{content:""}.fa-twitter:before{content:""}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(data:font/woff2;base64,d09GMgABAAAAAAIwAAoAAAAABHAAAAHkAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAANAqBXIFhCwYAATYCJAMIBCAFgygHIBu+A8guChxjeQqOf8lQWNbs+FB2huakKB7+fy29byDwJ0QFQgWIjmyFTKoYHKHwXVkg1dqcCsV6/f+f2935S+HFGabNT9fqc+vQiMRA81BpIBNuMScQOP35j4+bxQDbUzf1Sef5g0aa0Bo0li1L6C9aYMsk8NLASjdhus2vHYH4FWSIGKlH0ApFfItrSmJbnAIb6Vv/G+FMpswB6AAAq7d3u/svv8S7esQ7m0BArIw3GA/IkKMHE+jBGw8KheCXusa1L8NBAFLAcwAcA30k5F2jpx9PVbrTl8fd/ir2h7jVs69K1fNZr0dFnOk7EHdSiifTXwxkcX/GyykHnggRIqjixEk3UYoMSSWDp2s8O9xG2/Ala+s73bfzNPOgszN90nPFr+dKJqSePBhEEcCpmeV4dRQKanLUfTMgyMvSrv8xbdu+7H9TlYGfCx6XsbC+srPxDk0yEPzZzYYc8IDAe2YxRNQQyBr/agWBEACg0RFMFM1YnJGLhqX+NNPmO82tcWsWPi2dUD9/g/lgA58nMZJTxXwuVddcRKWqWFDpUo69yIYqEjP5PKSnp6WqrmGgo6WhqYMItV2EPskKrCFgV1VnapMYSbvoKSFqVuJVs46qP5vwBUoRk86QIIIjEcFnWKy+EQAAAAA=) format("woff2")}.far{font-weight:400}:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(data:font/woff2;base64,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) format("woff2")}.fa{font-family:var(--fa-style-family, "Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fab,.far{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.far{font-family:"Font Awesome 6 Free"}.fab{font-family:"Font Awesome 6 Brands"}.fa-4x{font-size:4em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-spin{animation-name:fa-spin;animation-delay:var(--fa-animation-delay, 0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration, 2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}@media (prefers-reduced-motion:reduce){.fa-spin{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.fa-copy:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-bars:before{content:""}.fa-circle-notch:before{content:""}.fa-code-branch:before{content:""}.fa-download:before{content:""}.fa-file-pdf:before{content:""}.fa-list:before{content:""}._header_opib5_1{font-family:Cinzel Variable,serif;font-size:1.25rem;position:relative;color:#fff;background-color:#3f51b5;padding-inline:2.4rem;padding-block-start:.3rem}@media screen and (min-width:38em){._header_opib5_1{padding-inline:3rem;font-size:1.1rem}}._header_opib5_1 ._toggle_opib5_16{font-size:1.5rem;position:absolute;left:.3em;top:.3em;cursor:pointer}@media (hover:hover){._header_opib5_1 ._toggle_opib5_16 :hover{color:#ffba67}}@media screen and (min-width:38em){._header_opib5_1 ._toggle_opib5_16{display:none}}._header_opib5_1>ul{list-style:none;display:flex;flex-direction:column;align-items:center;gap:.2rem}@media screen and (min-width:38em){._header_opib5_1>ul{flex-direction:row;align-items:stretch;gap:1em}}._header_opib5_1>ul>li a{display:flex;align-items:center;height:100%;color:#fff;border-bottom:.2rem solid transparent}@media (hover:hover){._header_opib5_1>ul>li a:hover{color:#ffba67;border-bottom-color:#ffba67}}._header_opib5_1>ul>li:not(:first-child) a{padding-bottom:.2em}@media screen and (min-width:38em){._header_opib5_1>ul>li:not(:first-child) a{padding:0}}._header_opib5_1 ._site-name_opib5_68{position:relative;font-size:1.5rem;font-weight:700;line-height:1.5em}@media not screen and (min-width:38em){._header_opib5_1:not(._open_opib5_75)>ul>li:not(:first-child){display:none}}._bibtex_vg9s2_1{display:none;float:right;margin-left:1rem;background-color:#f0f0f0;font-size:.8rem;max-width:min(25em,40vw);position:relative}@media screen and (min-width:38em){._bibtex_vg9s2_1{display:block}}._bibtex_vg9s2_1 ._commands_vg9s2_15{position:absolute;right:0;top:0}._bibtex_vg9s2_1 ._commands_vg9s2_15 ._copy_vg9s2_20{display:inline-block;padding-block-start:.2em;padding-block-end:.3em;padding-inline:.3em;background-color:#fff;border:1px solid #606060;cursor:pointer}._bibtex_vg9s2_1 .highlight{margin:0!important}._bibtex_vg9s2_1 .highlight pre{border:0 none transparent!important;white-space:pre!important;padding-block-start:.2rem;padding-block-end:.4rem;overflow-x:scroll}._bibtex_vg9s2_1 .highlight pre .line-number{display:none!important}._links_11h5g_1{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:baseline;align-content:flex-start;font-size:1rem;column-gap:.3rem;row-gap:.2rem;padding-bottom:.75rem}._links_11h5g_1>a{border:1px solid #606060;padding-inline:.4em;padding-block:.2em}@media screen and (min-width:38em){._links_11h5g_1>a{padding-inline:.2em;padding-block:0}}._links_11h5g_1>a:hover{background-color:#f0f0f0}:root{--react-pdf-annotation-layer:1;--annotation-unfocused-field-background:url("data:image/svg+xml;charset=UTF-8,");--input-focus-border-color:Highlight;--input-focus-outline:1px solid Canvas;--input-unfocused-border-color:transparent;--input-disabled-border-color:transparent;--input-hover-border-color:black;--link-outline:none}@media screen and (forced-colors:active){:root{--input-focus-border-color:CanvasText;--input-unfocused-border-color:ActiveText;--input-disabled-border-color:GrayText;--input-hover-border-color:Highlight;--link-outline:1.5px solid LinkText}}:root{--react-pdf-text-layer:1;--highlight-bg-color:rgba(180, 0, 170, 1);--highlight-selected-bg-color:rgba(0, 100, 0, 1)}@media screen and (forced-colors:active){:root{--highlight-bg-color:Highlight;--highlight-selected-bg-color:ButtonText}}._wrapper_4ijce_1{background-color:#3f51b5;border:1px solid #3f51b5;clear:both}._menubar_4ijce_7{position:sticky;top:-1px;z-index:10;padding-block-start:.2em;padding-block-end:.2em;background-color:#3f51b5;color:#f0f0f0;user-select:none}._menubar_4ijce_7 ._central_4ijce_17{display:flex;gap:.2em;justify-content:center;align-items:baseline;font-variant-numeric:lining-nums tabular-nums}._menubar_4ijce_7 ._left_4ijce_24{position:absolute;left:0;top:.25em;padding-left:.2em}._menubar_4ijce_7 ._right_4ijce_30{position:absolute;right:0;top:.25em;padding-right:.4em}._menubar_4ijce_7 ._page-viewer-container_4ijce_36{display:inline-flex;align-items:stretch;gap:.2em}._menubar_4ijce_7 ._page-viewer_4ijce_36{border:1px solid #f0f0f0;display:inline-block;padding-inline:.2em;padding-block-end:.1em;min-width:1ch;text-align:center;user-select:all}._menubar_4ijce_7 ._page-viewer_4ijce_36:focus{border-color:#ffba67;color:#ffba67;caret-color:#fff}@media (hover:hover){._menubar_4ijce_7 a:hover{color:#ffba67}}._menubar_4ijce_7 button{border:0 solid transparent;background-color:transparent;color:gray;font-size:1rem}._menubar_4ijce_7 button:not([disabled]){color:#f0f0f0;cursor:pointer}@media (hover:hover){._menubar_4ijce_7 button:not([disabled]):hover{color:#ffba67}}._loader_4ijce_76{text-align:center;background-color:#fff;color:gray}._loader_4ijce_76>span{display:inline-block;position:sticky;top:1.5rem;padding-top:2rem}astro-island{display:contents}
@inproceedings{krudeDeterminationThroughputGuarantees2021,
author = {Krude, Johannes and Rüth, Jan and Schemmel, Daniel and Rath, Felix and Folbort, Iohannes-Heorh and Wehrle, Klaus},
title = {Determination of {{Throughput}} {{Guarantees}} for {{Processor-based}} {{SmartNICs}}},
booktitle = {17th {{International}} {{Conference}} on emerging {{Networking}} {{EXperiments}} and {{Technologies}} {{(CoNEXT}} 2021)},
location = {Virtual Event, Germany},
pages = {267--281},
year = {2021},
doi = {10.1145/3485983.3494842},
}
Programmable network devices are on the rise with many applications ranging from improved network management to accelerating and offloading parts of distributed systems. Processor-based SmartNICs, match-action-based switches, and FPGA devices offer on-path programmability. Whereas processor-based SmartNICs are much easier and more versatile to program, they have the huge disadvantage that the resulting throughput may vary strongly and is not easily predictable even to the programmer. We want to close this gap by presenting a methodology which, given a SmartNIC program, determines the achievable throughput of this SmartNIC program in terms of achievable packet rate and bit rate. Our approach combines incremental longest path search with SMT checks to establish a lower bound for the slowest satisfiable program path. By analyzing only the slowest program paths, our approach estimates throughput bounds within a few seconds. The evaluation with our prototype on real programs shows that the estimated throughput guarantees are correct with an error of at most 1.7% and provide a tight lower bound for processor- and memory-bottlenecked programs with only 8.5% and 18.2% underestimation.