Merge pull request #949 from tdurieux/fix/ui-followups

fix(ui): header wrapping, preview file strip, clipped Create button and paid auto-update
This commit is contained in:
Thomas Durieux authored and GitHub committed 2026-11-13 05:06:37 +01:00
commit ed07ecde73
7 files changed
+335 -201

No files matched your search

+2 -2
View File
@@ -1,8 +1,8 @@
{
"core.min.js": "core.d23af1c652.min.js",
"vendor.min.js": "vendor.ad23251845.min.js",
"vendor.min.js": "vendor.64141223b7.min.js",
"mermaid.min.js": "mermaid.a7356d5ed1.min.js",
"all.min.css": "all.b752450906.min.css",
"all.min.css": "all.53fcd1a96b.min.css",
"markdown.min.js": "markdown.6c8dfb7b1d.min.js",
"pdf.min.js": "pdf.4d9cc6ff49.min.js",
"notebook.min.js": "notebook.c3144c18ae.min.js",
+1 -1
View File
@@ -6,4 +6,4 @@
*/:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus:not(:focus-visible){outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]){color:inherit;text-decoration:none}a:not([href]):hover{color:inherit;text-decoration:none}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unsLine truncated
* Font Awesome Free 5.15.4 by @fontawesome - https://fontawesome.com
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
*/.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{contentLine truncated
*/.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{contentLine truncated
+181 -126
View File
@@ -8356,26 +8356,8 @@ body.dark-mode .preserve-dialog { background: #242320; color: #faf9f6; }
.reviewer-preview pre, .reviewer-preview .markdown-body pre, .reviewer-preview .pr-diff pre, .reviewer-preview .pr-diff table { max-width: 100%; }
.reviewer-preview pre { overflow-x: hidden !important; white-space: pre-wrap !important; overflow-wrap: anywhere !important; word-break: normal !important; }
.reviewer-preview pre code, .reviewer-preview pre code span { white-space: pre-wrap !important; overflow-wrap: anywhere !important; word-break: normal !important; }
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree .anonymize-preview-body {
padding-left: 32px !important;
padding-right: 32px !important;
max-width: none;
}
}
@media (min-width: 768px) {
/* Each paragraph, list, heading or code block sits wholly beside the rail or wholly below it (none changes width
mid-way); wrapper divs are not boxed, so the blocks after the rail use the full width. */
.reviewer-preview .rp-body.has-tree .anonymize-preview-body li > :is(p, ul, ol) { display: block; }
}
.reviewer-preview pre code .code-line { display: inline-block; width: 100%; box-sizing: border-box; padding-left: var(--hang, 4ch); text-indent: calc(-1 * var(--hang, 4ch)); vertical-align: top; }
.reviewer-preview pre code .md-diff-line { padding-left: calc(var(--diff-pad) + var(--hang, 4ch)); text-indent: calc(-1 * var(--hang, 4ch)); vertical-align: top; }
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree > .rp-tree .rp-tree-row.rp-skel-row { width: 120px; }
}
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree .anonymize-preview-body :is(p, ul, ol, dl, h1, h2, h3, h4, h5, h6, blockquote, hr) { display: revert; }
}
.reviewer-preview pre, .reviewer-preview pre code { font-family: var(--font-mono) !important; font-size: 12px !important; line-height: 20px !important; }
.reviewer-preview pre code { display: block; }
.dark-mode .reviewer-preview pre code .md-diff-line.is-add { background: #1E2A20; }
@@ -10013,16 +9995,6 @@ pre { --diff-pad: 15px; }
}
.repo-picker-list::-webkit-scrollbar-track { background: transparent; }
.repo-picker-list::-webkit-scrollbar-thumb { background: var(--scroll-thumb, #CFC7B9); border-radius: 3px; }
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree .rp-file-head {
margin-left: 0;
position: relative;
padding-left: 32px !important;
padding-right: 32px !important;
border-top: 1px solid var(--rp-line);
border-bottom: 1px solid var(--rp-line);
}
}
.anonymize-page .source-url-label-row .repo-access-switch::before { content: none !important; display: none !important; }
.dark-mode .anonymize-page .source-url-label-row .repo-access-switch { background: var(--canvas-bg-color) !important; }
/* Admin: numerals in Inter, readable small labels, honest colours */
@@ -13668,26 +13640,6 @@ input[type="date"].form-control { font-family: var(--font-sans) !important; font
.reviewer-preview .rp-bar-id { padding-left: 12px; border-left: 1px solid var(--rp-line); font: 500 12px/1 var(--font-mono, ui-monospace, monospace); color: var(--color); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.reviewer-preview .rp-bar-kind { margin-left: auto; font-size: 12px; color: var(--ink-muted); }
.reviewer-preview .rp-body { flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(0,1fr); }
.reviewer-preview .rp-body.has-tree { grid-template-columns: 188px minmax(0,1fr); }
.reviewer-preview .rp-tree {
min-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
gap: 2px;
padding: 10px 8px;
background: var(--rp-tree);
align-self: start;
padding-bottom: 56px !important;
border-right: 0 !important;
-webkit-mask-image: linear-gradient(to bottom, #000 calc(100% - 48px), transparent);
mask-image: linear-gradient(to bottom, #000 calc(100% - 48px), transparent);
box-shadow: inset -1px 0 0 var(--rp-line);
}
.reviewer-preview .rp-tree-row { display: flex; align-items: center; gap: 7px; height: 26px; padding: 0 8px; border-radius: 4px; font-size: 13px; color: var(--color); white-space: nowrap; min-width: 0; }
.reviewer-preview .rp-tree-icon { width: 14px; height: 14px; flex: none; fill: none; stroke: var(--ink-muted); stroke-width: 1.2; }
.reviewer-preview .rp-tree-name { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.reviewer-preview .rp-tree-row.is-active { background: var(--hover-bg-color, #EDEAE4); box-shadow: inset 2px 0 0 var(--accent); font-weight: 500; }
.reviewer-preview .rp-doc { min-height: 0; min-width: 0; overflow: auto; scrollbar-width: thin; position: relative; }
.reviewer-preview .rp-file-head { position: sticky; top: 0; z-index: 1; display: flex; align-items: baseline; gap: 10px; padding: 10px 24px; background: var(--rp-window); border-bottom: 1px solid var(--rp-line); font-size: 13px; }
.reviewer-preview .rp-file-name { font-weight: 600; color: var(--color); }
@@ -13725,14 +13677,11 @@ input[type="date"].form-control { font-family: var(--font-sans) !important; font
.reviewer-preview .rp-window { margin: 0; border: 1px solid var(--rp-line); border-radius: 10px; min-height: 64vh; }
.reviewer-preview .rp-chrome { height: 30px; }
.reviewer-preview .rp-url { font-size: 11px; margin-left: 6px; }
.reviewer-preview .rp-body.has-tree { grid-template-columns: minmax(0,1fr); }
.reviewer-preview .rp-tree { display: none; }
.reviewer-preview .rp-file-head { padding: 9px 16px; }
.reviewer-preview .rp-file-head { padding: 9px 16px; }
.anonymize-page .reviewer-preview .anonymize-preview-body { padding: 18px 16px 28px !important; }
.reviewer-preview .rp-state { padding: 20px 16px; }
.reviewer-preview .rp-error, .reviewer-preview .rp-empty { margin: 16px; }
}
.reviewer-preview .rp-tree-note { margin: 10px 8px 0; font-size: 12px; line-height: 1.5; color: var(--ink-muted); white-space: normal; }
.anonymize-page .submit-reason { margin: 8px 0 0; font-size: 12.5px; line-height: 1.45; color: var(--ink-muted); text-align: center; }
/* ----- File viewer ----- */
@@ -14004,34 +13953,6 @@ pre code mark.redact-chip,
.file-card-head .file-card-path > .breadcrumb { overflow: hidden; }
.file-card-head .file-card-path > .copy-path-btn { display: none !important; }
}
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree {
display: grid !important;
grid-template-columns: 188px minmax(0, 1fr);
align-items: start;
overflow: auto;
scrollbar-width: thin;
}
.reviewer-preview .rp-body.has-tree>.rp-tree {
box-sizing: border-box;
padding: 10px 8px 14px !important;
-webkit-mask-image: none !important;
mask-image: none !important;
box-shadow: none !important;
border-right: 1px solid var(--rp-line) !important;
border-bottom: 1px solid var(--rp-line) !important;
border-bottom-right-radius: 10px;
float: none;
position: sticky;
top: 0;
align-self: start;
width: auto;
margin: 0 !important;
z-index: 2;
}
.reviewer-preview .rp-body.has-tree>.rp-doc { min-height: 0; overflow: visible !important; min-width: 0; margin-top: 0 !important; }
.reviewer-preview .rp-body.has-tree .rp-state { margin-left: 0 !important; padding-left: 0 !important; }
}
.anonymize-page .source-url-label-row { display: flex !important; flex-direction: row !important; align-items: center !important; justify-content: space-between !important; flex-wrap: nowrap !important; gap: 12px !important; min-height: 32px; margin-bottom: 8px !important; }
.anonymize-page .source-url-label-row > .repo-access { display: flex !important; justify-content: flex-end !important; margin: 0 0 0 auto !important; padding: 0 !important; border: 0 !important; background: none !important; flex: none !important; width: auto !important; order: 0 !important; }
.anonymize-page .source-url-label-row .repo-access-switch { display: inline-flex !important; align-items: center; gap: 0 !important; padding: 2px !important; border: 1px solid var(--border-color) !important; border-radius: 7px !important; background: var(--paper-bg-alt) !important; width: auto !important; flex: none !important; max-width: none !important; margin: 0 !important; }
@@ -14059,10 +13980,6 @@ pre code mark.redact-chip,
@media (min-width: 768px) {
.admin-page .paper-table.paper-table-repos .anon-sub:has(.meta-sep) > :first-child { flex: 0 1 auto !important; min-width: 6ch !important; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
}
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree .anonymize-preview-body :is(p, ul, ol, dl, h1, h2, h3, h4, h5, h6, pre, blockquote, hr, .highlight) { display: revert; }
.reviewer-preview .rp-body.has-tree .anonymize-preview-body :is(pre,.highlight) { display: block; }
}
.reviewer-preview .diff-file-table .diff-code { padding-left: calc(12px + var(--hang, 4ch)); text-indent: calc(-1 * var(--hang, 4ch)); }
.explorer-content notebook .nb-code-scroll { position: relative; }
.explorer-content notebook .nb-code-scroll.is-overflowing::before { content: ""; position: absolute; z-index: 1; bottom: 5px; left: calc(8px + var(--thumb-x, 0px)); width: var(--thumb-w, 40px); height: 3px; border-radius: 2px; background: var(--ink-faint, #b9b2a6); opacity: .8; pointer-events: none; }
@@ -14113,43 +14030,6 @@ pre code mark.redact-chip,
@media (max-width: 767px) {
.anonymize-page .source-url-label-row .repo-access-switch.repo-access-switch { padding: 3px !important; border-radius: 8px !important; height: 36px; box-sizing: border-box; }
}
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree.has-tree { display: block !important; overflow: auto; scrollbar-width: thin; }
.reviewer-preview .rp-body.has-tree>.rp-tree.rp-tree {
position: static !important;
float: none;
display: flex !important;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
box-sizing: border-box;
margin: 0 !important;
overflow: visible;
background: var(--rp-tree);
-webkit-mask-image: none !important;
mask-image: none !important;
box-shadow: none !important;
width: 100% !important;
max-width: none;
padding: 7px 32px 7px 24px !important;
gap: 2px 4px;
border: 0 !important;
border-bottom: 1px solid var(--rp-line) !important;
border-radius: 0 !important;
padding-left: 32px !important;
}
.reviewer-preview .rp-body.has-tree > .rp-tree .rp-tree-row { flex: 0 0 auto; max-width: 220px; }
.reviewer-preview .rp-body.has-tree>.rp-tree .rp-tree-note {
flex: 0 1 auto;
line-height: 1.45;
margin: 0 0 0 auto !important;
padding-left: 16px;
max-width: 480px;
font-size: 12px !important;
text-align: right;
color: var(--ink-muted) !important;
}
}
.reviewer-preview pre code :is(.md-diff-line, .code-line) { line-height: 20px !important; vertical-align: top; margin-top: 0; margin-bottom: 0; border: 0; box-shadow: none; outline: 0; }
.status-dot.status-dot:is(.st-expiring, .st-removing, .status-expiring, .status-removing) { background: linear-gradient(90deg, var(--st-off) 50%, transparent 50%) !important; box-shadow: inset 0 0 0 1.5px var(--st-off) !important; }
.errors-page .errors-group-count { margin-left: 6px; }
@@ -14157,9 +14037,6 @@ pre code mark.redact-chip,
@media (min-width: 768px) {
.admin-page .paper-table-repos .cell-status .status-sub { display: -webkit-box !important; -webkit-box-orient: vertical; -webkit-line-clamp: 2; white-space: normal !important; overflow: hidden; text-overflow: clip; }
}
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-tree > .rp-tree + .rp-doc .rp-file-head { border-top: 0 !important; }
}
@media (min-width: 768px) {
.admin-page.admin-page .paper-table.paper-table-repos .anon-sub.anon-sub > * { flex: 0 0 auto !important; min-width: 0 !important; max-width: 100% !important; overflow: visible; text-overflow: clip; }
.paper-table-repos .src-path .src-owner { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -14172,8 +14049,6 @@ pre code mark.redact-chip,
@media (min-width: 768px) {
.dashboard-page .paper-table.paper-table-dashboard .paper-table-row.repo-error { padding-left: 12px !important; box-shadow: inset 3px 0 0 var(--status-error) !important; border-left: 0 !important; }
}
.reviewer-preview .rp-tree-label { display: inline-flex; align-items: center; gap: 6px; margin: 0; padding: 3px 0; font-size: 12px; font-weight: 500; line-height: 18px; color: var(--ink-muted); white-space: nowrap; }
.reviewer-preview .rp-tree-label .rp-tree-icon { width: 14px; height: 14px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.2; }
.admin-page.admin-page .paper-table .cell-anon .anon-sub.anon-meta { display: flex !important; flex-wrap: nowrap; align-items: center; min-width: 0; max-width: 100%; height: auto !important; overflow: hidden; margin-left: 0 !important; gap: 0 !important; line-height: 18px; }
/* ----- Admin ----- */
@@ -14184,3 +14059,183 @@ pre code mark.redact-chip,
body.dark-mode .errors-page .seg-info,
body.dark-mode .errors-page .dot-info,
body.dark-mode .errors-page .sev-dot.sev-info { background: var(--ink-faint) !important; }
/* ===== Follow-ups after the redesign ===== */
/* F1. One tab indicator for every tab bar. The selected tab gets a straight 2px
accent line, as wide as its label, drawn over the bar's 1px bottom rule.
Tabs carry no horizontal padding (or set --tab-inset), so the line matches the
label; bars with equal-width tabs put the line on an inner .tab-label. Hover
only changes the label colour. */
.admin-nav a,
.settings-nav button,
.dashboard-view-tabs button,
.paper-tabs .paper-tab,
.errors-page .detail-tabs button,
.anonymize-mobile-tabs .tab-label,
.paper-feature-tab .paper-eyebrow { position: relative; }
.admin-nav a, .admin-nav a:hover, .admin-nav a.active, .admin-nav a.router-link-active,
.settings-nav button, .settings-nav button[aria-current="page"],
.dashboard-view-tabs button, .dashboard-view-tabs button[aria-pressed="true"],
.paper-tabs .paper-tab, .paper-tabs .paper-tab.active,
.errors-page .detail-tabs button, .errors-page .detail-tabs button.active,
.anonymize-mobile-tabs button, .anonymize-mobile-tabs button[aria-selected="true"] {
box-shadow: none !important;
border-bottom-color: transparent !important;
border-radius: 0 !important;
background: transparent !important;
}
.admin-nav a.active::after, .admin-nav a.router-link-active::after,
.settings-nav button[aria-current="page"]::after,
.dashboard-view-tabs button[aria-pressed="true"]::after,
.paper-tabs .paper-tab.active::after,
.errors-page .detail-tabs button.active::after,
.anonymize-mobile-tabs button[aria-selected="true"] .tab-label::after {
content: "";
position: absolute;
left: var(--tab-inset, 0);
right: var(--tab-inset, 0);
bottom: var(--tab-drop, -1px);
height: 2px;
border-radius: 0;
background: var(--accent);
pointer-events: none;
}
.admin-nav a:hover, .settings-nav button:hover, .dashboard-view-tabs button:hover,
.paper-tabs .paper-tab:hover, .errors-page .detail-tabs button:hover,
.anonymize-mobile-tabs button:hover { color: var(--color) !important; }
.admin-nav a.active, .admin-nav a.router-link-active { color: var(--color) !important; }
.admin-nav a.active .ui-icon, .admin-nav a.router-link-active .ui-icon { color: var(--accent); }
/* Admin: the tabs sit on the rule (no 8px gap under the labels). */
.admin-page .admin-nav { padding-bottom: 0 !important; align-items: stretch; }
.admin-page .admin-nav a { padding-top: 8px !important; padding-bottom: 10px !important; }
/* Tabs whose bar has its own 1px rule under them: the tab overlaps it. */
.paper-tabs .paper-tab { margin-bottom: 0; --tab-inset: 16px; }
.errors-page .detail-tabs button { --tab-inset: 12px; }
/* The dashboard and conference tabs keep a 2px transparent border. */
.dashboard-view-tabs button { --tab-drop: -2px; }
/* Workspace phone tabs: equal halves, line under the label only. */
@media (max-width: 767px) {
.anonymize-mobile-tabs button { display: flex; justify-content: center; align-items: stretch; padding-top: 0 !important; padding-bottom: 0 !important; }
.anonymize-mobile-tabs .tab-label { display: flex; align-items: center; }
/* Admin nav: one scrolling row; the rule is an inset shadow so the
scroll clip doesn't cut the selected line. */
.admin-page .admin-nav { flex-wrap: nowrap !important; overflow-x: auto !important; overflow-y: hidden !important; border-bottom: 0 !important; box-shadow: inset 0 -1px 0 var(--border-color); gap: 20px !important; }
.admin-page .admin-nav a { --tab-drop: 0px; }
.settings-nav button { max-width: none !important; }
}
/* Home features. Desktop: a vertical rail, 1px, with the selected step's 2px line on it.
Phone: a horizontal tab bar with one continuous rule. */
.paper-feature { border-left: 1px solid var(--border-color) !important; }
.paper-feature.is-on { border-left-color: var(--accent) !important; box-shadow: inset 1px 0 0 var(--accent); }
@media (max-width: 767px) {
.paper-features { column-gap: 0 !important; }
.paper-feature, .paper-feature.is-on { border-left: 0 !important; box-shadow: none; }
.paper-feature-tab { border-bottom: 1px solid var(--border-color) !important; padding-bottom: 0 !important; }
.paper-feature-tab .paper-eyebrow { padding-bottom: 10px; display: inline-flex !important; }
.paper-feature-tab { display: flex !important; justify-content: center; }
.paper-feature.is-on .paper-feature-tab .paper-eyebrow::after {
content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--accent);
}
}
/* F2. Header: labels never wrap. When space runs out (narrow window, wider
fonts, an Upgrade link, a long username), the bar degrades in steps:
1) signed in: "Report a bug" and "Support" move to the avatar menu
(they are already there); 2) tighter gaps; 3) the hamburger, below 992px.
The media queries are the baseline; the header fitter in app.js adds
.nav-fit-1 / .nav-fit-2 when the bar still overflows. */
.navbar .nav-link, .navbar .navbar-brand, .navbar .user-chip { white-space: nowrap; }
.navbar .user-chip-name { max-width: 140px; overflow: hidden; text-overflow: ellipsis; }
@media (min-width: 992px) and (max-width: 1365.98px) {
.navbar .nav-extra-item.in-user-menu { display: none !important; }
}
@media (min-width: 992px) {
.navbar.nav-fit-1 .nav-extra-item.in-user-menu { display: none !important; }
}
@media (min-width: 992px) and (max-width: 1099.98px) {
.navbar .navbar-collapse .nav-link { margin-left: 8px !important; margin-right: 8px !important; }
}
@media (min-width: 992px) {
.navbar.nav-fit-2 .navbar-collapse .nav-link { margin-left: 7px !important; margin-right: 7px !important; }
.navbar.nav-fit-2 .user-chip-name { max-width: 90px; }
}
/* F3. Active filter chips keep the standard 12px gap under the search row. */
.dashboard-page .dashboard-active-filters-row { margin: 12px 0 12px !important; }
/* F4. "Load more projects": 20px under the table, centred on it. */
.dashboard-pagination { display: flex; flex-direction: column; align-items: center; gap: 8px; margin: 20px 0 8px; text-align: center; }
.dashboard-pagination p { margin: 0; }
.dashboard-pagination .btn { min-width: 180px; justify-content: center; }
/* F5. Reviewer preview file strip: one row, never wraps. The fitter in app.js
keeps the entries that fit (folders first), always the README, and counts
the rest in a "+N more" chip. Entries past the fit stay measurable but are
out of the flow. */
/* F6. Workspace submit bar: always fits its column. The button keeps its
natural width and never shrinks or clips; the draft note beside it takes
what is left and wraps. Without a note the button spans the bar. Notes
about loading or checkout get their own row. Same 20px inset as the fields. */
.anonymize-submit-bar .draft-status { white-space: normal !important; min-width: 0; }
@media (min-width: 768px) {
.anonymize-workspace .anonymize-form-col .anonymize-submit-bar {
display: grid !important;
grid-template-columns: minmax(0, 1fr);
align-items: center;
column-gap: 16px !important;
row-gap: 6px !important;
padding-left: 20px !important;
padding-right: 20px !important;
}
.anonymize-workspace .anonymize-form-col .anonymize-submit-bar:has(> .draft-status) { grid-template-columns: minmax(0, 1fr) auto; }
.anonymize-workspace .anonymize-form-col .anonymize-submit-bar > .btn { grid-row: 1; grid-column: -2 / -1; width: 100%; min-width: max-content; white-space: nowrap; }
.anonymize-workspace .anonymize-form-col .anonymize-submit-bar > .draft-status { grid-row: 1; grid-column: 1; margin: 0 !important; padding: 0; line-height: 1.4; }
.anonymize-workspace .anonymize-form-col .anonymize-submit-bar > p { grid-column: 1 / -1; }
}
/* F7. Auto-update is paid when the repository has no allowance that includes
it: a "Paid" tag on the label and the price in the help line. */
.auto-update-check .paid-tag { display: inline-flex; align-items: center; height: 18px; margin-left: 8px; padding: 0 7px; border-radius: 9px; vertical-align: 1px; background: rgba(217, 119, 6, .1); box-shadow: inset 0 0 0 1px rgba(217, 119, 6, .3); color: #8A4B0A; font-size: 11px; font-weight: 600; line-height: 1; letter-spacing: .01em; }
body.dark-mode .auto-update-check .paid-tag { background: rgba(251, 191, 36, .12); box-shadow: inset 0 0 0 1px rgba(251, 191, 36, .32); color: #F2C66D; }
.auto-update-check .auto-update-paid a { white-space: nowrap; }
.hosting-limit.auto-update-note { font-weight: 400; line-height: 1.5; }
/* F8. Reviewer preview: a vertical file tree, a miniature of the explorer.
The sidebar is tinted like the explorer's .leftCol (#F3F1EC / #1F1D1A; the
workspace overrides --paper-bg-alt, so the values are spelled out) and runs the full
height of the window; the tree and the document scroll on their own. Rows
reuse the explorer's .files tree styles; nesting is drawn per row (--depth)
with the explorer's 16px step and guide line. Phones hide the sidebar and
show the explorer's "Files" button in the file bar instead. */
.reviewer-preview .rp-body.has-side { display: grid; grid-template-columns: clamp(180px, 24%, 240px) minmax(0, 1fr); grid-template-rows: minmax(0, 1fr); overflow: hidden; }
.reviewer-preview .rp-body.has-side > .rp-doc { min-height: 0; overflow: auto; }
.reviewer-preview .rp-side { min-height: 0; overflow: auto; overscroll-behavior: contain; scrollbar-width: thin; background: #F3F1EC; border-right: 1px solid var(--border-color); }
.dark-mode .reviewer-preview .rp-side { background: #1F1D1A; }
.reviewer-preview .rp-side .files.rp-files { height: auto; overflow: visible; margin: 0; padding: 8px 6px; list-style: none; }
.reviewer-preview .rp-files > li { padding-left: calc(var(--depth, 0) * 16px); background-image: repeating-linear-gradient(to right, transparent 0 7px, var(--border-color) 7px 8px, transparent 8px 16px); background-size: calc(var(--depth, 0) * 16px) 100%; background-repeat: no-repeat; word-break: normal; }
.reviewer-preview .rp-files a { min-height: 26px; cursor: default; user-select: none; }
.reviewer-preview .rp-files .file:not(.folder) > a:hover { background: transparent; }
.reviewer-preview .rp-files .file.active:not(.folder) > a:hover { background: #E8E5DD; }
.dark-mode .reviewer-preview .rp-files .file.active:not(.folder) > a:hover { background: rgba(255,255,255,.1); }
.reviewer-preview .rp-files .folder > a { cursor: pointer; }
.reviewer-preview .rp-files .folder > a:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.reviewer-preview .rp-files-skel { list-style: none; margin: 0; padding: 8px 6px; }
.reviewer-preview .rp-files-skel li { display: flex; align-items: center; height: 26px; padding: 0 8px 0 21px; }
.reviewer-preview .rp-files-skel .rp-skel { height: 9px; }
@media (prefers-reduced-motion: no-preference) { .reviewer-preview .rp-files-skel .rp-skel { animation: rp-pulse 1.4s ease-in-out infinite; } }
.reviewer-preview .rp-side-note { margin: 4px 14px 12px; font-size: 12px; line-height: 1.5; color: var(--ink-muted); }
.reviewer-preview .rp-files-btn { display: none; }
@media (min-width: 768px) {
.reviewer-preview .rp-body.has-side .rp-file-head { padding-left: 32px; padding-right: 32px; }
}
@media (max-width: 767px) {
.reviewer-preview .rp-body.has-side { display: block; overflow: visible; }
.reviewer-preview .rp-side { display: none; }
.reviewer-preview .rp-body.has-side .rp-file-head { align-items: center; padding: 6px 16px 6px 8px; }
.reviewer-preview .rp-files-btn { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 10px; border: 1px solid var(--border-color); border-radius: 6px; background: #F3F1EC; font-size: 13px; font-weight: 500; color: var(--color); white-space: nowrap; }
.dark-mode .reviewer-preview .rp-files-btn { background: #1F1D1A; }
.reviewer-preview .rp-files-btn .ui-icon { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linejoin: round; }
.reviewer-preview .rp-files-count { font-weight: 400; color: var(--ink-muted); font-variant-numeric: tabular-nums; }
}
+21 -15
View File
@@ -100,8 +100,8 @@
</aside>
<nav class="anonymize-mobile-tabs" role="tablist" aria-label="Anonymization workspace">
<button id="workspace-settings-tab" role="tab" type="button" :aria-selected="mobilePane === 'settings'" aria-controls="workspace-settings" :tabindex="mobilePane === 'settings' ? 0 : -1" @keydown="previewTabKeydown($event)" @click="selectMobilePane('settings')">Settings</button>
<button id="workspace-preview-tab" role="tab" type="button" :aria-selected="mobilePane === 'preview'" aria-controls="workspace-preview" :tabindex="mobilePane === 'preview' ? 0 : -1" @keydown="previewTabKeydown($event)" @click="selectMobilePane('preview')">Reviewer preview</button>
<button id="workspace-settings-tab" role="tab" type="button" :aria-selected="mobilePane === 'settings'" aria-controls="workspace-settings" :tabindex="mobilePane === 'settings' ? 0 : -1" @keydown="previewTabKeydown($event)" @click="selectMobilePane('settings')"><span class="tab-label">Settings</span></button>
<button id="workspace-preview-tab" role="tab" type="button" :aria-selected="mobilePane === 'preview'" aria-controls="workspace-preview" :tabindex="mobilePane === 'preview' ? 0 : -1" @keydown="previewTabKeydown($event)" @click="selectMobilePane('preview')"><span class="tab-label">Reviewer preview</span></button>
</nav>
<div class="anonymize-split">
<!-- Form column (left) -->
@@ -208,10 +208,11 @@
</div>
</div>
<div class="form-check" v-show="detectedType">
<input class="form-check-input" type="checkbox" id="update" name="update" v-field="{ state: viewState, set: value =&gt; { options.update = value }, value: options?.update, form: &quot;anonymize&quot;, options: {} }">
<label class="form-check-label" for="update">Auto-update from GitHub</label>
<small class="form-text text-muted">Follows the latest version, at most once an hour.</small>
<div class="form-check auto-update-check" v-show="detectedType" :class="{ 'is-paid': !liveUpdatesIncluded() }">
<input class="form-check-input" type="checkbox" id="update" name="update" aria-describedby="update-help" v-field="{ state: viewState, set: value =&gt; { options.update = value }, value: options?.update, form: &quot;anonymize&quot;, options: {} }">
<label class="form-check-label" for="update">Auto-update from GitHub<span class="paid-tag" v-if="!liveUpdatesIncluded()">Paid</span></label>
<small class="form-text text-muted" id="update-help" v-if="liveUpdatesIncluded()">Follows the latest version, at most once an hour.</small>
<small class="form-text text-muted auto-update-paid" id="update-help" v-else>Needs Live updates<template v-if="liveUpdatesPrice()"> · {{ liveUpdatesPrice() }}</template>, a Paper pack or an author subscription. <a href="#repository-hosting" @click.prevent="showHostingOptions()">Hosting options</a></small>
</div>
</section>
@@ -412,6 +413,7 @@
<span v-else-if="hasAuthorHosting()">Your author subscription is active.</span>
<span v-else-if="hostingQuota?.repository">{{ hostingQuota.repository.used }} of {{ hostingQuota.repository.total }} active repositories · Free</span>
</p>
<p class="hosting-limit auto-update-note" role="status" v-if="detectedType === 'repo' &amp;&amp; options?.update &amp;&amp; !liveUpdatesIncluded()">Automatic updates need a paid option. On free hosting, the link keeps the version you create until you refresh it from My work. Once it exists, add Live updates<template v-if="liveUpdatesPrice()"> ({{ liveUpdatesPrice() }} once)</template> or a Paper pack in <a href="/profile?billing=1">Settings › Hosting &amp; billing</a>, or take an author subscription.</p>
<div class="hosting-payment" v-if="detectedType === 'repo' &amp;&amp; billing?.enabled">
<template v-if="hostingNeedsPayment() &amp;&amp; !billingPending">
<p class="hosting-limit" role="status" v-if="options.expirationMode !== 'never' || hostingQuotaBlocked">{{ options.update &amp;&amp; !hostingQuotaBlocked &amp;&amp; hostingQuota?.repository?.used &lt; hostingQuota?.repository?.total ? 'Automatic updates need a paid option for this repository.' : 'Your free repositories are all in use.' }}</p>
@@ -540,19 +542,23 @@
<div class="rp-window">
<div class="rp-chrome" aria-hidden="true"><i></i><i></i><i></i><span class="rp-url">{{ previewUrl() || 'anonymous.4open.science' }}</span></div>
<div class="rp-bar" aria-hidden="true"><span class="vb-logo">Anonymous <em>GitHub</em></span><span class="rp-bar-id" v-if="previewId()">{{ previewId() }}</span><span class="rp-bar-kind" v-if="detectedType !== 'repo'">{{ detectedType === 'pr' ? 'Pull request' : 'Gist' }}</span></div>
<div class="rp-body" :class="{ 'has-tree': detectedType === 'repo' }">
<nav class="rp-tree" v-if="detectedType === 'repo'" aria-label="Files reviewers will see">
<template v-if="previewTree().length">
<span class="rp-tree-row" v-for="entry in previewTree()" :key="entry.name" :class="{ 'is-dir': entry.dir, 'is-active': entry.readme }"><svg class="rp-tree-icon" viewBox="0 0 16 16" aria-hidden="true"><path v-if="entry.dir" d="M1.5 3.5h4l1.5 1.5h7.5v8h-13z"/><path v-else d="M3.5 1.5h6l3 3v10h-9z"/></svg><span class="rp-tree-name">{{ entry.name }}</span></span>
</template>
<div class="rp-body" :class="{ 'has-side': detectedType === 'repo' }">
<!-- Sidebar: a miniature of the explorer's file tree -->
<nav class="rp-side" v-if="detectedType === 'repo'" aria-label="Files reviewers will see">
<ul class="files rp-files" v-if="previewTree().length">
<li v-for="entry in previewTree()" :key="entry.path" class="file" :class="{ folder: entry.dir, open: entry.open, active: entry.readme }" :style="{ '--depth': entry.depth }">
<a v-if="entry.dir" role="button" tabindex="0" :aria-expanded="entry.open ? 'true' : 'false'" :title="entry.path" @click="togglePreviewFolder(entry.path)" @keydown.enter.prevent="togglePreviewFolder(entry.path)" @keydown.space.prevent="togglePreviewFolder(entry.path)"><span class="tree-toggle"></span><span class="tree-icon-folder" aria-hidden="true"><svg viewBox="0 0 14 12" focusable="false"><path d="M1.5 10.5v-9h4l1.5 2h5.5v7z"/></svg></span><span class="tree-name">{{ entry.name }}</span></a>
<a v-else :title="entry.path" :aria-current="entry.readme ? 'page' : null"><span class="tree-spacer"></span><span class="far fa-file tree-icon-file" aria-hidden="true"></span><span class="tree-name">{{ entry.name }}</span></a>
</li>
</ul>
<ul class="rp-files-skel" v-else-if="preserve.loading || (sourceLoading &amp;&amp; !preserve.error)" aria-label="Loading the file list"><li v-for="w in [58, 72, 46, 64, 52, 38, 68, 44]" :key="w"><i class="rp-skel" :style="{ width: w + '%' }"></i></li></ul>
<template v-else>
<template v-if="preserve.loading"><span class="rp-tree-row rp-skel-row" v-for="w in [62, 48, 70, 40]" :key="w"><i class="rp-skel" :style="{ width: w + '%' }"></i></span></template>
<span class="rp-tree-label" v-if="!preserve.loading"><svg class="rp-tree-icon" viewBox="0 0 16 16" aria-hidden="true"><path d="M1.5 3.5h4l1.5 1.5h7.5v8h-13z"/></svg>Files</span>
<span class="rp-tree-note" v-if="!preserve.loading">Every other file at this commit appears here, with the same redactions.</span>
<ul class="files rp-files" v-if="readme || previewStatus === 'ready'"><li class="file active"><a title="README.md" aria-current="page"><span class="tree-spacer"></span><span class="far fa-file tree-icon-file" aria-hidden="true"></span><span class="tree-name">README.md</span></a></li></ul>
<p class="rp-side-note">Every other file at this commit appears here, with the same redactions.</p>
</template>
</nav>
<div class="rp-doc">
<div class="rp-file-head" v-if="detectedType === 'repo' &amp;&amp; (previewStatus === 'ready' || readme)"><span class="rp-file-name">README.md</span><span class="rp-file-meta">Markdown</span></div>
<div class="rp-file-head" v-if="detectedType === 'repo' &amp;&amp; (previewStatus === 'ready' || readme)"><span class="rp-files-btn" aria-hidden="true"><svg class="ui-icon"><use href="#ui-icon-folder"></use></svg>Files<span class="rp-files-count" v-if="previewTreeCount()">{{ previewTreeCount() }}</span></span><span class="rp-file-name">README.md</span><span class="rp-file-meta">Markdown</span></div>
<!-- Loading: skeleton inside the window -->
<div class="rp-state rp-loading" role="status" v-if="previewStatus === 'loading' || (sourceLoading &amp;&amp; previewStatus !== 'ready' &amp;&amp; previewStatus !== 'error')">
<span class="rp-state-text">{{ previewStatus === 'loading' ? 'Updating the anonymized preview…' : (detectedType === 'pr' ? 'Loading the pull request from GitHub…' : detectedType === 'gist' ? 'Loading the gist from GitHub…' : 'Loading the repository from GitHub…') }}</span>
+2 -2
View File
@@ -54,13 +54,13 @@
<!-- "Report a bug" is about this service. Reviewers who land on an
anonymized repository often think it is about the paper, so the
label names the service and the tooltip says who to contact. -->
<li class="nav-item d-none d-lg-block">
<li class="nav-item nav-extra-item d-none d-lg-block" :class="{'in-user-menu': !!user?.username}">
<a class="nav-link" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" title="Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors." data-offset="30"><svg class="ui-icon d-lg-none mr-1" aria-hidden="true"><use href="#ui-icon-bug"></use></svg>Report a bug
</a>
</li>
<li class="nav-item nav-support-item d-none d-lg-block">
<li class="nav-item nav-support-item nav-extra-item d-none d-lg-block" :class="{'in-user-menu': !!user?.username}">
<a class="nav-link nav-support-inline" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" title="Donate on Ko-fi to help cover hosting costs">
<svg class="ui-icon nav-heart" aria-hidden="true"><use href="#ui-icon-heart"></use></svg>Support
</a>
+82 -9
View File
@@ -224,6 +224,34 @@ export const mainController = function (state, http, location, timeout) {
else location.url("/profile?upgrade=1");
};
// Header fitter: the media queries in style.css (F2) handle the usual
// widths; this catches what they can't predict (wider fonts, an Upgrade
// link, long usernames). It adds .nav-fit-1 (extras into the avatar menu),
// then .nav-fit-2 (tighter gaps) while the expanded bar overflows.
const headerListen = createListeners();
const headerTimers = createTimers();
let headerFitQueued = false;
const fitHeader = () => {
headerFitQueued = false;
const nav = document.querySelector("nav.navbar.navbar-expand-lg");
if (!nav) return;
nav.classList.remove("nav-fit-1", "nav-fit-2");
if (window.innerWidth < 992) return;
const collapse = nav.querySelector(".navbar-collapse");
const overflows = () => nav.scrollWidth > nav.clientWidth + 1 || (!!collapse && collapse.scrollWidth > collapse.clientWidth + 1);
if (overflows()) nav.classList.add("nav-fit-1");
if (overflows()) nav.classList.add("nav-fit-2");
};
const queueHeaderFit = () => {
if (headerFitQueued) return;
headerFitQueued = true;
nextTick(() => headerTimers.timeout(fitHeader, 0));
};
headerListen(window, "resize", queueHeaderFit);
state.on("routeChange", queueHeaderFit);
state.on("billing:updated", queueHeaderFit);
if (document.fonts?.ready) document.fonts.ready.then(queueHeaderFit).catch(() => {});
state.title = "Main";
state.user = { status: "connection" };
state.site_options;
@@ -303,6 +331,7 @@ export const mainController = function (state, http, location, timeout) {
http.get("/api/user").then(
(res) => {
if (res) state.user = res.data;
queueHeaderFit();
if (state.user?.username) readBilling(http).then(res => updateHeaderBilling(res.data)).catch(() => {});
else state.headerShowSupport = true;
if (state.user?.emailNotificationsEnabled && state.user.showEmailPrompt && !state.user.notificationEmail) {
@@ -1683,6 +1712,28 @@ export const anonymizeController = function (state, http, html, params, location
return state.hostingQuotaBlocked && !state.conferenceHosting() ? offered(["repo_slot", "repo_pack"]) : [];
};
state.hostingOneTime = () => state.hostingOneTimePlans()[0];
// Automatic updates, as the server decides them (hasAutomaticUpdates):
// free hosting and an Extra repository refresh by hand; a conference
// package, Live updates or a Paper pack for this repository, or an author
// subscription include them. Unknown (billing not loaded, someone else's
// repository) counts as included, so no paid hint flashes.
const MANUAL_REFRESH_PLANS = ["free", "repo_slot"];
state.liveUpdatesIncluded = () => {
if (!state.billing?.enabled || state.detectedType !== "repo") return true;
if (state.isUpdate && state.role !== "owner") return true;
if (state.conferenceHosting() || state.hasAuthorHosting()) return true;
const plan = state.billing?.allowance?.plan;
if (plan && !MANUAL_REFRESH_PLANS.includes(plan)) return true;
return state.repositoryGrants("author_pass").length > 0 || state.repositoryGrants("repo_pack").length > 0;
};
state.liveUpdatesPrice = () => {
const plan = (state.billing?.plans || []).find(p => p.id === "author_pass");
return plan?.amount != null ? state.billingAmount(plan) : "";
};
state.showHostingOptions = () => {
state.mobilePane = "settings";
nextTick(() => document.getElementById("repository-hosting")?.scrollIntoView({ block: "start", behavior: "smooth" }));
};
state.neverExpireTag = () => {
if (state.hasAuthorHosting()) return "Included in your subscription";
if (state.repositoryGrants("repo_never").length) return "Paid for this repository";
@@ -1933,17 +1984,38 @@ export const anonymizeController = function (state, http, html, params, location
cache.forEach((value) => { n += count(value); });
return n;
};
// Top-level entries for the preview's miniature file tree, from the same
// tree the Unredacted-files picker loads (folders first, like the explorer).
// The preview's miniature file tree, from the same tree the
// Unredacted-files picker loads. Like the explorer: folders first, then
// files, each alphabetical; folders start collapsed and open on click.
// Only the open folders' rows are built, so large repositories stay cheap.
state.previewTreeOpen = {};
const byName = (a, b) => a.localeCompare(b, undefined, { sensitivity: "base" });
const baseName = (path) => path.slice(path.lastIndexOf("/") + 1);
state.previewTree = () => {
if (!state.preserve.commit || !preserveIndex) return [];
const root = preserveIndex.dirs.get("");
if (!root) return [];
const readme = root.files.find((f) => /^readme(\.|$)/i.test(f));
const dirs = root.dirs.slice(0, 9).map((d) => ({ name: d, dir: true }));
const files = [...root.files].sort((a, b) => a.localeCompare(b, undefined, { sensitivity: "base" })).slice(0, Math.max(3, 14 - dirs.length)).map((f) => ({ name: f, dir: false, readme: f === readme }));
if (readme && !files.some((f) => f.readme)) files.push({ name: readme, dir: false, readme: true });
return [...dirs, ...files];
const readme = (preserveIndex.dirs.get("")?.files || []).find((f) => /^readme(\.|$)/i.test(f));
const rows = [];
const walk = (dir, depth) => {
const node = preserveIndex.dirs.get(dir);
if (!node) return;
for (const sub of [...node.dirs].sort((a, b) => byName(baseName(a), baseName(b)))) {
const open = !!state.previewTreeOpen[sub];
rows.push({ path: sub, name: baseName(sub), dir: true, open, depth });
if (open) walk(sub, depth + 1);
}
for (const file of [...node.files].sort((a, b) => byName(baseName(a), baseName(b)))) {
rows.push({ path: file, name: baseName(file), dir: false, readme: file === readme, depth });
}
};
walk("", 0);
return rows;
};
state.previewTreeCount = () => {
const root = state.preserve.commit && preserveIndex ? preserveIndex.dirs.get("") : null;
return root ? root.dirs.length + root.files.length : 0;
};
state.togglePreviewFolder = (path) => {
state.previewTreeOpen[path] = !state.previewTreeOpen[path];
};
state.existingConfigurationUrl = () => {
const previous = state.previousConfigurations.find(repo => repo.repoId === state.previousConfigurationId);
@@ -2470,6 +2542,7 @@ export const anonymizeController = function (state, http, html, params, location
preserveIndex = markRaw(buildPreserveIndex(res.data.files || []));
state.preserve.commit = commit;
state.preserve.truncated = !!res.data.truncated;
state.previewTreeOpen = {};
} catch (error) {
state.preserve.error = "The file list could not be loaded from GitHub. You can still use patterns.";
state.preserve.patternsOpen = true;
+46 -46
View File
@@ -1,51 +1,51 @@
"use strict";(()=>{var Aa=Object.defineProperty;var Ta=e=>{throw TypeError(e)};var wp=(e,t,o)=>t in e?Aa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var kp=(e,t)=>{for(var o in t)Aa(e,o,{get:t[o],enumerable:!0})};var Je=(e,t,o)=>wp(e,typeof t!="symbol"?t+"":t,o),Gi=(e,t,o)=>t.has(e)||Ta("Cannot "+o);var re=(e,t,o)=>(Gi(e,t,"read from private field"),o?o.call(e):t.get(e)),Ve=(e,t,o)=>t.has(e)?Ta("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,o),Ue=(e,t,o,i)=>(Gi(e,t,"write to private field"),i?i.call(e,o):t.set(e,o),o),qe=(e,t,o)=>(Gi(e,t,"access private method"),o);var Pa=(e,t,o,i)=>({set _(s){Ue(e,t,s,o)},get _(){return re(e,t,i)}});var ve=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var ye={markdown:"/script/markdown.6c8dfb7b1d.min.js",notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js",editor:"/script/editor.4f142d3adc.min.js"};function Oa(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let o=new URLSearchParams(t);if([...o.keys()].length!==3||[...o.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let i=o.get("clientId"),s=o.get("intentId"),r=o.get("token");return!/^[a-f0-9]{32}$/.test(i||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(r||"")?null:{contract:"4open.artifacts/1",clientId:i,intentId:s,token:r}}function Ia(e,t){let{http:o,promises:i,window:s}=t,r=t.takeReviewHandoff(),a=r?{clientId:r.clientId,intentId:r.intentId}:null,u,p,y,m,b,h=!0,w,A=i.defer(),N=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(V=>V.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:r?"":"Open a new artifact link from your submission. This link is missing or invalid."});let R=()=>h&&e.user?.username===b;function v(){h=!1,r=u=p=void 0,A.resolve(),s.clearTimeout(w)}e.on("dispose",v),e.on("routeLeave",v),e.watch(()=>e.user?.username,V=>{!b&&V?b=V:b&&V!==b&&(v(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let C=()=>({timeout:A.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":p}}),I=V=>V?.status===404?"Artifact linking is not available on this server.":V?.status===401?"Sign in, then open a new artifact link from your submission.":V?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!h||!r||e.busy||e.uncertain||e.saved||!e.user?.username)return;b=e.user.username;let V=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(V)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,u=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(w),m||(m=N());try{let q=(await o.get("/api/review-consent/csrf",{timeout:A.promise})).data;if(!R())return;if(p=q.csrf,e.handoffEnabled=q.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(p||""))throw new Error("invalid_csrf");let W=(await o.post("/api/review-consent/preview",{repositoryId:V,intent:{...r,requestId:m}},C())).data;if(!R())return;if(!W||typeof W.ticket!="string"||!W.ticket||W.ticket.length>8192||typeof W.repositoryName!="string"||!["restricted-review","anonymous-link"].iLine truncated
`))),e[rn]=So(s);let r=i||s.props&&s.props.type==="number";Nn(e,t?"change":"input",a=>{a.target.composing||e[rn](Or(e.value,o,r))}),(o||r)&&Nn(e,"change",()=>{e.value=Or(e.value,o,r)}),t||(Nn(e,"compositionstart",Nh),Nn(e,"compositionend",yd),Nn(e,"change",yd))},mounted(e,{value:t,modifiers:{trim:o,number:i}}){let s=t??"",r=e[hi];delete e[hi],r!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==r?e[rn](Or(e.value,o,i)):e.value=s},beforeUpdate(e,{value:t,oldValue:o,modifiers:{lazy:i,trim:s,number:r}},a){if(e[rn]=So(a),e.composing)return;let u=(r||e.type==="number")&&!/^0\d/.test(e.value)?go(e.value):e.value,p=t??"";if(u===p)return;let y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(i&&t===o||s&&e.value.trim()===p)||(e.value=p)}},_r={deep:!0,created(e,t,o){e[rn]=So(o),Nn(e,"change",()=>{let i=e._modelValue,s=vs(e),r=e.checked,a=e[rn];if(Ne(i)){let u=zs(i,s),p=u!==-1;if(r&&!p)a(i.concat(s));else if(!r&&p){let y=[...i];y.splice(u,1),a(y)}}else if(Ut(i)){let u=new Set(i);r?u.add(s):u.delete(s),a(u)}else a(Sd(e,r))})},mounted:bd,beforeUpdate(e,t,o){e[rn]=So(o),bd(e,t,o)}};function bd(e,{value:t,oldValue:o},i){e._modelValue=t;let s;if(Ne(t))s=zs(t,i.props.value)>-1;else if(Ut(t))s=t.has(i.props.value);else{if(t===o)return;s=Ft(t,Sd(e,!0))}e.checked!==s&&(e.checked=s)}var an={deep:!0,created(e,{value:t,modifiers:{number:o}},i){e._modelValue=t,Nn(e,"change",()=>{let s=Array.prototype.filter.call(e.options,p=>p.selected).map(p=>o?go(vs(p)):vs(p)),r=e.multiple,a=r?Ut(e._modelValue)?new Set(s):s:s[0],u=e._pendingValue=[r,r?Ne(a)?s.slice():s:a];try{e[rn](a)}finally{ot(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[rn]=So(i)},mounted(e,{value:t}){wd(e,t)},beforeUpdate(e,{value:t},o){e._modelValue=t,e[rn]=So(o)},updated(e,{value:t}){let o=e._pendingValue;e._pendingValue=void 0,(!o||o[0]!==e.multiple||!Rh(t,o[1],o[0]))&&wd(e,t)}};function Rh(e,t,o){if(!o)return Ft(e,t);if(Ne(e))return Ft(e,t);if(Ut(e)){if(e.size!==t.length)return!1;for(let i of t)if(!e.has(i))return!1;return!0}return!1}function wd(e,t){let o=e.multiple,i=Ne(t);if(!(o&&!i&&!Ut(t))){for(let s=0,r=e.options.length;s<r;s++){let a=e.options[s],u=vs(a);if(o)if(i){let p=typeof u;p==="string"||p==="number"?a.selected=t.some(y=>String(y)===String(u)):a.selected=zs(t,u)>-1}else a.selected=t.has(u);else if(Ft(vs(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!o&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function vs(e){return"_value"in e?e._value:e.value}function Sd(e,t){let o=t?"_trueValue":"_falseValue";return o in e?e[o]:t}var Dh=["ctrl","shift","alt","meta"],Ah={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Dh.some(o=>e[`${o}Key`]&&!t.includes(o))},ce=(e,t)=>{if(!e)return e;let o=e._withMods||(e._withMods={}),i=t.join(".");return o[i]||(o[i]=((s,...r)=>{for(let a=0;a<t.length;a++){let u=Ah[t[a]];if(u&&u(s,t))return}return e(s,...r)}))},Th={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},mt=(e,t)=>{let o=e._withKeys||(e._withKeys={}),i=t.join(".");return o[i]||(o[i]=(s=>{if(!("key"in s))return;let r=Xt(s.key);if(t.some(a=>a===r||Th[a]===r))return e(s)}))},Ph=lt({patchProp:Ch},rh),kd;function Oh(){return kd||(kd=ed(Ph))}var Nd=((...e)=>{let t=Oh().createApp(...e),{mount:o}=t;return t.mount=i=>{let s=_h(i);if(!s)return;let r=t._component;!Ie(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=o(s,!1,Ih(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Ih(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function _h(e){return tt(e)?document.querySelector(e):e}var Jn=typeof document<"u";function Dd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function Mh(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Dd(e.default)}var Ge=Object.assign;function gi(e,t){let o={};for(let i in t){let s=t[i];o[i]=Lt(s)?s.map(e):e(s)}return o}var Ro=()=>{},Lt=Array.isArray;function qr(e,t){let o={};for(let i in e)o[i]=i in t?t[i]:e[i];return o}var Ad=/#/g,Vh=/&/g,qh=/\//g,$h=/=/g,Lh=/\?/g,Td=/\+/g,Uh=/%5B/g,Fh=/%5D/g,Pd=/%5E/g,Bh=/%60/g,Od=/%7B/g,zh=/%7C/g,Id=/%7D/g,Hh=/%20/g;function $r(e){return e==null?"":encodeURI(""+e).replace(zh,"|").replace(Uh,"[").replace(Fh,"]")}function _d(e){return $r(e).replace(Od,"{").replace(Id,"}").replace(Pd,"^")}function Mr(e){return $r(e).replace(Td,"%2B").replace(Hh,"+").replace(Ad,"%23").replace(Vh,"%26").replace(Bh,"`").replace(Od,"{").replace(Id,"}").replace(Pd,"^")}function jh(e){return Mr(e).replace($h,"%3D")}function Gh(e){return $Line truncated
"use strict";(()=>{var Oa=Object.defineProperty;var Ia=e=>{throw TypeError(e)};var Ep=(e,t,o)=>t in e?Oa(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o;var Sp=(e,t)=>{for(var o in t)Oa(e,o,{get:t[o],enumerable:!0})};var Je=(e,t,o)=>Ep(e,typeof t!="symbol"?t+"":t,o),Yi=(e,t,o)=>t.has(e)||Ia("Cannot "+o);var ae=(e,t,o)=>(Yi(e,t,"read from private field"),o?o.call(e):t.get(e)),qe=(e,t,o)=>t.has(e)?Ia("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,o),Ue=(e,t,o,i)=>(Yi(e,t,"write to private field"),i?i.call(e,o):t.set(e,o),o),$e=(e,t,o)=>(Yi(e,t,"access private method"),o);var Ma=(e,t,o,i)=>({set _(s){Ue(e,t,s,o)},get _(){return ae(e,t,i)}});var ve=["abap","abc","actionscript","ada","alda","apache_conf","apex","applescript","aql","asciidoc","asl","assembly_x86","autohotkey","batchfile","c9search","c_cpp","cirru","clojure","cobol","coffee","coldfusion","crystal","csharp","csound_document","csound_orchestra","csound_score","csp","css","curly","d","dart","diff","django","dockerfile","dot","drools","edifact","eiffel","ejs","elixir","elm","erlang","forth","fortran","fsharp","fsl","ftl","gcode","gherkin","gitignore","glsl","gobstones","golang","graphqlschema","groovy","haml","handlebars","haskell","haskell_cabal","haxe","hjson","html","html_elixir","html_ruby","ini","io","jack","jade","java","javascript","json","json5","jsoniq","jsp","jssm","jsx","julia","kotlin","latex","less","liquid","lisp","livescript","logiql","logtalk","lsl","lua","luapage","lucene","makefile","markdown","mask","matlab","maze","mediawiki","mel","mixal","mushcode","mysql","nginx","nim","nix","nsis","nunjucks","objectivec","ocaml","pascal","perl","perl6","pgsql","php","php_laravel_blade","pig","plain_text","powershell","praat","prisma","prolog","properties","protobuf","puppet","python","qml","r","razor","rdoc","red","redshift","rhtml","rst","ruby","rust","sass","scad","scala","scheme","scss","sh","sjs","slim","smarty","snippets","soy_template","space","sparql","sql","sqlserver","stylus","svg","swift","tcl","terraform","tex","text","textile","toml","tsx","turtle","twig","typescript","vala","vbscript","velocity","verilog","vhdl","visualforce","wollok","xml","xquery","yaml","zeek"];var ye={markdown:"/script/markdown.6c8dfb7b1d.min.js",notebook:"/script/notebook.c3144c18ae.min.js",org:"/script/org.f61f262915.min.js",pdf:"/script/pdf.4d9cc6ff49.min.js",editor:"/script/editor.4f142d3adc.min.js"};function _a(e){let t=e.location.hash.slice(1);if(e.history.replaceState(null,"","/review-link"),t.length>2048)return null;let o=new URLSearchParams(t);if([...o.keys()].length!==3||[...o.keys()].some(a=>!["clientId","intentId","token"].includes(a)))return null;let i=o.get("clientId"),s=o.get("intentId"),r=o.get("token");return!/^[a-f0-9]{32}$/.test(i||"")||!/^[a-f0-9]{32}$/.test(s||"")||!/^[a-f0-9]{64}$/.test(r||"")?null:{contract:"4open.artifacts/1",clientId:i,intentId:s,token:r}}function Va(e,t){let{http:o,promises:i,window:s}=t,r=t.takeReviewHandoff(),a=r?{clientId:r.clientId,intentId:r.intentId}:null,u,p,y,h,b,m=!0,w,A=i.defer(),S=()=>[...s.crypto.getRandomValues(new Uint8Array(16))].map(V=>V.toString(16).padStart(2,"0")).join("");Object.assign(e,{repositoryId:"",handoffEnabled:!1,busy:!1,preview:null,acceptAccess:!1,acceptRetention:!1,uncertain:!1,saved:!1,expired:!1,error:r?"":"Open a new artifact link from your submission. This link is missing or invalid."});let R=()=>m&&e.user?.username===b;function g(){m=!1,r=u=p=void 0,A.resolve(),s.clearTimeout(w)}e.on("dispose",g),e.on("routeLeave",g),e.watch(()=>e.user?.username,V=>{!b&&V?b=V:b&&V!==b&&(g(),e.preview=null,e.repositoryId="",e.busy=!1,e.saved=!1,e.handoffEnabled=!1,e.error="Your account changed. Open a new artifact link from your submission.")});let C=()=>({timeout:A.promise,headers:{"Content-Type":"application/json","X-Review-CSRF":p}}),M=V=>V?.status===404?"Artifact linking is not available on this server.":V?.status===401?"Sign in, then open a new artifact link from your submission.":V?.status===403?"This account cannot approve this repository or this link.":"The request could not be completed. You can retry from this page.";e.loadPreview=async()=>{if(!m||!r||e.busy||e.uncertain||e.saved||!e.user?.username)return;b=e.user.username;let V=e.repositoryId.trim();if(!/^[A-Za-z0-9_-]{3,128}$/.test(V)){e.error="Enter the anonymous repository ID from its URL.";return}e.busy=!0,e.error="",e.preview=null,u=void 0,e.acceptAccess=e.acceptRetention=!1,e.expired=!1,s.clearTimeout(w),h||(h=S());try{let q=(await o.get("/api/review-consent/csrf",{timeout:A.promise})).data;if(!R())return;if(p=q.csrf,e.handoffEnabled=q.handoffEnabled===!0,!/^[a-f0-9]{64}$/.test(p||""))throw new Error("invalid_csrf");let j=(await o.post("/api/review-consent/preview",{repositoryId:V,intent:{...r,requestId:h}},C())).data;if(!R())return;if(!j||typeof j.ticket!="string"||!j.ticket||j.ticket.length>8192||typeof j.repositoryName!="string"||!["restricted-review","anonymous-link"].iLine truncated
`))),e[un]=Do(s);let r=i||s.props&&s.props.type==="number";An(e,t?"change":"input",a=>{a.target.composing||e[un](_r(e.value,o,r))}),(o||r)&&An(e,"change",()=>{e.value=_r(e.value,o,r)}),t||(An(e,"compositionstart",Ah),An(e,"compositionend",kd),An(e,"change",kd))},mounted(e,{value:t,modifiers:{trim:o,number:i}}){let s=t??"",r=e[vi];delete e[vi],r!==void 0&&(e.type==="text"||e.type==="textarea")&&e.value!==r?e[un](_r(e.value,o,i)):e.value=s},beforeUpdate(e,{value:t,oldValue:o,modifiers:{lazy:i,trim:s,number:r}},a){if(e[un]=Do(a),e.composing)return;let u=(r||e.type==="number")&&!/^0\d/.test(e.value)?bo(e.value):e.value,p=t??"";if(u===p)return;let y=e.getRootNode();(y instanceof Document||y instanceof ShadowRoot)&&y.activeElement===e&&e.type!=="range"&&(i&&t===o||s&&e.value.trim()===p)||(e.value=p)}},qr={deep:!0,created(e,t,o){e[un]=Do(o),An(e,"change",()=>{let i=e._modelValue,s=ws(e),r=e.checked,a=e[un];if(Re(i)){let u=Gs(i,s),p=u!==-1;if(r&&!p)a(i.concat(s));else if(!r&&p){let y=[...i];y.splice(u,1),a(y)}}else if(Ht(i)){let u=new Set(i);r?u.add(s):u.delete(s),a(u)}else a(Dd(e,r))})},mounted:Cd,beforeUpdate(e,t,o){e[un]=Do(o),Cd(e,t,o)}};function Cd(e,{value:t,oldValue:o},i){e._modelValue=t;let s;if(Re(t))s=Gs(t,i.props.value)>-1;else if(Ht(t))s=t.has(i.props.value);else{if(t===o)return;s=jt(t,Dd(e,!0))}e.checked!==s&&(e.checked=s)}var cn={deep:!0,created(e,{value:t,modifiers:{number:o}},i){e._modelValue=t,An(e,"change",()=>{let s=Array.prototype.filter.call(e.options,p=>p.selected).map(p=>o?bo(ws(p)):ws(p)),r=e.multiple,a=r?Ht(e._modelValue)?new Set(s):s:s[0],u=e._pendingValue=[r,r?Re(a)?s.slice():s:a];try{e[un](a)}finally{xe(()=>{e._pendingValue===u&&(e._pendingValue=void 0)})}}),e[un]=Do(i)},mounted(e,{value:t}){Ed(e,t)},beforeUpdate(e,{value:t},o){e._modelValue=t,e[un]=Do(o)},updated(e,{value:t}){let o=e._pendingValue;e._pendingValue=void 0,(!o||o[0]!==e.multiple||!Th(t,o[1],o[0]))&&Ed(e,t)}};function Th(e,t,o){if(!o)return jt(e,t);if(Re(e))return jt(e,t);if(Ht(e)){if(e.size!==t.length)return!1;for(let i of t)if(!e.has(i))return!1;return!0}return!1}function Ed(e,t){let o=e.multiple,i=Re(t);if(!(o&&!i&&!Ht(t))){for(let s=0,r=e.options.length;s<r;s++){let a=e.options[s],u=ws(a);if(o)if(i){let p=typeof u;p==="string"||p==="number"?a.selected=t.some(y=>String(y)===String(u)):a.selected=Gs(t,u)>-1}else a.selected=t.has(u);else if(jt(ws(a),t)){e.selectedIndex!==s&&(e.selectedIndex=s);return}}!o&&e.selectedIndex!==-1&&(e.selectedIndex=-1)}}function ws(e){return"_value"in e?e._value:e.value}function Dd(e,t){let o=t?"_trueValue":"_falseValue";return o in e?e[o]:t}var Ph=["ctrl","shift","alt","meta"],Oh={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>Ph.some(o=>e[`${o}Key`]&&!t.includes(o))},de=(e,t)=>{if(!e)return e;let o=e._withMods||(e._withMods={}),i=t.join(".");return o[i]||(o[i]=((s,...r)=>{for(let a=0;a<t.length;a++){let u=Oh[t[a]];if(u&&u(s,t))return}return e(s,...r)}))},Ih={esc:"escape",space:" ",up:"arrow-up",left:"arrow-left",right:"arrow-right",down:"arrow-down",delete:"backspace"},ut=(e,t)=>{let o=e._withKeys||(e._withKeys={}),i=t.join(".");return o[i]||(o[i]=(s=>{if(!("key"in s))return;let r=xt(s.key);if(t.some(a=>a===r||Ih[a]===r))return e(s)}))},Mh=at({patchProp:Nh},dh),Sd;function _h(){return Sd||(Sd=od(Mh))}var Ad=((...e)=>{let t=_h().createApp(...e),{mount:o}=t;return t.mount=i=>{let s=qh(i);if(!s)return;let r=t._component;!Ie(r)&&!r.render&&!r.template&&(r.template=s.innerHTML),s.nodeType===1&&(s.textContent="");let a=o(s,!1,Vh(s));return s instanceof Element&&(s.removeAttribute("v-cloak"),s.setAttribute("data-v-app","")),a},t});function Vh(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function qh(e){return nt(e)?document.querySelector(e):e}var xn=typeof document<"u";function Pd(e){return typeof e=="object"||"displayName"in e||"props"in e||"__vccOpts"in e}function $h(e){return e.__esModule||e[Symbol.toStringTag]==="Module"||e.default&&Pd(e.default)}var We=Object.assign;function bi(e,t){let o={};for(let i in t){let s=t[i];o[i]=zt(s)?s.map(e):e(s)}return o}var To=()=>{},zt=Array.isArray;function Ur(e,t){let o={};for(let i in e)o[i]=i in t?t[i]:e[i];return o}var Od=/#/g,Lh=/&/g,Uh=/\//g,Fh=/=/g,Bh=/\?/g,Id=/\+/g,zh=/%5B/g,Hh=/%5D/g,Md=/%5E/g,jh=/%60/g,_d=/%7B/g,Gh=/%7C/g,Vd=/%7D/g,Wh=/%20/g;function Fr(e){return e==null?"":encodeURI(""+e).replace(Gh,"|").replace(zh,"[").replace(Hh,"]")}function qd(e){return Fr(e).replace(_d,"{").replace(Vd,"}").replace(Md,"^")}function $r(e){return Fr(e).replace(Id,"%2B").replace(Wh,"+").replace(Od,"%23").replace(Lh,"%26").replace(jh,"`").replace(_d,"{").replace(Vd,"}").replace(Md,"^")}function Kh(e){return $r(e).replace(Fh,"%3D")}function Yh(e){return FLine truncated
${JSON.stringify(e)}${t?`
while being at
`+JSON.stringify(t):""}`},[it.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${em(t)}" via a navigation guard.`},[it.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[it.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[it.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function Xn(e,t){return Ge(new Error,{type:e,[zd]:!0},t)}function ln(e,t){return e instanceof Error&&zd in e&&(t==null||!!(e.type&t))}var xh=["params","query","hash"];function em(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let o of xh)o in e&&(t[o]=e[o]);return JSON.stringify(t,null,2)}function Hd(e){let t={};if(e===""||e==="?")return t;let o=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;i<o.length;++i){let s=o[i].replace(Td," "),r=s.indexOf("="),a=No(r<0?s:s.slice(0,r)),u=r<0?null:No(s.slice(r+1));if(a in t){let p=t[a];Lt(p)||(p=t[a]=[p]),p.push(u)}else t[a]=u}return t}function zr(e){let t="";for(let o in e){let i=e[o];if(o=jh(o),i==null){i!==void 0&&(t+=(t.length?"&":"")+o);continue}(Lt(i)?i.map(s=>s&&Mr(s)):[i&&Mr(i)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+o,s!=null&&(t+="="+s))})}return t}function jd(e){let t={};for(let o in e){let i=e[o];i!==void 0&&(t[o]=Lt(i)?i.map(s=>s==null?null:""+s):i==null?i:""+i)}return t}var Gd=Symbol(""),Hr=Symbol(""),wi=Symbol(""),ki=Symbol(""),Ci=Symbol("");function Do(){let e=[];function t(i){return e.push(i),()=>{let s=e.indexOf(i);s>-1&&e.splice(s,1)}}function o(){e=[]}return{add:t,list:()=>e.slice(),reset:o}}function yn(e,t,o,i,s,r=a=>a()){let a=i&&(i.enterCallbacks[s]=i.enterCallbacks[s]||[]);return()=>new Promise((u,p)=>{let y=h=>{h===!1?p(Xn(it.NAVIGATION_ABORTED,{from:o,to:t})):h instanceof Error?p(h):Zh(h)?p(Xn(it.NAVIGATION_GUARD_REDIRECT,{from:t,to:h})):(a&&i.enterCallbacks[s]===a&&typeof h=="function"&&a.push(h),u())},m=r(()=>e.call(i&&i.instances[s],t,o,y)),b=Promise.resolve(m);e.length<3&&(b=b.then(y)),b.catch(h=>p(h))})}function Ei(e,t,o,i,s=r=>r()){let r=[];for(let a of e)for(let u in a.components){let p=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(Dd(p)){let y=(p.__vccOpts||p)[t];y&&r.push(yn(y,o,i,a,u,s))}else{let y=p();r.push(()=>y.then(m=>{if(!m)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let b=Mh(m)?m.default:m;a.mods[u]=m,a.components[u]=b;let h=(b.__vccOpts||b)[t];return h&&yn(h,o,i,a,u,s)()}))}}return r}function Wd(e,t){let o=[],i=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let a=0;a<r;a++){let u=t.matched[a];u&&(e.matched.find(y=>Yn(y,u))?i.push(u):o.push(u));let p=e.matched[a];p&&(t.matched.find(y=>Yn(y,p))||s.push(p))}return[o,i,s]}var tm=()=>location.protocol+"//"+location.host;function ou(e,t){let{pathname:o,search:i,hash:s}=t,r=e.indexOf("#");if(r>-1){let a=s.includes(e.slice(r))?e.slice(r).length:1,u=s.slice(a);return u[0]!=="/"&&(u="/"+u),Lr(u,"")}return Lr(o,e)+i+s}function nm(e,t,o,i){let s=[],r=[],a=null,u=({state:h})=>{let w=ou(e,location),A=o.value,N=t.value,R=0;if(h){if(o.value=w,t.value=h,a&&a===A){a=null;return}R=N?h.position-N.position:0}else i(w);s.forEach(v=>{v(o.value,A,{delta:R,type:yi.pop,direction:R?R>0?bi.forward:bi.back:bi.unknown})})};function p(){a=o.value}function y(h){s.push(h);let w=()=>{let A=s.indexOf(h);A>-1&&s.splice(A,1)};return r.push(w),w}function m(){if(document.visibilityState==="hidden"){let{history:h}=window;if(!h.state)return;h.replaceState(Ge({},h.state,{scroll:ys()}),"")}}function b(){for(let h of r)h();r=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",m),document.removeEventListener("visibilitychange",m)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",m),document.addEventListener("visibilitychange",m),{pauseListeners:p,listen:y,destroy:b}}function Kd(e,t,o,i=!1,s=!1){return{back:e,current:t,forward:o,replaced:i,position:window.history.length,scroll:s?ys():null}}function om(e){let{history:t,location:o}=window,i={value:ou(e,o)},s={value:t.state};s.value||r(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(p,y,m){let b=e.indexOf("#"),h=b>-1?(o.host&&document.querySelector("base")?e:e.slice(b))+p:tm()+e+p;try{t[m?"replaceState":"pushState"](y,"",h),s.value=y}catch(w){console.error(w),o[m?"replace":"assign"](h)}}function a(p,y){r(p,Ge({},t.state,Kd(s.value.back,p,s.value.forward,!0),y,{position:s.value.position}),!0),i.value=p}function u(p,y){let m=Ge({},s.value,t.state,{forward:p,scroll:ys()});r(m.current,m,!0),r(p,Ge({},Kd(i.value,p,null),{position:m.position+1},y),!1),i.value=p}return{location:i,state:s,push:u,replace:a}}function su(e){e=$d(e);let t=om(e),o=nm(e,t.state,t.location,t.replace);function i(r,a=!0){a||o.pauseListeners(),history.go(r)}let s=Ge({locatLine truncated
`);for(let b=0;b<m.length;b++){let h=m[b];if(h.startsWith("diff --git")){y(),p();continue}if(h.startsWith("--- ")){r&&r.lines.length&&y(),p().oldPath=h.replace(/^--- (a\/)?/,"").trim();continue}if(h.startsWith("+++ ")){p().newPath=h.replace(/^\+\+\+ (b\/)?/,"").trim();continue}if(!(h.startsWith("index ")||h.startsWith("similarity index")||h.startsWith("rename ")||h.startsWith("new file mode")||h.startsWith("deleted file mode")||h.startsWith("Binary files"))){if(h.startsWith("@@")){let w=h.match(/@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);w&&(a=parseInt(w[1],10),u=parseInt(w[2],10)),p().lines.push({kind:"hunk",oldNo:"",newNo:"",text:h});continue}r&&(h.startsWith("+")?(r.lines.push({kind:"add",oldNo:"",newNo:u,text:h.slice(1)}),u++):h.startsWith("-")?(r.lines.push({kind:"remove",oldNo:a,newNo:"",text:h.slice(1)}),a++):(r.lines.push({kind:"ctx",oldNo:a,newNo:u,text:h.startsWith(" ")?h.slice(1):h}),a++,u++))}}return o(s,r),s.join("")}})({trustAsHtml:e=>e});function Tm(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function Pm(e,t="EUR"){let o=Number(e)||0;return new Intl.NumberFormat(void 0,{style:"currency",currency:t,minimumFractionDigits:o%1?2:0,maximumFractionDigits:2}).format(o)}function Om(e){return String(e??"").toUpperCase()}function Im(e,t,o=0){return(e||[]).slice(o,o+t)}function _m(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function Mm(e,t){if(!t)return e||[];let o=Array.isArray(t)?t:[t];return[...e||[]].sort((i,s)=>{for(let r of o){let a=r[0]==="-"?-1:1;r=r.replace(/^[+-]/,"");let u=r.split(".").reduce((y,m)=>y?.[m],i),p=r.split(".").reduce((y,m)=>y?.[m],s);if(typeof u=="string"&&(u=u.toLowerCase()),typeof p=="string"&&(p=p.toLowerCase()),u!==p)return(u==null?-1:p==null?1:u<p?-1:1)*a}return 0})}function Vm(e,t){if(!e)return"";let o=new Date(e);if(isNaN(o))return String(e);if(!t||t==="mediumDate")return o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});let i={yyyy:o.getFullYear(),MMM:o.toLocaleDateString(void 0,{month:"short"}),MM:String(o.getMonth()+1).padStart(2,"0"),dd:String(o.getDate()).padStart(2,"0"),d:o.getDate(),HH:String(o.getHours()).padStart(2,"0"),mm:String(o.getMinutes()).padStart(2,"0"),ss:String(o.getSeconds()).padStart(2,"0")};return t.replace(/yyyy|MMM|MM|dd|HH|mm|ss|d/g,s=>i[s])}function qm(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}function Yr(e){if(!e)return"";let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e)),o=t?new Date(+t[1],+t[2]-1,+t[3]):new Date(e);if(isNaN(o))return"";let i=o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}),s=new Date;s.setHours(0,0,0,0);let r=Math.round((o-s)/864e5),a;if(r===0)a="today";else if(r===1)a="tomorrow";else if(r===-1)a="yesterday";else{let u=Math.abs(r),p=Math.round(u/30.44),y=u<14?[u,"day"]:u<60?[Math.round(u/7),"week"]:p<18?[p,"month"]:[Math.round(u/365.25),"year"],m=y[0]+" "+y[1]+(y[0]===1?"":"s");a=r>0?"in "+m:m+" ago"}return i+" \xB7 "+a}function Zn(e){if(e==null||e===""||isNaN(e))return"";e=Number(e);let t="\u202F";if(e<1e3)return+(e<10?e.toFixed(2):e<100?e.toFixed(1):Math.round(e))+t+"ms";let o=e/1e3;if(o<60)return+(o<10?o.toFixed(2):o.toFixed(1))+t+"s";let i=r=>String(r).padStart(2,"0"),s=Math.round(o);return s<3600?Math.floor(s/60)+"m "+i(s%60)+"s":Math.floor(s/3600)+"h "+i(Math.floor(s%3600/60))+"m"}function Xr(e){if(!e)return"";let t=new Date(e);if(isNaN(t))return"";let o={day:"numeric",month:"short"};return t.getFullYear()!==new Date().getFullYear()&&(o.year="numeric"),t.toLocaleDateString(void 0,o)}var Ti=e=>["preparing","download","downloading","downloaded","queue","anonymizing"].includes(e)?"preparing":e==="expiring"?"expired":e==="removing"?"removed":e;function Pi(e,{flags:t,keys:o,count:i,onChange:s=()=>{}}){if(e.segView=()=>{let r=t()||{};if(o.every(u=>!!r[u]))return"all";let a=o.filter(u=>!!r[u]);return a.length===1?a[0]:"custom"},e.setSegView=r=>{let a=t();if(a){for(let u of o)a[u]=r==="all"?!0:u===r;s()}},e.segCount=r=>r==="all"?o.reduce((a,u)=>a+i(u),0):i(r),t()&&e.segView()==="custom")for(let r of o)t()[r]=!0}var uu=function(e,t,o){let i=Tt(),s=dn();vu(i,s),e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let r=N=>{if(N.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){N.preventDefault();let R=document.querySelector('.admin-filter-toolbar input[type="search"]');R&&R.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=N=>{N==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[N]="",e.query.page=1},e.chips=[];let a=()=>{let N=[];e.query.owner&&N.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&N.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=N};e.showSta Line truncated
`+N.join(`
`)],{type:"text/csv"}),v=document.createElement("a");v.href=URL.createObjectURL(R),v.download=i.username+"-repositories.csv",v.click()},e.showStatusMessage=h=>{let w=h.statusMessage||"(no message)";window.prompt(`Status message for ${h.repoId} (${h.status}):`,w)},e.fetchGithubInfo=h=>{let w=window.open("","_blank");w&&w.document.write("<pre>Loading GitHub info for "+h.repoId+"...</pre>"),t.get("/api/admin/repos/"+h.repoId+"/github").then(A=>{w&&(w.document.open(),w.document.write('<pre style="font:13px monospace;padding:16px;white-space:pre-wrap">'+JSON.stringify(A.data,null,2).replace(/[<>]/g,N=>N==="<"?"&lt;":"&gt;")+"</pre>"),w.document.close())},A=>{let N=A&&A.data?JSON.stringify(A.data,null,2):String(A);w&&(w.document.body.innerHTML='<pre style="color:#B42318;padding:16px">'+N+"</pre>")})};function p(h){t.get("/api/admin/users/"+h+"/repos",{}).then(w=>{e.repositories=w.data},w=>{console.error(w)})}function y(h){t.get("/api/admin/users/"+h,{}).then(w=>{e.userInfo=w.data},w=>{console.error(w)})}y(i.username),p(i.username),e.banUser=()=>{confirm(`Ban user ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/ban`).then(()=>y(i.username),h=>console.error(h))},e.activateUser=()=>{t.post(`/api/admin/users/${i.username}/activate`).then(()=>y(i.username),h=>console.error(h))},e.promoteUser=()=>{confirm(`Promote ${i.username} to admin?`)&&t.post(`/api/admin/users/${i.username}/promote`).then(()=>y(i.username),h=>console.error(h))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/demote`).then(()=>y(i.username),h=>console.error(h))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function m(){t.get("/api/admin/tokens").then(h=>{e.tokens=h.data||[]},h=>{h.status!==401&&h.status!==403&&console.error(h)})}m(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(h=>{e.tokenForm.plaintext=h.data.token,e.tokenForm.name="",m()},h=>console.error(h))},e.revokeToken=h=>{confirm(`Revoke token "${h.name}"?`)&&t.delete("/api/admin/tokens/"+h.id).then(()=>m(),w=>console.error(w))},e.removeCache=h=>{confirm("Remove cached files for "+h.repoId+"?")&&t.delete("/api/admin/repos/"+h.repoId).then(()=>p(i.username),w=>console.error(w))},e.removeRepository=h=>{confirm("Remove repository "+h.repoId+"?")&&t.delete("/api/repo/"+h.repoId+"/").then(()=>p(i.username),w=>console.error(w))},e.updateRepository=h=>{let w=nt({title:`Refreshing ${h.repoId}...`,date:new Date,body:`The repository ${h.repoId} is going to be refreshed.`});e.toasts.push(w),t.post(`/api/repo/${h.repoId}/refresh`).then(A=>{A.data.status=="ready"?w.title=`${h.repoId} is refreshed.`:w.title=`Refreshing of ${h.repoId}.`},A=>{w.title=`Error during the refresh of ${h.repoId}.`,w.body=A.body})},e.getGitHubRepositories=h=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(w=>{e.userInfo.repositories=w.data})};let b=null;e.watch("query",()=>{s.timeout.cancel(b),b=s.timeout(()=>{p(i.username)},500)},!0)},fu=function(e,t,o){let i=Tt(),s=dn();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let r=A=>{if(A.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){A.preventDefault();let N=document.querySelector('.admin-filter-toolbar input[type="search"]');N&&N.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=A=>{A==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[A]="",e.query.page=1},e.chips=[];let a=()=>{let A=[];(e.query.dateFrom||e.query.dateTo)&&A.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=A};e.statusCountFor=A=>{let N=(e.statusCounts||[]).find(R=>R._id===A);return N?N.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=A=>{e.query.sort===A?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=A,e.query.direction="desc"),e.query.page=1},e.sortIcon=A=>e.query.sort===A?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",p={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!0,expired:!0,removed:!0,error:!0,preparing:!0},y=loadFilterPrefs(u)||{};e.query=Object.assign({},p,y,{page:1,search:""});let m=o.search();m.search&&(e.query.search=m.search);let b="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(b)||"[]"),e.savePreset=()=>{let A=window.prompt("Preset name:");if(!A)return;let N=Object.assign({},e.query);delete N.page,e.presets=(e.presets||[]).filter(R=>R.name!==A),e.presets.push({name:A,query:N}),localStorage.setItem(b,JSON.stringify(e.presets))},e.applyPreset=A=>{Object.assign(e.query,A.query,{page:1})},e.deletePreset=A=>{e.presets=(e.presets||[]).filter(N=>N.name!==A.name),localStorage.setItem(b,JS Line truncated
`).map((le,fe)=>fe===0?le:be+le).join(`
`)}else typeof ne=="number"||typeof ne=="boolean"?Ae=String(ne):Ae=JSON.stringify(ne);se.push(`${oe}${Ae}${x}`)}),se.push("}"),se.join(`
`)}function y(v){let C=[],I="",V=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,q=0,W;for(;W=V.exec(v);)I+=v.slice(q,W.index),q=V.lastIndex,C.push({key:W[1],op:W[2]||"=",val:W[3]});return I+=v.slice(q),{filters:C,free:I.trim().toLowerCase()}}function m(v,C){for(let I of C.filters){let V=(W,se,Q)=>{let ne=parseFloat(W),Ee=parseFloat(se);return Q==="="?String(W)===String(se):Q==="!="?String(W)!==String(se):Q===">="?ne>=Ee:Q==="<="?ne<=Ee:Q===">"?ne>Ee:Q==="<"?ne<Ee:!0},q;if(I.key==="code")q=v.displayMessage;else if(I.key==="module")q=v.module;else if(I.key==="status")q=v._status;else if(I.key==="url")q=v._url;else if(I.key==="repo")q=v._repoId;else if(I.key==="level")q=v.level;else continue;if(q==null||!V(q,I.val,I.op))return!1}return!(C.free&&((v.displayMessage||"")+" "+(v.module||"")+" "+(v._url||"")+" "+JSON.stringify(v.raw||[])).toLowerCase().indexOf(C.free)===-1)}function b(){let v=y(e.query.search||"");e.parsedFilterCount=v.filters.length;let C=e.query.bucket,I=e.entries.filter(Q=>C&&Q._bucket!==C?!1:m(Q,v)),V=e.query.group;if(V){let Q=D=>V==="module"?D.module:D.displayMessage||D.message||"_",ne=new Map;for(let D of I){let oe=Q(D);if(ne.has(oe)){let x=ne.get(oe);x.count++,x._related.push(D),new Date(D.ts)>new Date(x.ts)&&(x.ts=D.ts,x._url=D._url,x._status=D._status),new Date(D.ts)<new Date(x._firstSeen)&&(x._firstSeen=D.ts)}else{let x=Object.assign({},D);x._key=`${V}:${oe}`,x._related=[D],x._firstSeen=D.ts,x._lastHourCount=0,x.count=1,ne.set(oe,x)}}let Ee=Date.now()-3600*1e3;for(let D of ne.values())D._lastHourCount=D._related.filter(oe=>new Date(oe.ts).getTime()>=Ee).length;I=Array.from(ne.values())}else I=I.map((Q,ne)=>(Q._key="row:"+ne+":"+Q.ts,Q._related=[Q],Q._firstSeen=Q.ts,Q._lastHourCount=0,Q.count=1,Q));let q=Q=>({error:0,warn:1,info:2})[Q._bucket]??1;e.query.sort==="count"?I.sort((Q,ne)=>q(Q)-q(ne)||ne.count-Q.count||new Date(ne.ts)-new Date(Q.ts)):I.sort((Q,ne)=>q(Q)-q(ne)||new Date(ne.ts)-new Date(Q.ts)),e.visible=I;let W=!!(e.query.bucket||(e.query.search||"").trim()),se=!W&&(e.stats?.severity?.error||0)>0&&!I.some(Q=>Q._bucket==="error")&&e.entries.length<1500;(W&&!I.length||se)&&e.canLoadMore?.()&&!e._autoLoading&&e.entries.length<2500&&(e._autoLoading=!0,h(!0))}function h(v){let C=v?e.entries.length:0,I=v?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:C,limit:I}}).then(V=>{let q=(V.data.entries||[]).map(u);e.entries=v?e.entries.concat(q):q,e.available=!!V.data.available,e.cap=V.data.max||e.cap,e.total=V.data.total||e.entries.length,e._autoLoading=!1,b()},V=>{e._autoLoading=!1,console.error(V)})}e.loadMore=()=>h(!0),e.canLoadMore=()=>e.entries.length<e.total;function w(){t.get("/api/admin/errors/stats").then(v=>{let C=v.data||{},I=C.prev24h?Math.round((C.last24h-C.prev24h)/C.prev24h*100):0;e.stats={last24h:C.last24h||0,prev24h:C.prev24h||0,delta:I,severity:C.severity||{error:0,warn:0,info:0},unique:C.unique||{error:0,warn:0,info:0},buckets:C.buckets||[],dropped:C.dropped||0},b()},v=>console.error(v))}function A(){h(),w()}e.barPx=(v,C)=>{let I=e.stats.buckets||[],V=0,q=0;for(let ne of I)V=Math.max(V,(ne.error||0)+(ne.warn||0)),q=Math.max(q,ne.info||0);let W=v[C]||0;if(!W)return 0;if(C==="info")return q?Math.max(2,Math.round(W/q*(V?16:60))):0;let se=(v.error||0)+(v.warn||0),Q=Math.round(se/V*44);return Math.max(4,Math.round(W/se*Q))},e.bucketTitle=v=>`${new Date(v.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${v.error||0} err \xB7 ${v.warn||0} warn \xB7 ${v.info||0} info`,e.toggle=v=>{e.expanded[v._key]=!e.expanded[v._key]},e.setBucket=v=>{e.query.bucket=v},e.refreshNow=A,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(A,v=>console.error(v))},e.exportCsv=()=>{let v=["ts","level","module","displayMessage","_status","_url","_repoId"],C=[v.join(",")];for(let W of e.visible)C.push(v.map(se=>{let Q=W[se]==null?"":String(W[se]);return/[",\n]/.test(Q)?`"${Q.replace(/"/g,'""')}"`:Q}).join(","));let I=new Blob([C.join(`
`)],{type:"text/csv;charset=utf-8"}),V=URL.createObjectURL(I),q=document.createElement("a");q.href=V,q.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(q),q.click(),document.body.removeChild(q),URL.revokeObjectURL(V)};function N(v){e.copyHint=`${v} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=v=>{navigator.clipboard.writeText(v._detailJson).then(()=>N("JSON"))},e.copyCurl=v=>{if(!v._url)return;let I=`curl -X ${v._method||"GET"} '${window.location.origin}${v._url}'`;navigator.clipboard.writeText(I).then(()=>N("curl"))},A();let R=i(()=>{e.query.autoRefresh&&A()},15e3);e.on("dispose",()=>i.cancel(R)),e.watch("query.search",b),e.watch("query.bucket",b),e.watch("query.sort",b),e.watch("query.group",b)},gu=function(e,t,o,i){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null){o.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.cacheReport=null,e.cacheError=null,e.cacheMinutes=60,e.cacheTraffic="all",e.ovView=["performance","cache"].includes((window.location.hash||"").slice(1))?window.location.hash.slice(1):"summary",e.setOvView=function(v){e.ovView=v;try{window.history.replaceState(null,"",v==="summary"?window.location.pathname:"#"+v)}catch{}};var s=!1;e.loadCache=function(){if(!s){s=!0;var v=e.cacheMinutes;t.get("/api/admin/cache",{params:{minutes:v}}).then(function(C){v===e.cacheMinutes&&(e.cacheReport=C.data,e.cacheError=C.data.available?null:C.data.reason||"Cache monitoring is unavailable.")},function(){e.cacheError="Could not refresh cache monitoring. Displayed values may be stale."}).finally(function(){s=!1,v!==e.cacheMinutes&&e.loadCache()})}},e.cacheRows=function(){return(e.cacheReport?.rows||[]).filter(function(v){return e.cacheTraffic==="all"||v.traffic===e.cacheTraffic})},e.cacheRate=function(v,C){var I=e.cacheRows(),V=function(se){return I.filter(function(Q){return Q.name===se}).reduce(function(Q,ne){return Q+ne[C]},0)},q=V(v+"_hit"),W=V(v+"_miss");return q+W?(100*q/(q+W)).toFixed(1)+"%":"No samples"},e.cacheEventName=function(v){return v.replaceAll("_"," ")},e.cacheP95=function(v){var C=0,I=e.cacheReport?.latencyBucketsMs||[];if(!v.count)return"No samples";if(!v.ms)return"Not timed";for(var V=0;V<=I.length;V++)if(C+=v["b"+V]||0,C>=Math.ceil(v.count*.95))return V<I.length?"\u2264 "+Zn(I[V]):"> 10\u202Fs";return"No samples"},e.healthAlert=function(){let v=e.data&&e.data.system||{},C=[["Memory",v.memPercent],["Disk",v.diskPercent]].filter(([,V])=>V>90);return C.length?C.map(([V,q])=>V+" is at "+q+"%").join(" and ")+". New anonymizations may fail until "+(C.length>1?"they drop.":"it drops."):""},e.performanceError=null,e.formatMs=function(v){return v==null?"":Zn(v)},e.latencyBound=function(v,C){return v.count?v[C]==null?"> 60\u202Fs":"\u2264 "+e.formatMs(v[C]):"No samples"},e.firstByteBound=function(v){return e.latencyBound({count:v.firstByteCount,p95UpperMs:v.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(v){return Math.max(0,Math.round((Date.now()-v.sampledAt)/1e3))},e.peakRss=function(v){return(e.performance.runtimeSeries||[]).filter(function(C){return C.instance===v.instance}).reduce(function(C,I){return Math.max(C,I.rss)},v.memory.rss)},e.performanceWarning=function(v){return e.sampleAge(v)>45||v.droppedBatches||v.droppedMetrics||v.sockets?.closeWait>0||v.eventLoop?.p95Ms>100||v.memoryLimitBytes&&v.memory.rss>v.memoryLimitBytes*.8};var r=!1;e.loadPerformance=function(){var v=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==v&&(e.performance=null),!r&&(r=!0,t.get("/api/admin/performance",{params:{minutes:v}}).then(function(C){v===e.performanceMinutes&&(e.performance=C.data,e.performanceError=C.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){v===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){r=!1,v!==e.performanceMinutes&&e.loadPerformance()}))};function a(v){if(v==null)return"\u2014";for(var C=["B","KB","MB","GB","TB"],I=0,V=v;V>=1024&&I<C.length-1;)V/=1024,I++;return V.toFixed(I>0?1:0).replace(/\.0$/,"")+" "+C[I]}e.humanBytes=a;function u(v){if(!v)return"\u2014";var C=Math.floor(v/86400),I=Math.floor(v%86400/3600),V=Math.floor(v%3600/60);return C>0?C+"d "+(I<10?"0":"")+I+"h":I>0?I+"h "+(V<10?"0":"")+V+"m":V+"m"}e.humanDuration=u;function p(v){return v==null?"\u2014":v>=1e6?(v/1e6).toFixed(1)+"M":v>=1e3?(v/1e3).toFixed(1)+"K":String(v)}e.humanNum=p,e.queueTotal=function(v){return v?(v.waiting||0)+(v.active||0)+(v.delayed||0)+(v.failed||0):0},e.statusCount=function(v){if(!e.data||!e.data.repos)return 0;for(var C=e.data.repos.statusBreakdown||[],I=0;I<C.length;I++)if(C[I]._id===v)return C[I].count;return 0},e.barPct=function(v){var C=e.data&&e.data.repos?e.data.repos.total:0;if(!C)return 0;var I=[v];v==="expired"&&I.push("expiring"),v==="removed"&&I.push("re Line truncated
`+JSON.stringify(t):""}`},[rt.NAVIGATION_GUARD_REDIRECT]({from:e,to:t}){return`Redirected from "${e.fullPath}" to "${om(t)}" via a navigation guard.`},[rt.NAVIGATION_ABORTED]({from:e,to:t}){return`Navigation aborted from "${e.fullPath}" to "${t.fullPath}" via a navigation guard.`},[rt.NAVIGATION_CANCELLED]({from:e,to:t}){return`Navigation cancelled from "${e.fullPath}" to "${t.fullPath}" with a new navigation.`},[rt.NAVIGATION_DUPLICATED]({from:e,to:t}){return`Avoided redundant navigation to current location: "${e.fullPath}".`}};function Zn(e,t){return We(new Error,{type:e,[Gd]:!0},t)}function pn(e,t){return e instanceof Error&&Gd in e&&(t==null||!!(e.type&t))}var nm=["params","query","hash"];function om(e){if(typeof e=="string")return e;if(e.path!=null)return e.path;let t={};for(let o of nm)o in e&&(t[o]=e[o]);return JSON.stringify(t,null,2)}function Wd(e){let t={};if(e===""||e==="?")return t;let o=(e[0]==="?"?e.slice(1):e).split("&");for(let i=0;i<o.length;++i){let s=o[i].replace(Id," "),r=s.indexOf("="),a=Ao(r<0?s:s.slice(0,r)),u=r<0?null:Ao(s.slice(r+1));if(a in t){let p=t[a];zt(p)||(p=t[a]=[p]),p.push(u)}else t[a]=u}return t}function Gr(e){let t="";for(let o in e){let i=e[o];if(o=Kh(o),i==null){i!==void 0&&(t+=(t.length?"&":"")+o);continue}(zt(i)?i.map(s=>s&&$r(s)):[i&&$r(i)]).forEach(s=>{s!==void 0&&(t+=(t.length?"&":"")+o,s!=null&&(t+="="+s))})}return t}function Kd(e){let t={};for(let o in e){let i=e[o];i!==void 0&&(t[o]=zt(i)?i.map(s=>s==null?null:""+s):i==null?i:""+i)}return t}var Yd=Symbol(""),Wr=Symbol(""),Ei=Symbol(""),Si=Symbol(""),Ni=Symbol("");function Po(){let e=[];function t(i){return e.push(i),()=>{let s=e.indexOf(i);s>-1&&e.splice(s,1)}}function o(){e=[]}return{add:t,list:()=>e.slice(),reset:o}}function kn(e,t,o,i,s,r=a=>a()){let a=i&&(i.enterCallbacks[s]=i.enterCallbacks[s]||[]);return()=>new Promise((u,p)=>{let y=m=>{m===!1?p(Zn(rt.NAVIGATION_ABORTED,{from:o,to:t})):m instanceof Error?p(m):tm(m)?p(Zn(rt.NAVIGATION_GUARD_REDIRECT,{from:t,to:m})):(a&&i.enterCallbacks[s]===a&&typeof m=="function"&&a.push(m),u())},h=r(()=>e.call(i&&i.instances[s],t,o,y)),b=Promise.resolve(h);e.length<3&&(b=b.then(y)),b.catch(m=>p(m))})}function Ri(e,t,o,i,s=r=>r()){let r=[];for(let a of e)for(let u in a.components){let p=a.components[u];if(!(t!=="beforeRouteEnter"&&!a.instances[u]))if(Pd(p)){let y=(p.__vccOpts||p)[t];y&&r.push(kn(y,o,i,a,u,s))}else{let y=p();r.push(()=>y.then(h=>{if(!h)throw new Error(`Couldn't resolve component "${u}" at "${a.path}"`);let b=$h(h)?h.default:h;a.mods[u]=h,a.components[u]=b;let m=(b.__vccOpts||b)[t];return m&&kn(m,o,i,a,u,s)()}))}}return r}function Xd(e,t){let o=[],i=[],s=[],r=Math.max(t.matched.length,e.matched.length);for(let a=0;a<r;a++){let u=t.matched[a];u&&(e.matched.find(y=>Jn(y,u))?i.push(u):o.push(u));let p=e.matched[a];p&&(t.matched.find(y=>Jn(y,p))||s.push(p))}return[o,i,s]}var sm=()=>location.protocol+"//"+location.host;function ru(e,t){let{pathname:o,search:i,hash:s}=t,r=e.indexOf("#");if(r>-1){let a=s.includes(e.slice(r))?e.slice(r).length:1,u=s.slice(a);return u[0]!=="/"&&(u="/"+u),Br(u,"")}return Br(o,e)+i+s}function im(e,t,o,i){let s=[],r=[],a=null,u=({state:m})=>{let w=ru(e,location),A=o.value,S=t.value,R=0;if(m){if(o.value=w,t.value=m,a&&a===A){a=null;return}R=S?m.position-S.position:0}else i(w);s.forEach(g=>{g(o.value,A,{delta:R,type:ki.pop,direction:R?R>0?Ci.forward:Ci.back:Ci.unknown})})};function p(){a=o.value}function y(m){s.push(m);let w=()=>{let A=s.indexOf(m);A>-1&&s.splice(A,1)};return r.push(w),w}function h(){if(document.visibilityState==="hidden"){let{history:m}=window;if(!m.state)return;m.replaceState(We({},m.state,{scroll:ks()}),"")}}function b(){for(let m of r)m();r=[],window.removeEventListener("popstate",u),window.removeEventListener("pagehide",h),document.removeEventListener("visibilitychange",h)}return window.addEventListener("popstate",u),window.addEventListener("pagehide",h),document.addEventListener("visibilitychange",h),{pauseListeners:p,listen:y,destroy:b}}function Qd(e,t,o,i=!1,s=!1){return{back:e,current:t,forward:o,replaced:i,position:window.history.length,scroll:s?ks():null}}function rm(e){let{history:t,location:o}=window,i={value:ru(e,o)},s={value:t.state};s.value||r(i.value,{back:null,current:i.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0);function r(p,y,h){let b=e.indexOf("#"),m=b>-1?(o.host&&document.querySelector("base")?e:e.slice(b))+p:sm()+e+p;try{t[h?"replaceState":"pushState"](y,"",m),s.value=y}catch(w){console.error(w),o[h?"replace":"assign"](m)}}function a(p,y){r(p,We({},t.state,Qd(s.value.back,p,s.value.forward,!0),y,{position:s.value.position}),!0),i.value=p}function u(p,y){let h=We({},s.value,t.state,{forward:p,scroll:ks()});r(h.current,h,!0),r(p,We({},Qd(i.value,p,null),{position:h.position+1},y),!1),i.value=p}return{location:i,state:s,push:u,replace:a}}function au(e){e=Fd(e);let t=rm(e),o=im(e,t.state,t.location,t.replace);function i(r,a=!0){a||o.pauseListeners(),history.go(r)}let s=We({locatLine truncated
`);for(let b=0;b<h.length;b++){let m=h[b];if(m.startsWith("diff --git")){y(),p();continue}if(m.startsWith("--- ")){r&&r.lines.length&&y(),p().oldPath=m.replace(/^--- (a\/)?/,"").trim();continue}if(m.startsWith("+++ ")){p().newPath=m.replace(/^\+\+\+ (b\/)?/,"").trim();continue}if(!(m.startsWith("index ")||m.startsWith("similarity index")||m.startsWith("rename ")||m.startsWith("new file mode")||m.startsWith("deleted file mode")||m.startsWith("Binary files"))){if(m.startsWith("@@")){let w=m.match(/@@\s+-(\d+)(?:,\d+)?\s+\+(\d+)(?:,\d+)?\s+@@/);w&&(a=parseInt(w[1],10),u=parseInt(w[2],10)),p().lines.push({kind:"hunk",oldNo:"",newNo:"",text:m});continue}r&&(m.startsWith("+")?(r.lines.push({kind:"add",oldNo:"",newNo:u,text:m.slice(1)}),u++):m.startsWith("-")?(r.lines.push({kind:"remove",oldNo:a,newNo:"",text:m.slice(1)}),a++):(r.lines.push({kind:"ctx",oldNo:a,newNo:u,text:m.startsWith(" ")?m.slice(1):m}),a++,u++))}}return o(s,r),s.join("")}})({trustAsHtml:e=>e});function Im(e,t){return e==null?"":Number(e).toLocaleString(void 0,t==null?{}:{minimumFractionDigits:t,maximumFractionDigits:t})}function Mm(e,t="EUR"){let o=Number(e)||0;return new Intl.NumberFormat(void 0,{style:"currency",currency:t,minimumFractionDigits:o%1?2:0,maximumFractionDigits:2}).format(o)}function _m(e){return String(e??"").toUpperCase()}function Vm(e,t,o=0){return(e||[]).slice(o,o+t)}function qm(e,t){return Array.isArray(e)?typeof t=="function"?e.filter(t):e:[]}function $m(e,t){if(!t)return e||[];let o=Array.isArray(t)?t:[t];return[...e||[]].sort((i,s)=>{for(let r of o){let a=r[0]==="-"?-1:1;r=r.replace(/^[+-]/,"");let u=r.split(".").reduce((y,h)=>y?.[h],i),p=r.split(".").reduce((y,h)=>y?.[h],s);if(typeof u=="string"&&(u=u.toLowerCase()),typeof p=="string"&&(p=p.toLowerCase()),u!==p)return(u==null?-1:p==null?1:u<p?-1:1)*a}return 0})}function Lm(e,t){if(!e)return"";let o=new Date(e);if(isNaN(o))return String(e);if(!t||t==="mediumDate")return o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"});let i={yyyy:o.getFullYear(),MMM:o.toLocaleDateString(void 0,{month:"short"}),MM:String(o.getMonth()+1).padStart(2,"0"),dd:String(o.getDate()).padStart(2,"0"),d:o.getDate(),HH:String(o.getHours()).padStart(2,"0"),mm:String(o.getMinutes()).padStart(2,"0"),ss:String(o.getSeconds()).padStart(2,"0")};return t.replace(/yyyy|MMM|MM|dd|HH|mm|ss|d/g,s=>i[s])}function Um(e,t){return(t?.[e]??t?.[e===1?"one":"other"]??"").replace(/\{\}/g,e??0)}function Jr(e){if(!e)return"";let t=/^(\d{4})-(\d{2})-(\d{2})$/.exec(String(e)),o=t?new Date(+t[1],+t[2]-1,+t[3]):new Date(e);if(isNaN(o))return"";let i=o.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"}),s=new Date;s.setHours(0,0,0,0);let r=Math.round((o-s)/864e5),a;if(r===0)a="today";else if(r===1)a="tomorrow";else if(r===-1)a="yesterday";else{let u=Math.abs(r),p=Math.round(u/30.44),y=u<14?[u,"day"]:u<60?[Math.round(u/7),"week"]:p<18?[p,"month"]:[Math.round(u/365.25),"year"],h=y[0]+" "+y[1]+(y[0]===1?"":"s");a=r>0?"in "+h:h+" ago"}return i+" \xB7 "+a}function to(e){if(e==null||e===""||isNaN(e))return"";e=Number(e);let t="\u202F";if(e<1e3)return+(e<10?e.toFixed(2):e<100?e.toFixed(1):Math.round(e))+t+"ms";let o=e/1e3;if(o<60)return+(o<10?o.toFixed(2):o.toFixed(1))+t+"s";let i=r=>String(r).padStart(2,"0"),s=Math.round(o);return s<3600?Math.floor(s/60)+"m "+i(s%60)+"s":Math.floor(s/3600)+"h "+i(Math.floor(s%3600/60))+"m"}function Zr(e){if(!e)return"";let t=new Date(e);if(isNaN(t))return"";let o={day:"numeric",month:"short"};return t.getFullYear()!==new Date().getFullYear()&&(o.year="numeric"),t.toLocaleDateString(void 0,o)}var Ii=e=>["preparing","download","downloading","downloaded","queue","anonymizing"].includes(e)?"preparing":e==="expiring"?"expired":e==="removing"?"removed":e;function Mi(e,{flags:t,keys:o,count:i,onChange:s=()=>{}}){if(e.segView=()=>{let r=t()||{};if(o.every(u=>!!r[u]))return"all";let a=o.filter(u=>!!r[u]);return a.length===1?a[0]:"custom"},e.setSegView=r=>{let a=t();if(a){for(let u of o)a[u]=r==="all"?!0:u===r;s()}},e.segCount=r=>r==="all"?o.reduce((a,u)=>a+i(u),0):i(r),t()&&e.segView()==="custom")for(let r of o)t()[r]=!0}var fu=function(e,t,o){let i=Tt(),s=Qt();wu(i,s),e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.repositories=[],e.total=-1,e.totalPage=0,e.statusCounts=[],e.totalSize=0,e.selected={},e.allSelected=!1;let r=S=>{if(S.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){S.preventDefault();let R=document.querySelector('.admin-filter-toolbar input[type="search"]');R&&R.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=S=>{S==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[S]="",e.query.page=1},e.chips=[];let a=()=>{let S=[];e.query.owner&&S.push({key:"owner",label:"Owner",value:e.query.owner}),e.query.conference&&S.push({key:"conference",label:"Conference",value:e.query.conference}),e.chips=S};e.showSta Line truncated
`+S.join(`
`)],{type:"text/csv"}),g=document.createElement("a");g.href=URL.createObjectURL(R),g.download=i.username+"-repositories.csv",g.click()},e.showStatusMessage=m=>{let w=m.statusMessage||"(no message)";window.prompt(`Status message for ${m.repoId} (${m.status}):`,w)},e.fetchGithubInfo=m=>{let w=window.open("","_blank");w&&w.document.write("<pre>Loading GitHub info for "+m.repoId+"...</pre>"),t.get("/api/admin/repos/"+m.repoId+"/github").then(A=>{w&&(w.document.open(),w.document.write('<pre style="font:13px monospace;padding:16px;white-space:pre-wrap">'+JSON.stringify(A.data,null,2).replace(/[<>]/g,S=>S==="<"?"&lt;":"&gt;")+"</pre>"),w.document.close())},A=>{let S=A&&A.data?JSON.stringify(A.data,null,2):String(A);w&&(w.document.body.innerHTML='<pre style="color:#B42318;padding:16px">'+S+"</pre>")})};function p(m){t.get("/api/admin/users/"+m+"/repos",{}).then(w=>{e.repositories=w.data},w=>{console.error(w)})}function y(m){t.get("/api/admin/users/"+m,{}).then(w=>{e.userInfo=w.data},w=>{console.error(w)})}y(i.username),p(i.username),e.banUser=()=>{confirm(`Ban user ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/ban`).then(()=>y(i.username),m=>console.error(m))},e.activateUser=()=>{t.post(`/api/admin/users/${i.username}/activate`).then(()=>y(i.username),m=>console.error(m))},e.promoteUser=()=>{confirm(`Promote ${i.username} to admin?`)&&t.post(`/api/admin/users/${i.username}/promote`).then(()=>y(i.username),m=>console.error(m))},e.demoteUser=()=>{confirm(`Remove admin privileges from ${i.username}?`)&&t.post(`/api/admin/users/${i.username}/demote`).then(()=>y(i.username),m=>console.error(m))},e.tokens=[],e.tokenForm={name:"",plaintext:null};function h(){t.get("/api/admin/tokens").then(m=>{e.tokens=m.data||[]},m=>{m.status!==401&&m.status!==403&&console.error(m)})}h(),e.createToken=()=>{e.tokenForm.name&&t.post("/api/admin/tokens",{name:e.tokenForm.name}).then(m=>{e.tokenForm.plaintext=m.data.token,e.tokenForm.name="",h()},m=>console.error(m))},e.revokeToken=m=>{confirm(`Revoke token "${m.name}"?`)&&t.delete("/api/admin/tokens/"+m.id).then(()=>h(),w=>console.error(w))},e.removeCache=m=>{confirm("Remove cached files for "+m.repoId+"?")&&t.delete("/api/admin/repos/"+m.repoId).then(()=>p(i.username),w=>console.error(w))},e.removeRepository=m=>{confirm("Remove repository "+m.repoId+"?")&&t.delete("/api/repo/"+m.repoId+"/").then(()=>p(i.username),w=>console.error(w))},e.updateRepository=m=>{let w=ot({title:`Refreshing ${m.repoId}...`,date:new Date,body:`The repository ${m.repoId} is going to be refreshed.`});e.toasts.push(w),t.post(`/api/repo/${m.repoId}/refresh`).then(A=>{A.data.status=="ready"?w.title=`${m.repoId} is refreshed.`:w.title=`Refreshing of ${m.repoId}.`},A=>{w.title=`Error during the refresh of ${m.repoId}.`,w.body=A.body})},e.getGitHubRepositories=m=>{t.get(`/api/user/${e.userInfo.username}/all_repositories`,{params:{force:"1"}}).then(w=>{e.userInfo.repositories=w.data})};let b=null;e.watch("query",()=>{s.timeout.cancel(b),b=s.timeout(()=>{p(i.username)},500)},!0)},gu=function(e,t,o){let i=Tt(),s=Qt();e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),e.conferences=[],e.total=-1,e.totalPage=0,e.statusCounts=[];let r=A=>{if(A.key==="/"&&!["INPUT","TEXTAREA","SELECT"].includes(document.activeElement?.tagName)){A.preventDefault();let S=document.querySelector('.admin-filter-toolbar input[type="search"]');S&&S.focus()}};s(document,"keydown",r),e.on("dispose",()=>document.removeEventListener("keydown",r)),e.clearFilter=A=>{A==="dateRange"?(e.query.dateFrom="",e.query.dateTo=""):e.query[A]="",e.query.page=1},e.chips=[];let a=()=>{let A=[];(e.query.dateFrom||e.query.dateTo)&&A.push({key:"dateRange",label:"Date",value:(e.query.dateFrom||"\u2026")+" \u2013 "+(e.query.dateTo||"\u2026")}),e.chips=A};e.statusCountFor=A=>{let S=(e.statusCounts||[]).find(R=>R._id===A);return S?S.count:0},e.toggleSortDirection=()=>{e.query.direction=e.query.direction==="asc"?"desc":"asc"},e.sortBy=A=>{e.query.sort===A?e.query.direction=e.query.direction==="asc"?"desc":"asc":(e.query.sort=A,e.query.direction="desc"),e.query.page=1},e.sortIcon=A=>e.query.sort===A?e.query.direction==="asc"?"fa-arrow-up":"fa-arrow-down":"";let u="admin.conferences.filterPrefs",p={page:1,limit:25,sort:"name",direction:"asc",search:"",dateFrom:"",dateTo:"",ready:!0,expired:!0,removed:!0,error:!0,preparing:!0},y=loadFilterPrefs(u)||{};e.query=Object.assign({},p,y,{page:1,search:""});let h=o.search();h.search&&(e.query.search=h.search);let b="admin.conferences.presets";e.presets=JSON.parse(localStorage.getItem(b)||"[]"),e.savePreset=()=>{let A=window.prompt("Preset name:");if(!A)return;let S=Object.assign({},e.query);delete S.page,e.presets=(e.presets||[]).filter(R=>R.name!==A),e.presets.push({name:A,query:S}),localStorage.setItem(b,JSON.stringify(e.presets))},e.applyPreset=A=>{Object.assign(e.query,A.query,{page:1})},e.deletePreset=A=>{e.presets=(e.presets||[]).filter(S=>S.name!==A.name),localStorage.setItem(b,JS Line truncated
`).map((J,ce)=>ce===0?J:we+J).join(`
`)}else typeof oe=="number"||typeof oe=="boolean"?Pe=String(oe):Pe=JSON.stringify(oe);ne.push(`${te}${Pe}${ue}`)}),ne.push("}"),ne.join(`
`)}function y(g){let C=[],M="",V=/(\w+):(>=|<=|!=|>|<|=)?([^\s]+)/g,q=0,j;for(;j=V.exec(g);)M+=g.slice(q,j.index),q=V.lastIndex,C.push({key:j[1],op:j[2]||"=",val:j[3]});return M+=g.slice(q),{filters:C,free:M.trim().toLowerCase()}}function h(g,C){for(let M of C.filters){let V=(j,ne,Y)=>{let oe=parseFloat(j),Ce=parseFloat(ne);return Y==="="?String(j)===String(ne):Y==="!="?String(j)!==String(ne):Y===">="?oe>=Ce:Y==="<="?oe<=Ce:Y===">"?oe>Ce:Y==="<"?oe<Ce:!0},q;if(M.key==="code")q=g.displayMessage;else if(M.key==="module")q=g.module;else if(M.key==="status")q=g._status;else if(M.key==="url")q=g._url;else if(M.key==="repo")q=g._repoId;else if(M.key==="level")q=g.level;else continue;if(q==null||!V(q,M.val,M.op))return!1}return!(C.free&&((g.displayMessage||"")+" "+(g.module||"")+" "+(g._url||"")+" "+JSON.stringify(g.raw||[])).toLowerCase().indexOf(C.free)===-1)}function b(){let g=y(e.query.search||"");e.parsedFilterCount=g.filters.length;let C=e.query.bucket,M=e.entries.filter(Y=>C&&Y._bucket!==C?!1:h(Y,g)),V=e.query.group;if(V){let Y=D=>V==="module"?D.module:D.displayMessage||D.message||"_",oe=new Map;for(let D of M){let te=Y(D);if(oe.has(te)){let ue=oe.get(te);ue.count++,ue._related.push(D),new Date(D.ts)>new Date(ue.ts)&&(ue.ts=D.ts,ue._url=D._url,ue._status=D._status),new Date(D.ts)<new Date(ue._firstSeen)&&(ue._firstSeen=D.ts)}else{let ue=Object.assign({},D);ue._key=`${V}:${te}`,ue._related=[D],ue._firstSeen=D.ts,ue._lastHourCount=0,ue.count=1,oe.set(te,ue)}}let Ce=Date.now()-3600*1e3;for(let D of oe.values())D._lastHourCount=D._related.filter(te=>new Date(te.ts).getTime()>=Ce).length;M=Array.from(oe.values())}else M=M.map((Y,oe)=>(Y._key="row:"+oe+":"+Y.ts,Y._related=[Y],Y._firstSeen=Y.ts,Y._lastHourCount=0,Y.count=1,Y));let q=Y=>({error:0,warn:1,info:2})[Y._bucket]??1;e.query.sort==="count"?M.sort((Y,oe)=>q(Y)-q(oe)||oe.count-Y.count||new Date(oe.ts)-new Date(Y.ts)):M.sort((Y,oe)=>q(Y)-q(oe)||new Date(oe.ts)-new Date(Y.ts)),e.visible=M;let j=!!(e.query.bucket||(e.query.search||"").trim()),ne=!j&&(e.stats?.severity?.error||0)>0&&!M.some(Y=>Y._bucket==="error")&&e.entries.length<1500;(j&&!M.length||ne)&&e.canLoadMore?.()&&!e._autoLoading&&e.entries.length<2500&&(e._autoLoading=!0,m(!0))}function m(g){let C=g?e.entries.length:0,M=g?e.pageSize:Math.max(e.pageSize,e.entries.length||e.pageSize);t.get("/api/admin/errors",{params:{offset:C,limit:M}}).then(V=>{let q=(V.data.entries||[]).map(u);e.entries=g?e.entries.concat(q):q,e.available=!!V.data.available,e.cap=V.data.max||e.cap,e.total=V.data.total||e.entries.length,e._autoLoading=!1,b()},V=>{e._autoLoading=!1,console.error(V)})}e.loadMore=()=>m(!0),e.canLoadMore=()=>e.entries.length<e.total;function w(){t.get("/api/admin/errors/stats").then(g=>{let C=g.data||{},M=C.prev24h?Math.round((C.last24h-C.prev24h)/C.prev24h*100):0;e.stats={last24h:C.last24h||0,prev24h:C.prev24h||0,delta:M,severity:C.severity||{error:0,warn:0,info:0},unique:C.unique||{error:0,warn:0,info:0},buckets:C.buckets||[],dropped:C.dropped||0},b()},g=>console.error(g))}function A(){m(),w()}e.barPx=(g,C)=>{let M=e.stats.buckets||[],V=0,q=0;for(let oe of M)V=Math.max(V,(oe.error||0)+(oe.warn||0)),q=Math.max(q,oe.info||0);let j=g[C]||0;if(!j)return 0;if(C==="info")return q?Math.max(2,Math.round(j/q*(V?16:60))):0;let ne=(g.error||0)+(g.warn||0),Y=Math.round(ne/V*44);return Math.max(4,Math.round(j/ne*Y))},e.bucketTitle=g=>`${new Date(g.hour).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})} \xB7 ${g.error||0} err \xB7 ${g.warn||0} warn \xB7 ${g.info||0} info`,e.toggle=g=>{e.expanded[g._key]=!e.expanded[g._key]},e.setBucket=g=>{e.query.bucket=g},e.refreshNow=A,e.clearAll=()=>{confirm("Clear all captured errors?")&&t.delete("/api/admin/errors").then(A,g=>console.error(g))},e.exportCsv=()=>{let g=["ts","level","module","displayMessage","_status","_url","_repoId"],C=[g.join(",")];for(let j of e.visible)C.push(g.map(ne=>{let Y=j[ne]==null?"":String(j[ne]);return/[",\n]/.test(Y)?`"${Y.replace(/"/g,'""')}"`:Y}).join(","));let M=new Blob([C.join(`
`)],{type:"text/csv;charset=utf-8"}),V=URL.createObjectURL(M),q=document.createElement("a");q.href=V,q.download=`errors-${new Date().toISOString().slice(0,19)}.csv`,document.body.appendChild(q),q.click(),document.body.removeChild(q),URL.revokeObjectURL(V)};function S(g){e.copyHint=`${g} copied`,s.timeout(()=>{e.copyHint=""},1500)}e.copyJson=g=>{navigator.clipboard.writeText(g._detailJson).then(()=>S("JSON"))},e.copyCurl=g=>{if(!g._url)return;let M=`curl -X ${g._method||"GET"} '${window.location.origin}${g._url}'`;navigator.clipboard.writeText(M).then(()=>S("curl"))},A();let R=i(()=>{e.query.autoRefresh&&A()},15e3);e.on("dispose",()=>i.cancel(R)),e.watch("query.search",b),e.watch("query.bucket",b),e.watch("query.sort",b),e.watch("query.group",b)},bu=function(e,t,o,i){if(e.Math=Math,e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null){o.url("/");return}e.data=null,e.loading=!0,e.error=null,e.performance=null,e.performanceMinutes=15,e.performanceTab="routes",e.cacheReport=null,e.cacheError=null,e.cacheMinutes=60,e.cacheTraffic="all",e.ovView=["performance","cache"].includes((window.location.hash||"").slice(1))?window.location.hash.slice(1):"summary",e.setOvView=function(g){e.ovView=g;try{window.history.replaceState(null,"",g==="summary"?window.location.pathname:"#"+g)}catch{}};var s=!1;e.loadCache=function(){if(!s){s=!0;var g=e.cacheMinutes;t.get("/api/admin/cache",{params:{minutes:g}}).then(function(C){g===e.cacheMinutes&&(e.cacheReport=C.data,e.cacheError=C.data.available?null:C.data.reason||"Cache monitoring is unavailable.")},function(){e.cacheError="Could not refresh cache monitoring. Displayed values may be stale."}).finally(function(){s=!1,g!==e.cacheMinutes&&e.loadCache()})}},e.cacheRows=function(){return(e.cacheReport?.rows||[]).filter(function(g){return e.cacheTraffic==="all"||g.traffic===e.cacheTraffic})},e.cacheRate=function(g,C){var M=e.cacheRows(),V=function(ne){return M.filter(function(Y){return Y.name===ne}).reduce(function(Y,oe){return Y+oe[C]},0)},q=V(g+"_hit"),j=V(g+"_miss");return q+j?(100*q/(q+j)).toFixed(1)+"%":"No samples"},e.cacheEventName=function(g){return g.replaceAll("_"," ")},e.cacheP95=function(g){var C=0,M=e.cacheReport?.latencyBucketsMs||[];if(!g.count)return"No samples";if(!g.ms)return"Not timed";for(var V=0;V<=M.length;V++)if(C+=g["b"+V]||0,C>=Math.ceil(g.count*.95))return V<M.length?"\u2264 "+to(M[V]):"> 10\u202Fs";return"No samples"},e.healthAlert=function(){let g=e.data&&e.data.system||{},C=[["Memory",g.memPercent],["Disk",g.diskPercent]].filter(([,V])=>V>90);return C.length?C.map(([V,q])=>V+" is at "+q+"%").join(" and ")+". New anonymizations may fail until "+(C.length>1?"they drop.":"it drops."):""},e.performanceError=null,e.formatMs=function(g){return g==null?"":to(g)},e.latencyBound=function(g,C){return g.count?g[C]==null?"> 60\u202Fs":"\u2264 "+e.formatMs(g[C]):"No samples"},e.firstByteBound=function(g){return e.latencyBound({count:g.firstByteCount,p95UpperMs:g.firstByteP95UpperMs},"p95UpperMs")},e.sampleAge=function(g){return Math.max(0,Math.round((Date.now()-g.sampledAt)/1e3))},e.peakRss=function(g){return(e.performance.runtimeSeries||[]).filter(function(C){return C.instance===g.instance}).reduce(function(C,M){return Math.max(C,M.rss)},g.memory.rss)},e.performanceWarning=function(g){return e.sampleAge(g)>45||g.droppedBatches||g.droppedMetrics||g.sockets?.closeWait>0||g.eventLoop?.p95Ms>100||g.memoryLimitBytes&&g.memory.rss>g.memoryLimitBytes*.8};var r=!1;e.loadPerformance=function(){var g=e.performanceMinutes;e.performance?.windowMinutes&&e.performance.windowMinutes!==g&&(e.performance=null),!r&&(r=!0,t.get("/api/admin/performance",{params:{minutes:g}}).then(function(C){g===e.performanceMinutes&&(e.performance=C.data,e.performanceError=C.data.available?null:"Performance monitoring is unavailable. Request history may be incomplete.")},function(){g===e.performanceMinutes&&(e.performanceError="Could not refresh performance monitoring. Displayed samples may be stale.")}).finally(function(){r=!1,g!==e.performanceMinutes&&e.loadPerformance()}))};function a(g){if(g==null)return"\u2014";for(var C=["B","KB","MB","GB","TB"],M=0,V=g;V>=1024&&M<C.length-1;)V/=1024,M++;return V.toFixed(M>0?1:0).replace(/\.0$/,"")+" "+C[M]}e.humanBytes=a;function u(g){if(!g)return"\u2014";var C=Math.floor(g/86400),M=Math.floor(g%86400/3600),V=Math.floor(g%3600/60);return C>0?C+"d "+(M<10?"0":"")+M+"h":M>0?M+"h "+(V<10?"0":"")+V+"m":V+"m"}e.humanDuration=u;function p(g){return g==null?"\u2014":g>=1e6?(g/1e6).toFixed(1)+"M":g>=1e3?(g/1e3).toFixed(1)+"K":String(g)}e.humanNum=p,e.queueTotal=function(g){return g?(g.waiting||0)+(g.active||0)+(g.delayed||0)+(g.failed||0):0},e.statusCount=function(g){if(!e.data||!e.data.repos)return 0;for(var C=e.data.repos.statusBreakdown||[],M=0;M<C.length;M++)if(C[M]._id===g)return C[M].count;return 0},e.barPct=function(g){var C=e.data&&e.data.repos?e.data.repos.total:0;if(!C)return 0;var M=[g];g==="expired"&&M.push("expiring"),g==="removed"&&M.push("re Line truncated
`);t.innerHTML=o.map(i=>{let s=i.replace(/^(<[^>]+>)+/,"").charAt(0),r=i.startsWith("@@")?"hunk":s==="+"?"add":s==="-"?"remove":"";return`<span class="md-diff-line${r?" is-"+r:""}">${i||" "}</span>`}).join(`
`)}),ku=(e,t=0)=>{let o=(String(e).slice(t).match(/^[ \t]*/)[0]||"").replace(/\t/g," ").length;return Math.min(t+o+4,24)},bs=e=>{e?.closest?.(".reviewer-preview")&&e.querySelectorAll("pre code").forEach(t=>{let o=t.querySelectorAll(".md-diff-line");if(o.length){o.forEach(s=>{s.classList.contains("is-hunk")||s.style.setProperty("--hang",ku(s.textContent,1)+"ch")});return}if(t.querySelector(".code-line"))return;let i=[];t.innerHTML=t.innerHTML.replace(/\n$/,"").split(`
`).map(s=>{let r=i.join("");s.replace(/<\/?span\b[^>]*>/g,u=>(u.startsWith("</")?i.pop():i.push(u),u));let a=s.replace(/<[^>]+>/g,"");return`<span class="code-line" style="--hang:${ku(a)}ch">${r}${s||" "}${"</span>".repeat(i.length)}</span>`}).join(`
`)})},Su={props:["content","terms","options"],setup(e){let t=vt(null),o=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../"),Eu(t.value),bs(t.value)};return on(()=>{o(),st(()=>[e.content,e.terms,e.options],o,{deep:!0})}),()=>Oe("markdown",{ref:t})}},xm={props:["file","terms","options"],setup(e){let t=vt(null),o=()=>ot(()=>{t.value?.querySelectorAll("pre code").forEach(i=>window.Prism?.highlightElement(i)),Eu(t.value),bs(t.value)});return on(o),st(()=>[e.file?.content,e.terms,e.options],o,{deep:!0}),()=>{let i=e.file||{},s=(i.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(s)||i.language==="Markdown")return Oe("gist-file",{ref:t},Oe(Su,{content:i.content,terms:e.terms,options:e.options}));let r={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(i.language||s||"none").toLowerCase();return Oe("gist-file",{ref:t},Oe("pre",{class:"line-numbers"},Oe("code",{class:"language-"+(r[a]||a),key:i.content},i.content||"")))}}},eg=e=>e?.querySelectorAll(".nb-input pre").forEach(t=>{if(t.parentElement?.classList.contains("nb-code-scroll"))return;let o=document.createElement("div");o.className="nb-code-scroll",t.replaceWith(o),o.appendChild(t);let i=()=>{let s=t.scrollWidth-t.clientWidth>1;if(o.classList.toggle("is-overflowing",s),o.classList.toggle("is-at-end",s&&t.scrollLeft+t.clientWidth>=t.scrollWidth-2),!s)return;let r=t.clientWidth-16,a=Math.max(24,r*t.clientWidth/t.scrollWidth);o.style.setProperty("--thumb-w",a+"px"),o.style.setProperty("--thumb-x",(r-a)*t.scrollLeft/(t.scrollWidth-t.clientWidth)+"px")};t.addEventListener("scroll",i,{passive:!0}),window.ResizeObserver?new ResizeObserver(i).observe(t):i(),i()}),tg={props:["file","content"],setup(e){let t=vt(null),o=0,i,s=async()=>{let r=++o;i?.abort(),i=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:i.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await Ln("notebook"),r!==o)return;t.value.innerHTML=Oi(DOMPurify.sanitize(nb.parse(a).render())),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u)),eg(t.value)}catch(a){r===o&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return on(()=>{s(),st(()=>[e.file,e.content],s)}),Kn(()=>{o++,i?.abort()}),()=>Oe("notebook",{ref:t})}},ng={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,i])=>i.code),o=t.reduce((i,[,s])=>i+s.code,0);return Oe("loc",t.map(([i,s])=>Oe("div",{class:"lang",title:`${i}: ${s.code.toLocaleString()} lines`,style:{width:s.code*100/o+"%",background:langColors[i]}})))}}},Nu={Markdown:Su,GistFile:xm,Notebook:tg,Loc:ng,HtmlDoc:yu,QuotaUsage:Qm,Pdfviewer:_l(async()=>(await Ln("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",bu))},Ru={async mounted(e,{value:t}){e._editorValue=t;try{if(await qs(),e._editorDisposed)return;let o=e._editorValue,i=ace.edit(e);e._editor=i,i.setValue(String(o.content??""),-1),Cu(e,o.options),e._editorCleanup=o.options?.onLoad?.(i)}catch(o){e._editorDisposed||(e.textContent=o.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),Cu(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function Cu(e,t={}){let o=Zm.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+o),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var Du={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],o=new Set,i=new IntersectionObserver(s=>{s.forEach(a=>a.isIntersecting?o.add(a.target.id):o.delete(a.target.id));let r=t.find(a=>o.has(a.hash.slice(1)));r&&t.forEach(a=>a.classList.toggle("active",a===r))},{rootMargin:"-20% 0px -60% 0px",threshold:0});ot(()=>{t.forEach(s=>{let r=document.getElementById(s.hash.slice(1));r&&i.observe(r)}),t[0]&&!t.some(s=>s.classList.contains("active"))&&t[0].classList.add("active")}),e._observer=i},beforeUnmount(e){e._observer?.disconnect()}};var Qr=(e,t,o)=>{let i=e instanceof RegExp?Au(e,o):e,s=t instanceof RegExp?Au(t,o):t,r=i!==null&&s!=null&&og(i,s,o);return r&&{start:r[0],end:r[1],pre:o.slice(0,r[0]),body:o.slice(r[0]+i.length,r[1]),post:o.slice(r[1]+s.length)}},Au=(e,t)=>{let o=t.match(e);return o?o[0]:null},og=(e,t,o)=>{let i,s,r,a,u,p=o.indexOf(e),y=o.indexOf(t,p+1),m=p;if(p>=0&&y>0){if(e===t)return[p,y];for(i=[],r=o.length;m>=0&&!u;){if(m===p)i.push(m),p=o.indexOf(e,m+1);else if(i.length===1){let b=i.pop();b!==void 0&&(u=[b,y])}else s=i.pop(),s!==void 0&&s<r&&(r=s,a=y),y=o.indexOf(t,m+1);m=p<y&&p>=0?p:y}i.length&&a!==void 0&&(u=[r,a])}return u};var Tu="\0SLASH"+Math.random()+"\0",Pu="\0OPEN"+Math.random()+"\0",ta="\0CLOSE"+Math.random()+"\0",Ou="\0COMMA"+Math.random()+"\0",Iu="\0PE Line truncated
`)},sa=class{constructor(t){Je(this,"gen");Je(this,"threads",[]);Je(this,"match",!1);Je(this,"runs",[]);Je(this,"ids",[]);this.gen=t}get dead(){return!this.threads.length&&!this.match&&!this.runs.length}},zu=(e,t)=>e.ids.length!==t.ids.length||e.runs.length!==t.runs.length||e.ids.some((o,i)=>o!==t.ids[i])?!1:e.runs.every(o=>t.runs.some(i=>i.neg===o.neg&&zu(i.state,o.state))),Vu=e=>({has:new Float64Array(e),seen:new Float64Array(e),gen:0}),eo,On,ia,ra,Es=class{constructor(t,o,i){Ve(this,On);Je(this,"dots");Je(this,"dotStart");Ve(this,eo);this.dots=t,this.dotStart=o,Ue(this,eo,i)}state(){return new sa(++re(this,eo).gen)}done(t){return t.ids=t.threads.map(o=>o.id).sort((o,i)=>o-i),t.match&&t.ids.unshift(oa.id),t}restricted(t,o){return o&&(this.dots||this.dotStart&&t===0)}add(t,o,i,s){switch(o.t){case"split":if(!qe(this,On,ia).call(this,t,o))return;for(let a of o.out)this.add(t,a,i,s);return;case"neg":if(!qe(this,On,ia).call(this,t,o))return;let r=this.state();return this.add(r,o.sub,i,!1),this.done(r),this.addRun(t,{t:"run",neg:o,state:r},i,s);case"star":if(this.restricted(i,s))return;qe(this,On,ra).call(this,t,o)&&this.add(t,o.next,i,s);return;case"match":t.match=!0;return;default:qe(this,On,ra).call(this,t,o)}}addRun(t,o,i,s){for(let r of t.runs)if(r.neg===o.neg&&zu(r.state,o.state))return;t.runs.push(o),o.state.match||this.add(t,o.neg.next,i,s)}step(t,o,i,s){let r=this.state();for(let a of t.threads)switch(a.t){case"lit":da(a,o)&&this.add(r,a.next,i+1,s);break;case"any":this.restricted(i,s)||this.add(r,a.next,i+1,s);break;case"class":!this.restricted(i,s)&&a.re.test(o)&&this.add(r,a.next,i+1,s);break;case"star":this.restricted(i,s)||this.add(r,a,i+1,s)}if(!this.restricted(i,s))for(let a of t.runs){if(a.state.dead){this.addRun(r,a,i+1,s);continue}let u=this.step(a.state,o,i,!1);this.addRun(r,{t:"run",neg:a.neg,state:u},i+1,s)}return this.done(r)}};eo=new WeakMap,On=new WeakSet,ia=function(t,o){let{seen:i}=re(this,eo);return i[o.id]===t.gen?!1:(i[o.id]=t.gen,!0)},ra=function(t,o){let{has:i}=re(this,eo);return i[o.id]===t.gen?!1:(i[o.id]=t.gen,t.threads.push(o),!0)};var Hu=e=>{let t=e.ids.join();if(!e.runs.length)return t;let o=e.runs.map(i=>`${i.neg.id}(${Hu(i.state)})`);return`${t}|${o.sort().join("|")}`},_g=1<<18,Ao,To,Rn,to,Dn,An,Tn,Kt,la,Mi,ju,aa=class{constructor(t,o){Ve(this,Kt);Ve(this,Ao);Ve(this,To,new Map);Ve(this,Rn,0);Ve(this,to);Ve(this,Dn);Ve(this,An);Ve(this,Tn);Ue(this,Ao,t),Ue(this,An,new Es(!1,!1,o)),Ue(this,Tn,new Es(!1,!0,o))}start(t){if(t){if(re(this,Dn))return re(this,Dn);let i=re(this,Tn).state();return re(this,Tn).add(i,re(this,Ao),0,!0),Ue(this,Dn,qe(this,Kt,la).call(this,re(this,Tn).done(i)))}if(re(this,to))return re(this,to);let o=re(this,An).state();return re(this,An).add(o,re(this,Ao),0,!0),Ue(this,to,qe(this,Kt,Mi).call(this,re(this,An).done(o)))}next(t,o){let i=o.charCodeAt(0),s=i<128?void 0:t.next.get(o);if(s)return s;let r=t===re(this,Dn)?qe(this,Kt,Mi).call(this,re(this,Tn).step(t.state,o,0,!0)):qe(this,Kt,Mi).call(this,re(this,An).step(t.state,o,1,!0));return i<128?(t.ascii||(t.ascii=new Array(128),Ue(this,Rn,re(this,Rn)+128)),t.ascii[i]=r):t.next.set(o,r),Pa(this,Rn)._++,r}};Ao=new WeakMap,To=new WeakMap,Rn=new WeakMap,to=new WeakMap,Dn=new WeakMap,An=new WeakMap,Tn=new WeakMap,Kt=new WeakSet,la=function(t){return{state:t,match:t.match,dead:t.dead,next:new Map}},Mi=function(t){let o=Hu(t),i=re(this,To).get(o);if(i)return i;re(this,Rn)>_g&&qe(this,Kt,ju).call(this);let s=qe(this,Kt,la).call(this,t);return re(this,To).set(o,s),Ue(this,Rn,re(this,Rn)+(o.length+1)),s},ju=function(){re(this,To).clear(),Ue(this,Rn,0),Ue(this,to,void 0),Ue(this,Dn,void 0)};var Mg=e=>{let t=[];for(let o=e;o.t!=="match";o=o.next){if(o.t==="split"||o.t==="neg")return;t.push(o)}return t},Vg=(e,t,o,i)=>{let s=0,r=o,a=-1,u=0;for(;r<i;){let p=e[s];if(p?.t==="star"){a=s++,u=r;continue}let y=t[r];if(p&&(p.t==="any"||p.t==="lit"&&da(p,y)||p.t==="class"&&p.re.test(y))){s++,r++;continue}if(a===-1)return!1;s=a+1,r=++u}for(;e[s]?.t==="star";)s++;return s===e.length},Gu=e=>{let t=0,o=0;for(let i of e){let[s,r]=qg(i);t+=s,o+=r}return[t,o]},qg=e=>{if(e.t==="star")return[0,1/0];if(e.t!=="ext")return[1,1];if(e.type==="!")return[0,1/0];let t=e.alts.map(Gu),o=Math.min(...t.map(r=>r[0])),i=Math.max(...t.map(r=>r[1])),s=i===0?0:1/0;return e.type==="@"?[o,i]:e.type==="?"?[0,i]:e.type==="*"?[0,s]:[o,s]},qu=(e,t,o)=>{for(let i=0;i<e.length;i++)if(!da(e[i],t[o+i]))return!1;return!0},$g=/[/\ud800-\udfff]/,Lg=/[\ud800-\udfff]/,_i=e=>Lg.test(e)?[...e]:e,$u=e=>{if(e.includes("/"))throw new Error("can only match a single path portion, got: "+e)},Pn,Po,no,Vi,oo,Ns,qi,so,Rs,Ds,As,wn,un,Oo,Io,Ts,$i,Wt,io,Cs,Ss=class{constructor(t,o={}){Ve(this,io);Je(this,"pattern");Je(this,"options");Ve(this,Pn);Ve(this,Po);Ve(this,no);Ve(this,Vi);Ve(this,oo);Ve(this,Ns,!1);Ve(this,qi);Ve(this,so);Ve(this,Rs,!1);Ve(this,Ds,0);Ve(this,As,1/0);Ve(this,wn,[]);Ve(this,un,[]);Ve(this,Oo);Ve(this,Io);Ve(this,Ts,!1);Ve(this,$i);Ve(this,Wt);if(t.includes Line truncated
`).forEach((o,i)=>{let{term:s}=ka(o.trim());if(!s)return;let r=[];for(let a=0;a<s.length;a++){if(s[a]==="\\"){a++;continue}lc.has(s[a])&&!r.includes(s[a])&&r.push(s[a])}r.length&&t.push({line:i,term:s,symbols:r})}),t}function uc(e,t){let o=String(e||"").split(`
`),i=o[t];if(i===void 0)return e;let{term:s}=ka(i.trim());if(!s)return e;let r="";for(let u=0;u<s.length;u++){if(s[u]==="\\"){r+=s.slice(u,u+2),u++;continue}r+=lc.has(s[u])||s[u]==="."?"\\"+s[u]:s[u]}let a=i.indexOf(s);return o[t]=i.slice(0,a)+r+i.slice(a+s.length),o.join(`
`)}var lo={VIEWER_ERRORS:{title:"Content could not be loaded",access_title:"GitHub access needs attention",reader_help:"Reading this repository? You do not need to sign in. Try again after the owner restores access, or let them know this anonymous link is unavailable.",owner_help:"Own this repository? If your GitHub account was suspended or recently recovered, sign in to Anonymous GitHub again and check the GitHub connection and repository permissions in your dashboard. Then retry this page. Keep the existing anonymous URL; do not delete the repository to restore access.",retry:"Try again",dashboard:"Open owner dashboard"},ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"We could not load this content. Try again. If it still fails, contact support with the anonymous URL and the time of the error.",unreachable:"The service could not complete this request. Wait a moment and try again.",request_error:"The connection was interrupted. Check your internet connection and try again.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"Anonymous GitHub cannot access the source repository on GitHub. It may be private, unavailable, or require the owner to reconnect GitHub.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please t Line truncated
`)),e.options=Object.assign({},e.options,b.options),u.restore()})}p();let y=null;e.saveDefault=m=>{if(m&&m.preventDefault&&m.preventDefault(),e.saving)return;let b=u.checkpoint(),h={terms:e.terms.split(`
`).map(w=>w.trim()).filter(w=>w.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",h).then(()=>{u.accept(b),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",y&&i.cancel(y),y=i(()=>{e.message=null},2500)},w=>{e.saving=!1;let A=w&&w.data&&w.data.error,N="Unable to save your defaults. Please try again.";Promise.all([o("ERRORS."+A),o("ERRORS.unknown_error")]).then(([R,v])=>{e.error=A&&R!==v?R:N},()=>{e.error=N})})},e.deleteAccount=()=>{e.deletingAccount||!e.confirmDeleteAccount||e.deleteUsername!==e.user?.username||(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},vc=function(e,t,o){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(i=>{o.url("/dashboard")},i=>{e.error=i.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},yc=function(e,t,o,i,s){e.user&&!e.user.status&&o.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&o.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,p){let y={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(y===void 0)return;u.preventDefault();let m=e.features.length,b=y==="first"?0:y==="last"?m-1:(p+y+m)%m;e.feature=e.features[b].key,s(()=>{let h=i.document.getElementById("feature-tab-"+e.feature);h&&h.focus()})},e.demoText=`# DeepLearnUtils
`)}),Su=(e,t=0)=>{let o=(String(e).slice(t).match(/^[ \t]*/)[0]||"").replace(/\t/g," ").length;return Math.min(t+o+4,24)},Cs=e=>{e?.closest?.(".reviewer-preview")&&e.querySelectorAll("pre code").forEach(t=>{let o=t.querySelectorAll(".md-diff-line");if(o.length){o.forEach(s=>{s.classList.contains("is-hunk")||s.style.setProperty("--hang",Su(s.textContent,1)+"ch")});return}if(t.querySelector(".code-line"))return;let i=[];t.innerHTML=t.innerHTML.replace(/\n$/,"").split(`
`).map(s=>{let r=i.join("");s.replace(/<\/?span\b[^>]*>/g,u=>(u.startsWith("</")?i.pop():i.push(u),u));let a=s.replace(/<[^>]+>/g,"");return`<span class="code-line" style="--hang:${Su(a)}ch">${r}${s||" "}${"</span>".repeat(i.length)}</span>`}).join(`
`)})},Du={props:["content","terms","options"],setup(e){let t=Et(null),o=()=>{t.value.innerHTML=renderMD(e.content||"",window.location.pathname+"/../"),Ru(t.value),Cs(t.value)};return ln(()=>{o(),it(()=>[e.content,e.terms,e.options],o,{deep:!0})}),()=>Te("markdown",{ref:t})}},ng={props:["file","terms","options"],setup(e){let t=Et(null),o=()=>xe(()=>{t.value?.querySelectorAll("pre code").forEach(i=>window.Prism?.highlightElement(i)),Ru(t.value),Cs(t.value)});return ln(o),it(()=>[e.file?.content,e.terms,e.options],o,{deep:!0}),()=>{let i=e.file||{},s=(i.filename||"").split(".").pop().toLowerCase();if(["md","markdown"].includes(s)||i.language==="Markdown")return Te("gist-file",{ref:t},Te(Du,{content:i.content,terms:e.terms,options:e.options}));let r={js:"javascript",jsx:"javascript",ts:"javascript",typescript:"javascript",py:"python",html:"markup",xml:"markup",svg:"markup",sh:"bash"},a=(i.language||s||"none").toLowerCase();return Te("gist-file",{ref:t},Te("pre",{class:"line-numbers"},Te("code",{class:"language-"+(r[a]||a),key:i.content},i.content||"")))}}},og=e=>e?.querySelectorAll(".nb-input pre").forEach(t=>{if(t.parentElement?.classList.contains("nb-code-scroll"))return;let o=document.createElement("div");o.className="nb-code-scroll",t.replaceWith(o),o.appendChild(t);let i=()=>{let s=t.scrollWidth-t.clientWidth>1;if(o.classList.toggle("is-overflowing",s),o.classList.toggle("is-at-end",s&&t.scrollLeft+t.clientWidth>=t.scrollWidth-2),!s)return;let r=t.clientWidth-16,a=Math.max(24,r*t.clientWidth/t.scrollWidth);o.style.setProperty("--thumb-w",a+"px"),o.style.setProperty("--thumb-x",(r-a)*t.scrollLeft/(t.scrollWidth-t.clientWidth)+"px")};t.addEventListener("scroll",i,{passive:!0}),window.ResizeObserver?new ResizeObserver(i).observe(t):i(),i()}),sg={props:["file","content"],setup(e){let t=Et(null),o=0,i,s=async()=>{let r=++o;i?.abort(),i=new AbortController;try{let a=e.content?JSON.parse(e.content):await fetch(e.file?.download_url||e.file,{signal:i.signal}).then(u=>{if(!u.ok)throw Error("Notebook request failed");return u.json()});if(await Bn("notebook"),r!==o)return;t.value.innerHTML=_i(DOMPurify.sanitize(nb.parse(a).render())),t.value.querySelectorAll("pre code").forEach(u=>window.Prism?.highlightElement(u)),og(t.value)}catch(a){r===o&&a.name!=="AbortError"&&(t.value.textContent="Unable to render the notebook.")}};return ln(()=>{s(),it(()=>[e.file,e.content],s)}),Qn(()=>{o++,i?.abort()}),()=>Te("notebook",{ref:t})}},ig={props:["stats"],setup(e){return()=>{let t=Object.entries(e.stats||{}).filter(([,i])=>i.code),o=t.reduce((i,[,s])=>i+s.code,0);return Te("loc",t.map(([i,s])=>Te("div",{class:"lang",title:`${i}: ${s.code.toLocaleString()} lines`,style:{width:s.code*100/o+"%",background:langColors[i]}})))}}},Au={Markdown:Du,GistFile:ng,Notebook:sg,Loc:ig,HtmlDoc:ku,QuotaUsage:eg,Pdfviewer:ql(async()=>(await Bn("pdf"),pdfjsLib.GlobalWorkerOptions.workerSrc="/script/external/pdf.worker.js",Cu))},Tu={async mounted(e,{value:t}){e._editorValue=t;try{if(await Us(),e._editorDisposed)return;let o=e._editorValue,i=ace.edit(e);e._editor=i,i.setValue(String(o.content??""),-1),Nu(e,o.options),e._editorCleanup=o.options?.onLoad?.(i)}catch(o){e._editorDisposed||(e.textContent=o.message)}},updated(e,{value:t}){e._editorValue=t,e._editor&&(e._editor.getValue()!==String(t.content??"")&&e._editor.setValue(String(t.content??""),-1),Nu(e,t.options))},beforeUnmount(e){e._editorDisposed=!0,e._editorCleanup?.(),e._editor?.destroy()}};function Nu(e,t={}){let o=tg.has(t.mode)?t.mode:"text";e._editor.session.setMode("ace/mode/"+o),t.theme&&e._editor.setTheme("ace/theme/"+t.theme),e._editor.setReadOnly(t.readOnly!==!1)}var Pu={mounted(e){if(!window.IntersectionObserver)return;let t=[...e.querySelectorAll('a[href^="#"]')],o=new Set,i=new IntersectionObserver(s=>{s.forEach(a=>a.isIntersecting?o.add(a.target.id):o.delete(a.target.id));let r=t.find(a=>o.has(a.hash.slice(1)));r&&t.forEach(a=>a.classList.toggle("active",a===r))},{rootMargin:"-20% 0px -60% 0px",threshold:0});xe(()=>{t.forEach(s=>{let r=document.getElementById(s.hash.slice(1));r&&i.observe(r)}),t[0]&&!t.some(s=>s.classList.contains("active"))&&t[0].classList.add("active")}),e._observer=i},beforeUnmount(e){e._observer?.disconnect()}};var ea=(e,t,o)=>{let i=e instanceof RegExp?Ou(e,o):e,s=t instanceof RegExp?Ou(t,o):t,r=i!==null&&s!=null&&rg(i,s,o);return r&&{start:r[0],end:r[1],pre:o.slice(0,r[0]),body:o.slice(r[0]+i.length,r[1]),post:o.slice(r[1]+s.length)}},Ou=(e,t)=>{let o=t.match(e);return o?o[0]:null},rg=(e,t,o)=>{let i,s,r,a,u,p=o.indexOf(e),y=o.indexOf(t,p+1),h=p;if(p>=0&&y>0){if(e===t)return[p,y];for(i=[],r=o.length;h>=0&&!u;){if(h===p)i.push(h),p=o.indexOf(e,h+1);else if(i.length===1){let b=i.pop();b!==void 0&&(u=[b,y])}else s=i.pop(),s!==void 0&&s<r&&(r=s,a=y),y=o.indexOf(t,h+1);h=p<y&&p>=0?p:y}i.length&&a!==void 0&&(u=[r,a])}return u};var Iu="\0SLASH"+Math.random()+"\0",Mu="\0OPEN"+Math.random()+"\0",sa="\0CLOSE"+Math.random()+"\0",_u="\0COMMA"+Math.random()+"\0",Vu="\0PE Line truncated
`)},aa=class{constructor(t){Je(this,"gen");Je(this,"threads",[]);Je(this,"match",!1);Je(this,"runs",[]);Je(this,"ids",[]);this.gen=t}get dead(){return!this.threads.length&&!this.match&&!this.runs.length}},Gu=(e,t)=>e.ids.length!==t.ids.length||e.runs.length!==t.runs.length||e.ids.some((o,i)=>o!==t.ids[i])?!1:e.runs.every(o=>t.runs.some(i=>i.neg===o.neg&&Gu(i.state,o.state))),Lu=e=>({has:new Float64Array(e),seen:new Float64Array(e),gen:0}),oo,_n,la,da,Rs=class{constructor(t,o,i){qe(this,_n);Je(this,"dots");Je(this,"dotStart");qe(this,oo);this.dots=t,this.dotStart=o,Ue(this,oo,i)}state(){return new aa(++ae(this,oo).gen)}done(t){return t.ids=t.threads.map(o=>o.id).sort((o,i)=>o-i),t.match&&t.ids.unshift(ra.id),t}restricted(t,o){return o&&(this.dots||this.dotStart&&t===0)}add(t,o,i,s){switch(o.t){case"split":if(!$e(this,_n,la).call(this,t,o))return;for(let a of o.out)this.add(t,a,i,s);return;case"neg":if(!$e(this,_n,la).call(this,t,o))return;let r=this.state();return this.add(r,o.sub,i,!1),this.done(r),this.addRun(t,{t:"run",neg:o,state:r},i,s);case"star":if(this.restricted(i,s))return;$e(this,_n,da).call(this,t,o)&&this.add(t,o.next,i,s);return;case"match":t.match=!0;return;default:$e(this,_n,da).call(this,t,o)}}addRun(t,o,i,s){for(let r of t.runs)if(r.neg===o.neg&&Gu(r.state,o.state))return;t.runs.push(o),o.state.match||this.add(t,o.neg.next,i,s)}step(t,o,i,s){let r=this.state();for(let a of t.threads)switch(a.t){case"lit":pa(a,o)&&this.add(r,a.next,i+1,s);break;case"any":this.restricted(i,s)||this.add(r,a.next,i+1,s);break;case"class":!this.restricted(i,s)&&a.re.test(o)&&this.add(r,a.next,i+1,s);break;case"star":this.restricted(i,s)||this.add(r,a,i+1,s)}if(!this.restricted(i,s))for(let a of t.runs){if(a.state.dead){this.addRun(r,a,i+1,s);continue}let u=this.step(a.state,o,i,!1);this.addRun(r,{t:"run",neg:a.neg,state:u},i+1,s)}return this.done(r)}};oo=new WeakMap,_n=new WeakSet,la=function(t,o){let{seen:i}=ae(this,oo);return i[o.id]===t.gen?!1:(i[o.id]=t.gen,!0)},da=function(t,o){let{has:i}=ae(this,oo);return i[o.id]===t.gen?!1:(i[o.id]=t.gen,t.threads.push(o),!0)};var Wu=e=>{let t=e.ids.join();if(!e.runs.length)return t;let o=e.runs.map(i=>`${i.neg.id}(${Wu(i.state)})`);return`${t}|${o.sort().join("|")}`},qg=1<<18,Oo,Io,Tn,so,Pn,On,In,Zt,ca,$i,Ku,ua=class{constructor(t,o){qe(this,Zt);qe(this,Oo);qe(this,Io,new Map);qe(this,Tn,0);qe(this,so);qe(this,Pn);qe(this,On);qe(this,In);Ue(this,Oo,t),Ue(this,On,new Rs(!1,!1,o)),Ue(this,In,new Rs(!1,!0,o))}start(t){if(t){if(ae(this,Pn))return ae(this,Pn);let i=ae(this,In).state();return ae(this,In).add(i,ae(this,Oo),0,!0),Ue(this,Pn,$e(this,Zt,ca).call(this,ae(this,In).done(i)))}if(ae(this,so))return ae(this,so);let o=ae(this,On).state();return ae(this,On).add(o,ae(this,Oo),0,!0),Ue(this,so,$e(this,Zt,$i).call(this,ae(this,On).done(o)))}next(t,o){let i=o.charCodeAt(0),s=i<128?void 0:t.next.get(o);if(s)return s;let r=t===ae(this,Pn)?$e(this,Zt,$i).call(this,ae(this,In).step(t.state,o,0,!0)):$e(this,Zt,$i).call(this,ae(this,On).step(t.state,o,1,!0));return i<128?(t.ascii||(t.ascii=new Array(128),Ue(this,Tn,ae(this,Tn)+128)),t.ascii[i]=r):t.next.set(o,r),Ma(this,Tn)._++,r}};Oo=new WeakMap,Io=new WeakMap,Tn=new WeakMap,so=new WeakMap,Pn=new WeakMap,On=new WeakMap,In=new WeakMap,Zt=new WeakSet,ca=function(t){return{state:t,match:t.match,dead:t.dead,next:new Map}},$i=function(t){let o=Wu(t),i=ae(this,Io).get(o);if(i)return i;ae(this,Tn)>qg&&$e(this,Zt,Ku).call(this);let s=$e(this,Zt,ca).call(this,t);return ae(this,Io).set(o,s),Ue(this,Tn,ae(this,Tn)+(o.length+1)),s},Ku=function(){ae(this,Io).clear(),Ue(this,Tn,0),Ue(this,so,void 0),Ue(this,Pn,void 0)};var $g=e=>{let t=[];for(let o=e;o.t!=="match";o=o.next){if(o.t==="split"||o.t==="neg")return;t.push(o)}return t},Lg=(e,t,o,i)=>{let s=0,r=o,a=-1,u=0;for(;r<i;){let p=e[s];if(p?.t==="star"){a=s++,u=r;continue}let y=t[r];if(p&&(p.t==="any"||p.t==="lit"&&pa(p,y)||p.t==="class"&&p.re.test(y))){s++,r++;continue}if(a===-1)return!1;s=a+1,r=++u}for(;e[s]?.t==="star";)s++;return s===e.length},Yu=e=>{let t=0,o=0;for(let i of e){let[s,r]=Ug(i);t+=s,o+=r}return[t,o]},Ug=e=>{if(e.t==="star")return[0,1/0];if(e.t!=="ext")return[1,1];if(e.type==="!")return[0,1/0];let t=e.alts.map(Yu),o=Math.min(...t.map(r=>r[0])),i=Math.max(...t.map(r=>r[1])),s=i===0?0:1/0;return e.type==="@"?[o,i]:e.type==="?"?[0,i]:e.type==="*"?[0,s]:[o,s]},Uu=(e,t,o)=>{for(let i=0;i<e.length;i++)if(!pa(e[i],t[o+i]))return!1;return!0},Fg=/[/\ud800-\udfff]/,Bg=/[\ud800-\udfff]/,qi=e=>Bg.test(e)?[...e]:e,Fu=e=>{if(e.includes("/"))throw new Error("can only match a single path portion, got: "+e)},Mn,Mo,io,Li,ro,As,Ui,ao,Ts,Ps,Os,En,fn,_o,Vo,Is,Fi,Jt,lo,Ns,Ds=class{constructor(t,o={}){qe(this,lo);Je(this,"pattern");Je(this,"options");qe(this,Mn);qe(this,Mo);qe(this,io);qe(this,Li);qe(this,ro);qe(this,As,!1);qe(this,Ui);qe(this,ao);qe(this,Ts,!1);qe(this,Ps,0);qe(this,Os,1/0);qe(this,En,[]);qe(this,fn,[]);qe(this,_o);qe(this,Vo);qe(this,Is,!1);qe(this,Fi);qe(this,Jt);if(t.includes Line truncated
`).forEach((o,i)=>{let{term:s}=Sa(o.trim());if(!s)return;let r=[];for(let a=0;a<s.length;a++){if(s[a]==="\\"){a++;continue}cc.has(s[a])&&!r.includes(s[a])&&r.push(s[a])}r.length&&t.push({line:i,term:s,symbols:r})}),t}function fc(e,t){let o=String(e||"").split(`
`),i=o[t];if(i===void 0)return e;let{term:s}=Sa(i.trim());if(!s)return e;let r="";for(let u=0;u<s.length;u++){if(s[u]==="\\"){r+=s.slice(u,u+2),u++;continue}r+=cc.has(s[u])||s[u]==="."?"\\"+s[u]:s[u]}let a=i.indexOf(s);return o[t]=i.slice(0,a)+r+i.slice(a+s.length),o.join(`
`)}var po={VIEWER_ERRORS:{title:"Content could not be loaded",access_title:"GitHub access needs attention",reader_help:"Reading this repository? You do not need to sign in. Try again after the owner restores access, or let them know this anonymous link is unavailable.",owner_help:"Own this repository? If your GitHub account was suspended or recently recovered, sign in to Anonymous GitHub again and check the GitHub connection and repository permissions in your dashboard. Then retry this page. Keep the existing anonymous URL; do not delete the repository to restore access.",retry:"Try again",dashboard:"Open owner dashboard"},ERRORS:{cache_busy:"Downloads are busy. Please try again shortly.",invalid_sort:"The selected sort order is invalid.",invalid_cursor:"This project page is no longer valid. Reload the list.",repository_changed:"The repository changed while processing. Please retry.",repository_job_cancelled:"The repository changed or was removed while processing.",storage_delete_failed:"Unable to remove cached files. Please try again later.",unknown_error:"We could not load this content. Try again. If it still fails, contact support with the anonymous URL and the time of the error.",unreachable:"The service could not complete this request. Wait a moment and try again.",request_error:"The connection was interrupted. Check your internet connection and try again.",not_found:"The requested resource could not be found.",not_connected:"You must be logged in to perform this action.",not_authorized:"You do not have permission to perform this action.",unable_to_connect_user:"Unable to connect your account. Please try again later.",user_not_found:"The requested user could not be found.",user_banned:"Your account has been banned. Contact the admin for more information.",repo_access_limited:"GitHub blocked access because the repository's organization restricts third-party OAuth apps. Ask an org owner to approve Anonymous GitHub under Settings \u2192 Third-party Access \u2192 OAuth app policy, or anonymize a personal fork instead.",repo_saml_enforcement:"The repository's organization enforces SAML single sign-on. Authorize your token for that organization (GitHub \u2192 Settings \u2192 Applications, or re-run the org's SSO sign-in), then retry. Alternatively, anonymize a personal fork.",repo_not_found:"Anonymous GitHub cannot access the source repository on GitHub. It may be private, unavailable, or require the owner to reconnect GitHub.",repo_empty:"The selected branch has no commits on GitHub. Push at least one commit, or pick a different branch, then retry.",repo_not_accessible:"Anonymous GitHub cannot access this repository. Verify the repository exists and that Anonymous GitHub has been authorized for the owning organization.",repository_archived:"This repository has been archived and its files are no longer available.",repository_expired:"The repository is expired.",invalid_status:"This action cannot be performed while the resource is in its current state.",repository_not_ready:"Anonymous GitHub is still processing the repository, it can take several minutes.",repository_not_accessible:"This repository is currently not accessible.",repo_is_updating:"Anonymous GitHub is still processing the repository, it can take several minutes.",invalid_repo:"The provided repository is not valid.",invalid_source_repository:"The repository source name is invalid; expected the form 'owner/name'.",repoId_not_defined:"A repository ID must be provided.",repoUrl_not_defined:"The repository URL needs to be defined.",source_not_provided:"A repository source must be provided.",github_rate_limit_exceeded:"GitHub temporarily blocked the request because we hit its API rate limit. Wait a few minutes and try again. If the problem persists and you contact GitHub Support, include the request ID and timestamp shown in GitHub's response (the 'X-GitHub-Request-Id' header).",rate_limited:"GitHub API rate limit reached. The repository will be available shortly \u2014 please wait a moment and refresh.",repoId_already_used:"The repository ID is already used.",invalid_repoId:"The format of the repository ID is invalid.",unsupported_source:"The repository source type is not supported.",branch_not_specified:"The branch is not specified.",branch_not_found:"The branch of the repository cannot be found.",commit_not_specified:"A commit must be specified.",commit_not_found:"The configured commit no longer exists in the source repository. It may have been force-pushed, rebased, or removed.",repo_renamed:"The source repository appears to have been renamed or moved on GitHub. Please refresh and try again \u2014 the cached name has been updated.",invalid_commit_format:"The commit hash format is invalid. It must be a hexadecimal string.",pull_request_not_found:"The requested pull request could not be found.",pull_request_expired:"This pull request has expired and is no longer available.",pull_request_not_ready:"This pull request is still being prepared. Please t Line truncated
`)),e.options=Object.assign({},e.options,b.options),u.restore()})}p();let y=null;e.saveDefault=h=>{if(h&&h.preventDefault&&h.preventDefault(),e.saving)return;let b=u.checkpoint(),m={terms:e.terms.split(`
`).map(w=>w.trim()).filter(w=>w.length>0),options:e.options};e.saving=!0,e.error=null,t.post("/api/user/default",m).then(()=>{u.accept(b),e.saving=!1,e.message=e.unsavedChanges?null:"Saved",y&&i.cancel(y),y=i(()=>{e.message=null},2500)},w=>{e.saving=!1;let A=w&&w.data&&w.data.error,S="Unable to save your defaults. Please try again.";Promise.all([o("ERRORS."+A),o("ERRORS.unknown_error")]).then(([R,g])=>{e.error=A&&R!==g?R:S},()=>{e.error=S})})},e.deleteAccount=()=>{e.deletingAccount||!e.confirmDeleteAccount||e.deleteUsername!==e.user?.username||(e.deletingAccount=!0,t.delete("/api/user").then(()=>{window.location.href="/"},()=>{e.deletingAccount=!1,e.deleteError="Unable to delete the account. Please try again."}))}},wc=function(e,t,o){e.repoId=null,e.repoUrl=null,e.claim=()=>{t.post("/api/repo/claim",{repoId:e.repoId,repoUrl:e.repoUrl}).then(i=>{o.url("/dashboard")},i=>{e.error=i.data,e.claimForm.repoUrl.setValidity("not_found",!1),e.claimForm.repoId.setValidity("not_found",!1)})}},kc=function(e,t,o,i,s){e.user&&!e.user.status&&o.url("/dashboard"),e.watch("user.status",()=>{e.user&&!e.user.status&&o.url("/dashboard")}),e.features=[{key:"anonymize",num:"01",eyebrow:"Anonymize",title:"Double-anonymous,",accent:"your rules.",text:"Choose what reviewers may see: links, images, PDFs, notebooks, GitHub Pages. Add your own terms, with regex if you need it, and pick the expiration date.",cta:"Start an anonymization",href:"/anonymize",url:"anonymous.4open.science/anonymize",img:"/imgs/anonymize.png",alt:"The anonymize form: source repository, terms to redact, options and a live README preview"},{key:"review",num:"02",eyebrow:"Review",title:"Reviewers browse",accent:"the real thing.",text:"Highlighted source code, rendered PDFs, images, and notebooks, in a familiar file explorer. GitHub Pages is also supported.",cta:"Open the example",href:"https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/",target:"_self",url:"anonymous.4open.science/r/840c8c57-\u2026",img:"/imgs/explorer.png",alt:"The repository explorer with a file tree and a rendered README"},{key:"manage",num:"03",eyebrow:"Manage",title:"One dashboard,",accent:"until the decision.",text:"Monitor views, edit configuration, remove or update your repository. Program chairs can group submissions under a conference with one shared expiry.",cta:"Open the dashboard",href:"/dashboard",needsUser:!0,url:"anonymous.4open.science/dashboard",img:"/imgs/dashboard.png",alt:"The dashboard listing anonymized repositories with status, views and expiry"}],e.feature=e.features[0].key,e.selectFeature=function(u){e.feature=u},e.featureHref=function(u){return u.needsUser&&!e.user?"/signin":u.href},e.featureTarget=function(u){return u.needsUser&&!e.user?"_self":u.target||void 0},e.featureKeydown=function(u,p){let y={ArrowDown:1,ArrowRight:1,ArrowUp:-1,ArrowLeft:-1,Home:"first",End:"last"}[u.key];if(y===void 0)return;u.preventDefault();let h=e.features.length,b=y==="first"?0:y==="last"?h-1:(p+y+h)%h;e.feature=e.features[b].key,s(()=>{let m=i.document.getElementById("feature-tab-"+e.feature);m&&m.focus()})},e.demoText=`# DeepLearnUtils
Developed by Jane Smith at MIT CSAIL.
See Smith et al., "Attention That Works," 2026.
Contact: jane.smith@mit.edu`,e.demoTerms="Jane Smith, Smith, MIT CSAIL, jane.smith@mit.edu",e.demoParts=function(){let u=(e.demoTerms||"").split(/[,\n]/).map(h=>h.trim()).filter(Boolean).sort((h,w)=>w.length-h.length),p=h=>h.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(!u.length)return[{text:e.demoText}];let y=new RegExp("("+u.map(p).join("|")+")","gi"),m={},b=0;return(e.demoText||"").split(y).filter(h=>h!=="").map(h=>{let w=u.find(A=>A.toLowerCase()===h.toLowerCase());return w?(m[w.toLowerCase()]||(m[w.toLowerCase()]=++b),{text:String(m[w.toLowerCase()]),redacted:!0,original:h}):{text:h}})},e.demoCount=()=>e.demoParts().filter(u=>u.redacted).length,e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}],e.statsEmpty=()=>!!e.stat&&e.cards.every(u=>!u.total);function r(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests}).catch(()=>{})}r();function a(u){let p={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return p;let y=new Array(u.length-1);for(let N=1;N<u.length;N++)y[N-1]=u[N]-u[N-1];let m=y.length,b=Math.max.apply(null,y),h=Math.min.apply(null,y),w=Math.min(0,h),A=b-w||1;p.viewW=m*2,p.bars=new Array(m);for(let N=0;N<m;N++){let R=(y[N]-w)/A,v=Math.max(1.5,R*34);p.bars[N]={x:(N*2+.25).toFixed(2),y:(36-v).toFixed(2),w:"1.5",h:v.toFixed(2)}}if(p.deltaToday=y[m-1],m>=2){let N=y[m-2];N&&(p.pctChange=(p.deltaToday-N)/N*100)}return p.pctAbs=Math.round(Math.abs(p.pctChange)),p.isUp=p.pctChange>=0,p}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let p=u.data||[];e.history={repositories:a(p.map(y=>y.nbRepositories||0)),users:a(p.map(y=>y.nbUsers||0)),pageViews:a(p.map(y=>y.nbPageViews||0)),pullRequests:a(p.map(y=>y.nbPullRequests||0))}}).catch(()=>{})},bc=function(e,t,o,i,s,r){let a=Tt();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,ot(()=>document.querySelector(".dashboard-quota > summary")?.focus())},dn()(document,"click",D=>{e.quotaExpanded&&!D.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=D=>D.status==="error"||D._broken||p(D.status)==="progress"&&D._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=D=>{e.projectView=D,D==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.idleText=D=>{let oe=Kr(D?.anonymizeDate||D?.lastView)||"";return/ ago$/.test(oe)?"No activity for "+oe.replace(/ ago$/,""):"No activity since "+oe.replace(", "+new Date().getFullYear(),"")},e.projectDetailsId=D=>"project-details-"+encodeURIComponent(D._type+":"+(D._id||D._source||"unknown")),e.showProjectDetails=async D=>{e.selectedProject=D,e.projectName=D.projectName||"",e.nameError="",e.nameMessage="",await ot();let oe=document.getElementById(e.projectDetailsId(D));oe?.focus(),oe?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=D=>{e.selectedProject=null,ot(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(D._type+":"+D._id)}"]`)?.focus())},e.saveProjectName=async D=>{if(e.nameSaving||!D._id)return;let oe=e.projectName.trim();if(oe.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let x=await t.post("/api/user/project-name",{type:D._type,id:D._id,name:oe});D.projectName=x.data.name,D._label=D.projectName||D._fallbackLabel,e.selectedProject===D&&(e.nameMessage=oe?"Project name saved.":"Default project name restored."),C||(e.dashboardCursor=null,await V(),e.selectedProject===D&&(e.selectedProject=e.items.find(Ae=>Ae._type===D._type&&Ae._id===D._id)||null))}catch{e.selectedProject===D&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async D=>{if(!D._viewUrl||e.copyingId)return;let oe=new URL(D._viewUrl,s.location.origin).href;e.copyingId=D._type+":"+D._id;try{await Ea(oe),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:oe})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"Preparing",error:"Error",expired:"Expiring / expired",removed:"Removing / removed"};let u=["queue","download","downloaded","preparing","anonym Line truncated
`)),e.options=Object.assign({},e.options,U.options),e.options.expirationDate=U.options&&U.options.expirationDate?new Date(U.options.expirationDate):W(),!i.repoId&&!i.pullRequestId&&!i.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),k&&k()})}function x(k,_,U){e.anonymize&&e.anonymize[k]&&e.anonymize[k].setValidity(_,U)}function Ae(k){try{let _=parseGithubUrl(k);if(_&&_.owner&&_.repo)return _.owner+"/"+_.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!i.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||Ae(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let k=h();try{let _=await t.get("/github/connections");if(e.githubConnections=_.data,!_.data.appEnabled)return;let U=await t.post("/github/connections/migrate",{type:"repository",id:i.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":_.data.csrf}});if(!b(k))return;e.error=null,U.data.fullName&&(e._originalFullName=U.data.fullName,e.source.fullName=U.data.fullName,e.sourceUrl="https://github.com/"+U.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{b(k)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,w(k)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await ke()}catch{}}};function be(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:Ae(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function le(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function fe(){let k=new URLSearchParams(window.location.search).get("billingDraft");if(k){R.restore();try{let U=(await t.get("/api/billing/draft/"+encodeURIComponent(k))).data;if(U.path!==s.path())throw new Error("Wrong task");v=U.values.conference||null;for(let j of["sourceUrl","terms","repoId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(U.values,j)&&(e[j]=U.values[j]);return e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),C=U.id,I=JSON.stringify(R.checkpoint()),e.draftRestored=!0,e.hostingReview=!0,e.sourceUrl&&await le(),s.replace?.(s.path()),!0}catch{e.billingError="The checkout draft could not be restored. Retry by reloading this page; any local draft is still available."}}let _;try{_=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!_||_.path!==s.path()||Date.now()-_.savedAt>=30*6e4)return R.restore()?(e.sourceUrl&&await le(),!0):!1;R.restore();for(let U of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(_.draft,U)&&(e[U]=_.draft[U]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await le(),sessionStorage.removeItem("github-access-draft"),!0}oe(()=>{!i.repoId&&!i.pullRequestId&&!i.gistId&&a(fe,0),i.repoId&&i.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=i.repoId,t.get("/api/repo/"+e.repoId).then(async k=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(k.data.status),e.githubConnection=k.data.connection||"oauth",e.sourceUrl="https://github.com/"+k.data.source.fullName,e._originalFullName=k.data.source.fullName,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.role=k.data.role||"owner",e._existingNever=k.data.options.expirationMode==="never",e._savedExpirationDate=k.data.options.expirationDate?new Date(k.data.options.expirationDate):null,e.coauthors=k.data.coauthors||[],e._originalBranch=k.data.source.branch,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,e.repositoryID=k.data.source.repositoryID,e._originalRepositoryID=k.data.source.repositoryID,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=N(parseGithubUrl(e.sourceUrl)),!await fe()&&(await Promise.all([ke(),Te()]),J())},()=>{s.url("/404")})),i.pullRequestId&&i.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=i.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async k=>{if(e.githubConnection=k.data.connection||"oauth",e.sourceUrl="https://github.com/"+k.data.source.repositoryFullName+"/pull/"+k.data.source.pullRequestId,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=N(parseGithubUrl(e.sourceUrl)),!await fe())try{await Z()}catch{}},()=>{s.url("/404")})),i.gistId&&i.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=i.gistId,t.get("/api/gist/"+e.gistId).then(async k=>{e.sourceUrl="https://gist.github.com/"+k.data.source.gistId,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=N(parseGithubUrl(e.sourceUrl)),!await fe()&&await de()},()=>{s.url("/404")}))}),t.get("/github/connections").then(k=>{e.githubConnections=k.data,!i.repoId&&!i.pullRequestId&&!i.gistId&&e.githubConnection===void 0&&k.data.appEnabled&&k.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&le())}).catch(()=>{}),e.urlSelected=async(k=!1)=>{let _=++p;e.previousConfigurations=[],e.previousConfigurationId="";let U;try{U=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,te.cancel(),ae.cancel(),Re.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",x("sourceUrl","github",!1);return}let j=N(U),ue=k||A===j;A=j,e.sourceUrlError="",x("sourceUrl","github",!0);let we=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,setTimeout(()=>{let Ze=window.document.getElementById("sourceUrl");if(Ze){try{Ze.setSelectionRange(0,0)}catch{}Ze.scrollLeft=0}},50),we&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!ue&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],ue||(e.source={type:"GitHubStream",branch:"",commit:""}),te.cancel(),ae.cancel(),Re.cancel(),G.clear(),pe.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=ue;try{U.gistId&&!U.repo?(e.detectedType="gist",e.source={gistId:U.gistId},await de()):U.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:U.owner+"/"+U.repo,pullRequestId:U.pullRequestId},await Z()):(e.detectedType="repo",D(),await Promise.all([ke(),Te()]),J())}catch{}finally{_===p&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let k=e.branches.filter(U=>U.name==e.source.branch)[0];if(!k)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=k.commit),e.readme=k.readme,await Te(),J()}),e.getBranches=async k=>{let _=parseGithubUrl(e.sourceUrl),U=h();try{let j=await t.get(`/api/repo/${_.owner}/${_.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&Ae(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:k===!0||e.reconnectingSource?"1":"0",repositoryID:be()}});if(!b(U))return;e.branches=j.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let ue=e.branches.filter(we=>we.name==e.source.branch);ue.length>0&&(!(!e.reconnectingSource&&!k&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=ue[0].commit),e.readme=ue[0].readme,await Te(k))}catch(j){if(!b(U))return;e.branches=[],e.sourceUnreachable=j&&(j.status===404||j.data&&j.data.error==="repo_not_found");let ue=j&&j.data&&j.data.error||(j&&j.status===404?"repo_not_found":"unknown_error");r("ERRORS."+ue).then(we=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:we}),e.error=we},console.error),typeof x=="function"&&x("sourceUrl","missing",!1)}finally{w(U)}};async function ke(){let k=parseGithubUrl(e.sourceUrl),_=h();try{Se();let U=await t.get(`/api/repo/${k.owner}/${k.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&Ae(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,repositoryID:be(),force:"1"}});if(!b(_))return;e.details=U.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(U){if(!b(_))return;throw U.data&&(r("ERRORS."+U.data.error).then(j=>{e.addToast({title:"Error",date:new Date,body:j}),e.error=j},console.error),Fe(U.data.error)),x("sourceUrl","missing",!1),U}finally{w(_)}}async function Te(k){if(e.readme&&!k)return e.readme;let _=parseGithubUrl(e.sourceUrl),U=h();try{let j=await t.get(`/api/repo/${_.owner}/${_.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&Ae(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:k===!0?"1":"0",branch:e.source.branch,repositoryID:be()}});b(U,!0)&&(e.readme=j.data)}catch{b(U,!0)&&(e.readme="")}finally{w(U)}}let Xe={magicalBraces:!0},rt=k=>k.startsWith("/")&&!k.endsWith("/")&&In(ro(k.slice(1),Xe),Xe)===k.slice(1),at=()=>Object.keys(e.preserve.picked).filter(k=>e.prese Line truncated
`).map(k=>k.trim()).filter(Boolean),We=null,X=0,he=null,M=()=>!1;function F(){let k=X+"\0"+e.preserve.patterns;if(k!==he){he=k;try{M=wa(ba([...at(),...et()]))}catch{M=()=>!1}}return M}function B(k){let _=new Map([["",{dirs:[],files:[]}]]);for(let U of k){let j=U.split("/"),ue="";for(let we=0;we<j.length-1;we++){let Ze=j.slice(0,we+1).join("/");_.has(Ze)||(_.set(Ze,{dirs:[],files:[]}),_.get(ue).dirs.push(Ze)),ue=Ze}_.get(ue).files.push(U)}for(let U of _.values())U.dirs.sort();return{files:k,dirs:_,descendants:new Map}}function K(k){return We.descendants.has(k)||We.descendants.set(k,We.files.filter(_=>_.startsWith(k+"/"))),We.descendants.get(k)}let E=k=>F()(k);function S(k){let _=K(k),U=0;for(let j of _)E(j)&&U++;return U===0?"none":U===_.length?"all":"some"}e.preserve={open:!1,loading:!1,error:"",truncated:!1,commit:"",search:"",expanded:{},picked:{},patterns:"",patternsOpen:!1},e.preserveSummary=()=>{let k=(e.options?.preserveFiles||[]).map(_=>String(_).trim()).filter(Boolean).map(_=>rt(_)?ro(_.slice(1),Xe):_);return k.length?k.slice(0,2).join(", ")+(k.length>2?` and ${k.length-2} more`:""):"None. Every file is redacted."};async function O(){let k=e.source?.commit;if(!(We&&e.preserve.commit===k)){e.preserve.loading=!0,e.preserve.error="",We=null;try{let _=parseGithubUrl(e.sourceUrl),U=await t.get(`/api/repo/${_.owner}/${_.repo}/tree`,{params:{commit:k,connection:e.githubConnection,anonymizedRepoId:e.isUpdate&&i.repoId&&Ae(e.sourceUrl)===e._originalFullName?i.repoId:void 0,repositoryID:be()}});if(e.source?.commit!==k)return;We=bo(B(U.data.files||[])),e.preserve.commit=k,e.preserve.truncated=!!U.data.truncated}catch{e.preserve.error="The file list could not be loaded from GitHub. You can still use patterns.",e.preserve.patternsOpen=!0}finally{e.preserve.loading=!1}}}e.watch("source.commit",k=>{e.detectedType==="repo"&&k&&e.sourceUrl&&O().catch(()=>{})}),e.openPreserveFiles=()=>{let k={},_=[];for(let j of e.options?.preserveFiles||[]){let ue=String(j).trim();ue&&(!_.length&&rt(ue)?k[ro(ue.slice(1),Xe)]=!0:_.push(ue))}let U={};for(let j of Object.keys(k)){let ue=j.split("/");for(let we=1;we<ue.length;we++)U[ue.slice(0,we).join("/")]=!0}Object.assign(e.preserve,{open:!0,search:"",picked:k,expanded:U,patterns:_.join(`
`),patternsOpen:_.length>0}),X++,a(()=>{let j=document.getElementById("preserve-files-dialog");j?.showModal&&!j.open&&j.showModal(),document.getElementById("preserve-files-search")?.focus()},0),O()},e.closePreserveFiles=()=>{document.getElementById("preserve-files-dialog")?.close?.(),e.preserve.open=!1},e.savePreserveFiles=()=>{e.options.preserveFiles=ba([...at(),...et()]),e.closePreserveFiles()},e.preserveRows=()=>{if(!We)return[];let k=F(),_=(we,Ze,Yt)=>{let kt=!!e.preserve.picked[we],$n=k(we);return{kind:"file",path:we,label:Yt,depth:Ze,state:$n?"all":"none",locked:!kt&&$n,note:!kt&&$n?"matched by a pattern":kt&&!$n?"excluded by a pattern":""}},U=String(e.preserve.search||"").trim().toLowerCase();if(U)return We.files.filter(we=>we.toLowerCase().includes(U)).slice(0,300).map(we=>_(we,0,we));let j=[],ue=(we,Ze)=>{let Yt=We.dirs.get(we);for(let kt of Yt.dirs){let $n=!!e.preserve.expanded[kt],Da=et().includes(Qe(kt));j.push({kind:"dir",path:kt,label:kt.slice(we?we.length+1:0)+"/",depth:Ze,open:$n,state:S(kt),locked:!1,note:Da?"whole folder":""}),$n&&ue(kt,Ze+1)}for(let kt of Yt.files)j.push(_(kt,Ze,kt.slice(we?we.length+1:0)))};return ue("",0),j},e.preserveCount=()=>We?We.files.filter(E).length:0,e.togglePreserveDir=k=>{e.preserve.expanded[k]=!e.preserve.expanded[k]},e.togglePreserveFile=k=>{e.preserve.picked[k]=!e.preserve.picked[k],X++},e.togglePreserveFolder=k=>{let _=Qe(k),U=wt(k),j=et().filter(we=>we!==_&&we!==U),ue=S(k)==="all"||et().includes(_);for(let we of K(k))e.preserve.picked[we]=!1;X++,e.preserve.patterns=(ue?j:[...j,_]).join(`
`),ue&&K(k).some(E)&&(e.preserve.patterns=[...j,U].join(`
`))};let H=[".github","","docs"].flatMap(k=>["README.md","README","README.markdown","README.rst","README.txt","readme.md"].map(_=>(k?k+"/":"")+_));e.readmePreserved=()=>{if(e.detectedType!=="repo")return!1;let k=(e.options?.preserveFiles||[]).map(_=>String(_).trim()).filter(Boolean);if(!k.length)return!1;try{let _=wa(k);return H.some(U=>_(U))}catch{return!1}};function z(){let k={terms:e.terms&&!e.readmePreserved()?e.terms.split(`
`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(k.branchName=e.source.branch);try{let _=parseGithubUrl(e.sourceUrl);k.repoName=`${_.owner}/${_.repo}`}catch{}return k}function Y(k,_,U){let j=null,ue=0,we=()=>{if(e.detectedType!==k)return;j&&a.cancel(j);let Ze=++ue;e.previewStatus="loading",j=a(()=>{j=null;let Yt=_();if(!Yt){e.previewStatus="idle";return}t.post("/api/anonymize-preview",Yt).then(kt=>{Ze===ue&&(U(kt.data,Yt),e.previewStatus="ready")}).catch(()=>{Ze===ue&&(e.previewStatus="error")})},200)};return we.cancel=()=>{ue++,j&&a.cancel(j),j=null},e.on("dispose",we.cancel),we}e.retryPreview=()=>{e.detectedType==="repo"&&te(),e.detectedType==="pr"&&ae(),e.detectedType==="gist"&&Re()};let te=Y("repo",()=>e.readme?{content:e.readme,options:z()}:null,k=>{if(typeof k?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=k.content;let _="";try{let j=parseGithubUrl(e.sourceUrl),ue=e.source.branch||e.details&&e.details.defaultBranch||"main";_=`https://github.com/${j.owner}/${j.repo}/raw/${ue}/`}catch{}let U=renderMD(e.anonymize_readme,_);e.html_readme=U,a(()=>{Prism.highlightAll(),typeof bs=="function"&&document.querySelectorAll(".reviewer-preview .anonymize-preview-body").forEach(bs)},150)});function J(){!e.anonymize||!e.anonymize.terms||te()}async function Z(){let k=parseGithubUrl(e.sourceUrl),_=h();try{Se();let U=await t.get(`/api/pr/${k.owner}/${k.repo}/${k.pullRequestId}`,{params:{connection:e.githubConnection}});if(!b(_))return;e.details=U.data,e.pullRequestId||(e.pullRequestId=k.repo+"-PR"+k.pullRequestId+"-"+generateRandomId(4))}catch(U){if(!b(_))return;throw U.data&&(r("ERRORS."+U.data.error).then(j=>{e.addToast({title:"Error",date:new Date,body:j}),e.error=j},console.error),Fe(U.data.error)),x("sourceUrl","missing",!1),U}finally{w(_)}}let G=nt(new Map);function ge(){let k=new Set,_=e.details&&e.details.pullRequest;if(!_)return k;typeof _.title=="string"&&k.add(_.title),typeof _.body=="string"&&k.add(_.body),typeof _.diff=="string"&&k.add(_.diff);let U=_.comments||[];for(let j of U)typeof j.author=="string"&&k.add(j.author),typeof j.body=="string"&&k.add(j.body);return k}let ae=Y("pr",()=>{let k=ge(),_=Array.from(k);return _.length===0?null:{contents:_,options:z()}},(k,_)=>{if(!Array.isArray(k?.contents)||k.contents.length!==_.contents.length||k.contents.some(ue=>typeof ue!="string"))throw Error("Invalid preview response");let U=_.contents,j=new Map;for(let ue=0;ue<U.length&&ue<k.contents.length;ue++)j.set(U[ue],k.contents[ue]);G.clear(),j.forEach((ue,we)=>G.set(we,ue))});e.anonymizePrContent=function(k){return k&&(G.has(k)?G.get(k):"")};async function de(){let k=parseGithubUrl(e.sourceUrl),_=h();try{Se(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let U=await t.get(`/api/gist/source/${k.gistId}`);if(!b(_))return;e.details=U.data,e.gistId||(e.gistId="gist-"+k.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(U){if(!b(_))return;if(U.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,x("sourceUrl","missing",!1);return}if(U.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,x("sourceUrl","missing",!1);return}throw U.data&&(r("ERRORS."+U.data.error).then(j=>{e.addToast({title:"Error",date:new Date,body:j}),e.error=j},console.error),Fe(U.data.error)),x("sourceUrl","missing",!1),U}finally{w(_)}}let pe=nt(new Map);function De(){let k=new Set,_=e.details&&e.details.gist;if(!_)return k;typeof _.description=="string"&&k.add(_.description),typeof _.ownerLogin=="string"&&k.add(_.ownerLogin);let U=_.files||[];for(let ue of U)typeof ue.filename=="string"&&k.add(ue.filename),typeof ue.content=="string"&&k.add(ue.content);let j=_.comments||[];for(let ue of j)typeof ue.author=="string"&&k.add(ue.author),typeof ue.body=="string"&&k.add(ue.body);return k}let Re=Y("gist",()=>{let k=De(),_=Array.from(k);return _.length===0?null:{contents:_,options:z()}},(k,_)=>{if(!Array.isArray(k?.contents)||k.contents.length!==_.contents.length||k.contents.some(ue=>typeof ue!="string"))throw Error("Invalid preview response");let U=_.contents,j=new Map;for(let ue=0;ue<U.length&&ue<k.contents.length;ue++)j.set(U[ue],k.contents[ue]);pe.clear(),j.forEach((ue,we)=>pe.set(we,ue)),_e()});e.anonymizeGistContent=function(k){return k&&(pe.has(k)?pe.get(k):"")},e.previewGistFiles=[];function _e(){let k=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=k.map(_=>({filename:e.anonymizeGistContent(_.filename),content:e.anonymizeGistContent(_.content),language:_.language}))}e.watch("details.gist.files",_e,!0),e.watch("terms",_e);function me(){let k=e.conference;if(e.conference_data=null,!k)return;let _=k===v||e.isUpdate&&k===e._originalConference;k!==v&&(v=null),t.get("/api/conferences/"+k).then(U=>{e.conference===k&&(e.conference_data=U.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!_&&(e.options.expirationDate=new Date(e.conference_data.endDat Line truncated
`).filter(we=>we),connection:e.githubConnection,fullName:`${U.owner}/${U.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(j.options.pageSource=e.details.pageSource),Se();let ue=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(ue,j,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/status/"+e.repoId},we=>{if(we.data){let Ze=["quota_exceeded","subscription_required_for_never_expiration"].includes(we.data.error);Ze||r("ERRORS."+we.data.error).then(Yt=>{e.error=Yt},console.error),Fe(we.data.error),Ze&&(we.data.error==="subscription_required_for_never_expiration"&&(e._existingNever=!1),e.hostingQuotaBlocked=!0,e.hostingReview=!0,ot(()=>document.getElementById("repository-hosting")?.scrollIntoView({block:"center"})))}}).finally(()=>{_.disabled=!1})},e.anonymizeGist=k=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ze())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=k.currentTarget||k.target.closest?.("button")||k.target;_.disabled=!0;let U=parseGithubUrl(e.sourceUrl),j={gistId:e.gistId,terms:e.terms.trim().split(`
`).filter(we=>we),source:{gistId:U.gistId},options:e.options,conference:e.conference};Se();let ue=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(ue,j,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/gist/"+e.gistId},we=>{we.data&&(r("ERRORS."+we.data.error).then(Ze=>{e.error=Ze},console.error),Fe(we.data.error))}).finally(()=>{_.disabled=!1})},e.anonymizePullRequest=k=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(ze())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=k.currentTarget||k.target.closest?.("button")||k.target;_.disabled=!0;let U=parseGithubUrl(e.sourceUrl),j={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(`
`).filter(we=>we),source:{repositoryFullName:`${U.owner}/${U.repo}`,pullRequestId:U.pullRequestId},options:e.options,conference:e.conference};Se();let ue=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(ue,j,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/pr/"+e.pullRequestId},we=>{we.data&&(r("ERRORS."+we.data.error).then(Ze=>{e.error=Ze},console.error),Fe(we.data.error))}).finally(()=>{_.disabled=!1})},e.watch("conference",()=>{me()}),e.termHints=[],e.matchTermAsWritten=k=>{e.terms=uc(e.terms,k)},e.watch("options.preserveFiles",()=>{e.detectedType==="repo"&&te()}),e.watch("terms",()=>{e.termHints=dc(e.terms),e.detectedType==="repo"&&J(),e.detectedType==="pr"&&ae(),e.detectedType==="gist"&&Re()}),e.watch("options.image",()=>{e.detectedType==="repo"&&J(),e.detectedType==="pr"&&ae(),e.detectedType==="gist"&&Re()}),e.watch("options.link",()=>{e.detectedType==="repo"&&J(),e.detectedType==="pr"&&ae(),e.detectedType==="gist"&&Re()}),e.watch("details",()=>{e.detectedType==="pr"&&ae(),e.detectedType==="gist"&&Re()},!0)},Sa=function(e,t,o,i,s,r){let a=Tt();pc();let u=dn();e.on("dark-mode",(M,F)=>{e.aceOption&&(F?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let p=0,y=null,m=null;e.fileLoadingSlow=!1,e.fileReceivedBytes=0;function b(){y&&(y.resolve(),y=null),m&&(a.timeout.cancel(m),m=null)}let h=!1;e.on("dispose",()=>{h=!0,p++,b(),w&&w.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"click",M=>{e.symbolsOpen&&!M.target.closest?.(".symbols")&&(e.symbolsOpen=!1),e.moreOpen&&!M.target.closest?.(".tb-more")&&(e.moreOpen=!1),e.tocOpen&&!M.target.closest?.(".tb-toc-m")&&(e.tocOpen=!1),e.gotoOpen&&M.target.isConnected&&!M.target.closest?.(".goto-pop, .btn-goto, .tb-more")&&(e.gotoOpen=!1),e.accountOpen&&!M.target.closest?.(".acct")&&(e.accountOpen=!1),e.helpOpen&&!M.target.closest?.(".vb-help")&&(e.helpOpen=!1)}),u(document,"keydown",M=>{M.key==="Escape"&&(e.symbolsOpen=!1,e.moreOpen=!1,e.tocOpen=!1,e.gotoOpen=!1,e.accountOpen=!1,e.helpOpen=!1),(M.ctrlKey||M.metaKey)&&!M.altKey&&M.key&&M.key.toLowerCase()==="f"&&e.type==="html"&&window.document.querySelector(".reading-layout")&&(M.preventDefault(),e.toggleMdFind(!0))}),u(document,"keydown",function(M){if((M.metaKey||M.ctrlKey)&&M.key==="k"){M.preventDefault();var F=document.querySelector(".tree-search-input");F&&(F.focus(),F.select())}});var w=null;e.onFileSearchChange=function(){w&&(w.resolve(),w=null);let M=e.fileSearchQuery;if(!M||M.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let F=r.defer();w=F,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(M)}`,{timeout:F.promise}).then(function(B){if(!(h||w!==F)){w=null,e.fileSearchLoading=!1;var K={};e.files.forEach(function(pe){K[(pe.path||"")+"/"+pe.name]=!0});for(var E=[],S={},O=0;O<B.data.length;O++){var H=B.data[O];if(H.path)for(var z=H.path.split("/"),Y="",te=0;te<z.length;te++){var J=Y;Y=Y?Y+"/"+z[te]:z[te];var Z=J+"/"+z[te];!K[Z]&&!S[Z]&&(S[Z]=!0,E.push({name:z[te],path:J}))}}E.sort(function(pe,De){return(pe.path||"").split("/").length-(De.path||"").split("/").length}),E.length>0&&e.files.push.apply(e.files,E);for(var G=[],ge=0;ge<B.data.length;ge++){var ae=B.data[ge],de=(ae.path||"")+"/"+ae.name;!K[de]&&ae.size!=null&&(G.push(ae),K[de]=!0)}G.length>0&&e.files.push.apply(e.files,G),e.fileSearchResults=B.data}},function(){!h&&w===F&&(w=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let A={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},N=["license","txt"],R=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],v=["wav","mp3","ogg","wma","flac","aac","m4a"],C=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(M,F){if(e.repoId!=i.repoId)return he();if((i.path||"")!=e.filePath){window.matchMedia?.("(max-width: 767px)").matches&&(e.sidebarCollapsed=!0),e.filePath=i.path||"",e.paths=e.filePath.split("/").filter(B=>B&&B.trim().length>0),et();for(let B=0;B<e.paths.length-1;B++){let K=B>0?e.paths.slice(0,B).join("/"):"";e.files.some(S=>S.path===K)||e.getFiles(K)}}});function I(){if(e.paths[0]!="")return;let M=["readme.md","readme.txt","readme.org","readme.1st","readme"],F={};for(let K of e.files)K.name.toLowerCase().indexOf("readme")>-1&&(F[K.name.toLowerCase()]=K.name);let B=null;for(let K of M)if(F[K]){B=K;break}if(!B&&Object.keys(F).length>0&&(B=Object.keys(F)[0]),B){let K=o.url();K[K.length-1]!="/"&&(K+="/"),o.url(K+encodePathForUrl(F[B]))}}e.fileCounts=null;let V=0,q=new Set,W=!1;e.getFiles=function(M,F=!1){let B=e.repoId,K=V;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(M)}&v=${e.options.lastUpdateDate}`).then(function(E){if(h||B!==e.repoId||K!==V)return[];let S=M||"";return e.files=e.files.filter(O=>O.path!==S),e.file Line truncated
`).forEach((F,B)=>{for(let[K,E]of Ae){let S=K.exec(F);if(S&&!/^(if|for|while|switch|return|catch)$/.test(S[1])){M.push({name:S[1],kind:E,line:B+1});break}}}),be={content:e.content,list:M.slice(0,300)},be.list},e.goToSymbol=function(M){e.symbolsOpen=!1;let F=e.codeEditor;F&&(F.scrollToLine(M-1,!0,!0,()=>{}),F.gotoLine(M,0,!0),window.history.replaceState(null,"",window.location.pathname+window.location.search+"#L"+M),window.dispatchEvent(new HashChangeEvent("hashchange")))},e.gotoLine=function(){e.codeEditor&&(e.moreOpen=!1,e.gotoError="",e.gotoValue=String(e.codeEditor.getCursorPosition().row+1),e.gotoOpen=!0,setTimeout(()=>{let M=window.document.getElementById("goto-input");M&&(M.focus(),M.select())},0))},e.closeGoto=function(){e.gotoOpen=!1,e.gotoError="",e.codeEditor?.focus()},e.submitGoto=function(){let M=e.codeEditor;if(!M)return;let F=/^\s*:?\s*(\d+)\s*(?:[:,]\s*(\d+))?\s*$/.exec(e.gotoValue||""),B=M.session.getLength();if(!F||+F[1]<1||+F[1]>B){e.gotoError="Enter a line from 1 to "+B;return}M.gotoLine(+F[1],F[2]?Math.max(0,+F[2]-1):0,!0),e.gotoOpen=!1,e.gotoError="",M.focus()},e.rootEntries=function(){return[...e.files||[]].sort((M,F)=>{let B=M.size==null,K=F.size==null;return B!==K?B?-1:1:M.name.localeCompare(F.name)})},e.formatSize=function(M){if(M==null)return"";if(M<1024)return M+" B";let F=M/1024,B=K=>K.toFixed(1).replace(/\.0$/,"");return F<1024?B(F)+" KB":F<1024*1024?B(F/1024)+" MB":B(F/1024/1024)+" GB"},e.fileSize=function(M){if(!M)return null;let F=M.replace(/^\/+/,""),B=(e.files||[]).find(K=>(K.path?K.path+"/":"")+K.name===F);return B&&B.size!=null?B.size:null},e.revealFolder=function(M){e.sidebarHidden=!1,e.sidebarCollapsed=!1,ot(()=>{let F=window.document.querySelector('.files a[data-path="/'+(window.CSS?.escape?window.CSS.escape(M):M)+'"]');F&&(F.closest("li")?.classList.contains("open")||F.click(),F.scrollIntoView({block:"nearest"}),F.focus())})};let le={content:null,n:0},fe=M=>{if(le.content===M)return le.n;let F=M;if(typeof F=="string")try{F=JSON.parse(F)}catch{F=null}let B=[],K=S=>{Array.isArray(S)?B.push(S.join("")):typeof S=="string"&&B.push(S)};(F&&(F.cells||(F.worksheets||[]).flatMap(S=>S.cells||[]))||[]).forEach(S=>{K(S?.source??S?.input),(S?.outputs||[]).forEach(O=>{K(O?.text),O?.data&&(K(O.data["text/plain"]),K(O.data["text/markdown"]),K(O.data["text/html"])),K(O?.traceback)})});let E=B.reduce((S,O)=>S+(O.match(uo)||[]).length,0);return le={content:M,n:E},E};e.redactionCount=function(){return e.type==="IPython"?fe(e.content):typeof e.content!="string"?0:((e.type==="html"?e.content.replace(/<[^>]*>/g," "):e.content).match(uo)||[]).length},e.renderRedacted=Oi;let ke=M=>M.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,60)||"section";e.renderReadme=function(M){let F=e.renderRedacted(M);if(!F||typeof window.DOMParser!="function")return F;let B=new window.DOMParser().parseFromString("<div>"+F+"</div>","text/html"),K={};return B.querySelectorAll("h1, h2, h3").forEach(E=>{let S=E.id||ke(E.textContent);K[S]?S+="-"+ ++K[S]:K[S]=1,E.id=S}),B.body.firstChild.innerHTML};let Te={content:null,list:[]};e.readmeToc=function(){if(e.type!=="html"||typeof e.content!="string")return[];if(Te.content===e.content)return Te.list;let F=[...new window.DOMParser().parseFromString("<div>"+e.renderReadme(e.sanitize?e.sanitize(e.content):e.content)+"</div>","text/html").querySelectorAll("h2, h3")].map(B=>({id:B.id,text:B.textContent.trim(),level:B.tagName==="H3"?3:2})).slice(0,40);return Te={content:e.content,list:F},F},e.activeHeading=null,u(window,"scroll",()=>{let M=e.readmeToc?e.readmeToc():[];if(!M.length)return;let F=150,B="",K="";for(let E of M){let S=window.document.getElementById(E.id);if(!S)continue;let O=S.getBoundingClientRect().top;O<F?B=E.id:!K&&O<window.innerHeight-80&&(K=E.id)}K&&(B=K),e.activeHeading!==B&&(e.activeHeading=B)},{capture:!0,passive:!0}),e.scrollToHeading=function(M){if(!M){(window.document.querySelector(".explorer-content, .file-card-body, .main-pane")||window).scrollTo({top:0,behavior:"smooth"}),e.activeHeading="";return}let F=window.document.getElementById(M);F&&F.scrollIntoView({behavior:"smooth",block:"start"}),e.activeHeading=M},e.csvView="table";let Xe={content:null,rows:[]},rt=(M,F)=>{let B=[],K=[],E="",S=!1;for(let O=0;O<M.length;O++){let H=M[O];S?H==='"'?M[O+1]==='"'?(E+='"',O++):S=!1:E+=H:H==='"'&&E===""?S=!0:H===F?(K.push(E),E=""):H===`
`||H==="\r"?(H==="\r"&&M[O+1]===`
`&&O++,K.push(E),B.push(K),K=[],E=""):E+=H}return(E!==""||K.length)&&(K.push(E),B.push(K)),B.filter(O=>O.length>1||O[0]!=="")};e.isCsv=()=>typeof e.content=="string"&&e.type!=="html"&&/\.(csv|tsv)$/i.test(e.filePath||"")&&e.content.length<=1024*1024,e.csvRows=()=>{if(Xe.content!==e.content){let M=/\.tsv$/i.test(e.filePath||"")?" ":",";Xe={content:e.content,rows:rt(e.content,M)}}return Xe.rows},e.csvNumCol=M=>{let F=e.csvRows().slice(1).map(B=>B[M]).filter(B=>B!=null&&String(B).trim()!=="");return F.length>0&&F.every(B=>e.csvNumeric(B))},e.csvNumeric=M=>/^\s*[-+]?(\d[\d,]*)?(\.\d+)?(e[-+]?\d+)?%?\s*$/i.test(M)&&/\d/.test(M),e.redactParts=function(M){let F=[],B=0,K,E=/\bXXXX-(\d+)\b/g;for(M=String(M||"");K=E.exec(M);)K.index>B&&F.push({t:M.slice(B,K.index)}),F.push({n:K[1]}),B=K.index+K[0].length;return B<M.length&&F.push({t:M.slice(B)}),F},e.pathCopied=!1,e.copyPath=async function(){window.navigator.clipboard?.writeText&&(await window.navigator.clipboard.writeText(e.filePath||""),e.pathCopied=!0,setTimeout(()=>{e.pathCopied=!1},1600))},e.contentCopied=!1,e.copyContent=async function(){if(typeof e.content!="string"||!window.navigator.clipboard?.writeText)return;let M=e.content;if(e.type==="html"&&e.url)try{M=await(await window.fetch(e.url,{credentials:"same-origin"})).text()}catch{return}await window.navigator.clipboard.writeText(M),e.contentCopied=!0,setTimeout(()=>{e.contentCopied=!1},1600)};function at(M){return A[M]?A[M]:M}function Qe(M){return M=="pdf"?"pdf":M=="html"||M=="htm"?"html-doc":M=="md"?"md":M=="org"?"org":M=="ipynb"?"IPython":N.indexOf(M)>-1?"text":R.indexOf(M)>-1?"image":C.indexOf(M)>-1?"media":v.indexOf(M)>-1?"audio":"code"}function wt(M,F){let B=p;if(!M){e.type="error",e.content="no_file_selected";return}let K=e.type;(K==="code"||K==="text")&&qs().catch(()=>{}),e.type="loading",e.content="loading",e.fileLoadingSlow=!1,e.fileReceivedBytes=0;let E=r.defer();y=E,m=a.timeout(()=>{!h&&B===p&&e.type==="loading"&&(e.fileLoadingSlow=!0)},1500);let S=F&&F.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(M)}?v=`+S,{timeout:E.promise,onDownloadProgress:O=>{!h&&B===p&&(e.fileReceivedBytes=O)},transformResponse:O=>O}).then(O=>{if(!(h||B!==p)){if(b(),e.type=K,e.content=O.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(O.data,o.url()+"/../"),e.type="html"),e.type=="org"){let z=contentAbs2Relative(O.data);var H=new Org.Parser().parse(z).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(H.toString()),e.type="html"}e.type=="code"&&O.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},O=>{h||B!==p||(b(),e.type="error",e.content=Ca(O))})}function et(){p++,b(),e.content="",e.file=Q();let M="0";e.file&&e.file.sha&&(M=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${M}`;let F=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${F?encodePathForUrl(F):""}`,e.showSource=!1,e.imageSize="",e.allowScripts=!1;let B=e.filePath.toLowerCase(),K=B.lastIndexOf(".");K>-1&&(B=B.substring(K+1));let E={javascript:"JavaScript",typescript:"TypeScript",tsx:"TSX",jsx:"JSX",python:"Python",java:"Java",c_cpp:"C/C++",csharp:"C#",golang:"Go",rust:"Rust",ruby:"Ruby",php:"PHP",html:"HTML",css:"CSS",scss:"SCSS",json:"JSON",yaml:"YAML",markdown:"Markdown",sh:"Shell",dockerfile:"Dockerfile",xml:"XML",sql:"SQL",kotlin:"Kotlin",swift:"Swift",scala:"Scala",r:"R",julia:"Julia",latex:"LaTeX",toml:"TOML",csv:"CSV",tsv:"TSV",text:""},S=at(B);if(e.languageName=E[S]??(S?S.charAt(0).toUpperCase()+S.slice(1):""),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:window.matchMedia?.("(max-width: 767px)").matches?12:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!1,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:at(B),onLoad:function(O){e.codeEditor=bo(O);{let de=O.session,pe=de.getTokens.bind(de),De=/\bXXXX-\d+\b/g;if(de.getTokens=function(Re){let _e=pe(Re);if(!_e.some(Se=>Se.value.indexOf("XXXX-")!==-1))return _e;let me=[];for(let Se of _e){if(Se.value.indexOf("XXXX-")===-1){me.push(Se);continue}let ze=0;De.lastIndex=0;let Fe;for(;Fe=De.exec(Se.value);)Fe.index>ze&&me.push({type:Se.type,value:Se.value.slice(ze,Fe.index)}),me.push({type:"redacted.n"+Fe[0].slice(5),value:Fe[0]}),ze=Fe.index+Fe[0].length;ze<Se.value.length&&me.push({type:Se.type,value:Se.value.slice(ze)})}return me},!window.document.getElementById("redact-index-rules")){let Re=window.document.createElement("style");Re.id="redact-index-rules",Re.textContent=Array.from({length:99},(_e,me)=>`.ace_redacted.ace_n${me+1}::after{content:"${me+1}"}`).join(""),window.document.head.appendChild(Re)}O.renderer.updateFull(!0)}O.session Line truncated
Contact: jane.smith@mit.edu`,e.demoTerms="Jane Smith, Smith, MIT CSAIL, jane.smith@mit.edu",e.demoParts=function(){let u=(e.demoTerms||"").split(/[,\n]/).map(m=>m.trim()).filter(Boolean).sort((m,w)=>w.length-m.length),p=m=>m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");if(!u.length)return[{text:e.demoText}];let y=new RegExp("("+u.map(p).join("|")+")","gi"),h={},b=0;return(e.demoText||"").split(y).filter(m=>m!=="").map(m=>{let w=u.find(A=>A.toLowerCase()===m.toLowerCase());return w?(h[w.toLowerCase()]||(h[w.toLowerCase()]=++b),{text:String(h[w.toLowerCase()]),redacted:!0,original:m}):{text:m}})},e.demoCount=()=>e.demoParts().filter(u=>u.redacted).length,e.cards=[{key:"repositories",total:0,label:"repositories anonymized"},{key:"users",total:0,label:"researchers"},{key:"pageViews",total:0,label:"page views"},{key:"pullRequests",total:0,label:"pull requests"}],e.statsEmpty=()=>!!e.stat&&e.cards.every(u=>!u.total);function r(){t.get("/api/stat/").then(u=>{e.stat=u.data,e.cards[0].total=u.data.nbRepositories,e.cards[1].total=u.data.nbUsers,e.cards[2].total=u.data.nbPageViews,e.cards[3].total=u.data.nbPullRequests}).catch(()=>{})}r();function a(u){let p={series:u,bars:[],viewW:100,deltaToday:0,pctChange:0,pctAbs:0,isUp:!0};if(!u||u.length<2)return p;let y=new Array(u.length-1);for(let S=1;S<u.length;S++)y[S-1]=u[S]-u[S-1];let h=y.length,b=Math.max.apply(null,y),m=Math.min.apply(null,y),w=Math.min(0,m),A=b-w||1;p.viewW=h*2,p.bars=new Array(h);for(let S=0;S<h;S++){let R=(y[S]-w)/A,g=Math.max(1.5,R*34);p.bars[S]={x:(S*2+.25).toFixed(2),y:(36-g).toFixed(2),w:"1.5",h:g.toFixed(2)}}if(p.deltaToday=y[h-1],h>=2){let S=y[h-2];S&&(p.pctChange=(p.deltaToday-S)/S*100)}return p.pctAbs=Math.round(Math.abs(p.pctChange)),p.isUp=p.pctChange>=0,p}e.history={repositories:a([]),users:a([]),pageViews:a([]),pullRequests:a([])},t.get("/api/stat/history?days=60").then(u=>{let p=u.data||[];e.history={repositories:a(p.map(y=>y.nbRepositories||0)),users:a(p.map(y=>y.nbUsers||0)),pageViews:a(p.map(y=>y.nbPageViews||0)),pullRequests:a(p.map(y=>y.nbPullRequests||0))}}).catch(()=>{})},Cc=function(e,t,o,i,s,r){let a=Tt();e.on("routeLeave",function(){$('[data-toggle="tooltip"]').tooltip("dispose")}),e.watch("user.status",()=>{e.user==null&&o.url("/")}),e.user==null&&o.url("/"),a.timeout(()=>{$('[data-toggle="tooltip"]').tooltip()},250),e.quotaExpanded=!1,e.closeQuota=()=>{e.quotaExpanded=!1,xe(()=>document.querySelector(".dashboard-quota > summary")?.focus())},Qt()(document,"click",D=>{e.quotaExpanded&&!D.target.closest?.(".dashboard-quota")&&(e.quotaExpanded=!1)}),e.filtersExpanded=!1,e.projectView="all",e.selectedProject=null,e.projectName="",e.nameSaving=!1,e.nameError="",e.nameMessage="",e.needsAttention=D=>D.status==="error"||D._broken||p(D.status)==="progress"&&D._stale,e.attentionCount=()=>e.dashboardTotals?.attention??e.items.filter(e.needsAttention).length,e.hasProjects=()=>(e.dashboardTotals?.total??e.items.length)>0,e.setProjectView=D=>{e.projectView=D,D==="attention"&&(e.filters.status.error=!0,e.filters.status.progress=!0)},e.idleText=D=>{let te=Qr(D?.anonymizeDate||D?.lastView)||"";return/ ago$/.test(te)?"No activity for "+te.replace(/ ago$/,""):"No activity since "+te.replace(", "+new Date().getFullYear(),"")},e.projectDetailsId=D=>"project-details-"+encodeURIComponent(D._type+":"+(D._id||D._source||"unknown")),e.showProjectDetails=async D=>{e.selectedProject=D,e.projectName=D.projectName||"",e.nameError="",e.nameMessage="",await xe();let te=document.getElementById(e.projectDetailsId(D));te?.focus(),te?.scrollIntoView?.({block:"nearest"})},e.closeProjectDetails=D=>{e.selectedProject=null,xe(()=>document.querySelector(`[data-project-actions="${encodeURIComponent(D._type+":"+D._id)}"]`)?.focus())},e.saveProjectName=async D=>{if(e.nameSaving||!D._id)return;let te=e.projectName.trim();if(te.length>100){e.nameError="Use 100 characters or fewer.";return}e.nameSaving=!0,e.nameError="",e.nameMessage="";try{let ue=await t.post("/api/user/project-name",{type:D._type,id:D._id,name:te});D.projectName=ue.data.name,D._label=D.projectName||D._fallbackLabel,e.selectedProject===D&&(e.nameMessage=te?"Project name saved.":"Default project name restored."),C||(e.dashboardCursor=null,await V(),e.selectedProject===D&&(e.selectedProject=e.items.find(Pe=>Pe._type===D._type&&Pe._id===D._id)||null))}catch{e.selectedProject===D&&(e.nameError="The project name could not be saved. Try again.")}finally{e.nameSaving=!1}},e.copyingId=null,e.copyLink=async D=>{if(!D._viewUrl||e.copyingId)return;let te=new URL(D._viewUrl,s.location.origin).href;e.copyingId=D._type+":"+D._id;try{await Ra(te),e.addToast({title:"Link copied",body:"The anonymous link is ready to share."})}catch{e.addToast({title:"Copy this anonymous link",body:te})}finally{e.copyingId=null}},e.items=[],e.search="",e.loading=!0,e.statusKeyLabels={ready:"Ready",progress:"Preparing",error:"Error",expired:"Expiring / expired",removed:"Removing / removed"};let u=["queue","download","downloaded","preparing","anon Line truncated
`)),e.options=Object.assign({},e.options,z.options),e.options.expirationDate=z.options&&z.options.expirationDate?new Date(z.options.expirationDate):ne(),!i.repoId&&!i.pullRequestId&&!i.gistId&&!e.anonymize?.terms?.dirty&&(e.terms=e.defaultTerms),k&&k()})}function J(k,_,z){e.anonymize&&e.anonymize[k]&&e.anonymize[k].setValidity(_,z)}function ce(k){try{let _=parseGithubUrl(k);if(_&&_.owner&&_.repo)return _.owner+"/"+_.repo}catch{}return null}e.accessRepairAllowed=!1,e.repairingGitHubAccess=!1,e.accessRepairMessage="",e.repairGitHubAccess=async()=>{if(!e.accessRepairAllowed||e.repairingGitHubAccess||!e.githubConnections?.appEnabled||!i.repoId||e.role!=="owner"||e.githubConnection!=="github-app"||ce(e.sourceUrl)!==e._originalFullName)return;e.repairingGitHubAccess=!0,e.accessRepairMessage="";let k=m();try{let _=await t.get("/github/connections");if(e.githubConnections=_.data,!_.data.appEnabled)return;let z=await t.post("/github/connections/migrate",{type:"repository",id:i.repoId,connection:"github-app"},{headers:{"X-CSRF-Token":_.data.csrf}});if(!b(k))return;e.error=null,z.data.fullName&&(e._originalFullName=z.data.fullName,e.source.fullName=z.data.fullName,e.sourceUrl="https://github.com/"+z.data.fullName),e.accessRepairMessage="GitHub access repaired. Your anonymous URL and published commit are unchanged.",await e.urlSelected(!0)}catch{b(k)&&(e.accessRepairMessage="Unable to repair GitHub access. Check the App's repository permissions in Manage access, then retry. Your published snapshot has not been replaced.")}finally{e.repairingGitHubAccess=!1,w(k)}},e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,e.reconnectSource=async()=>{if(confirm("Reconnect to the repository currently at this GitHub URL? Review its branch and commit before saving. Saving will replace the published snapshot.")){e.reconnectingSource=!0,e.reconnectRepositoryId=void 0,e.source.commit="",e.source.branch="",e.readme="",e.branches=[];try{await st()}catch{}}};function ke(){return e.reconnectingSource||!e.isUpdate||!e._originalRepositoryID?void 0:ce(e.sourceUrl)===e._originalFullName?e._originalRepositoryID:void 0}async function De(){e._preservingDraft=!0;try{await e.urlSelected(!0)}finally{e._preservingDraft=!1}}async function et(){let k=new URLSearchParams(window.location.search).get("billingDraft");if(k){R.restore();try{let z=(await t.get("/api/billing/draft/"+encodeURIComponent(k))).data;if(z.path!==s.path())throw new Error("Wrong task");g=z.values.conference||null;for(let x of["sourceUrl","terms","repoId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(z.values,x)&&(e[x]=z.values[x]);return e.options?.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),C=z.id,M=JSON.stringify(R.checkpoint()),e.draftRestored=!0,e.hostingReview=!0,e.sourceUrl&&await De(),s.replace?.(s.path()),!0}catch{e.billingError="The checkout draft could not be restored. Retry by reloading this page; any local draft is still available."}}let _;try{_=JSON.parse(sessionStorage.getItem("github-access-draft")||"null")}catch{return!1}if(!_||_.path!==s.path()||Date.now()-_.savedAt>=30*6e4)return R.restore()?(e.sourceUrl&&await De(),!0):!1;R.restore();for(let z of["sourceUrl","terms","repoId","pullRequestId","gistId","source","options","conference","githubConnection"])Object.prototype.hasOwnProperty.call(_.draft,z)&&(e[z]=_.draft[z]);return e.options.expirationDate&&(e.options.expirationDate=new Date(e.options.expirationDate)),await De(),sessionStorage.removeItem("github-access-draft"),!0}we(()=>{!i.repoId&&!i.pullRequestId&&!i.gistId&&a(et,0),i.repoId&&i.repoId!=""&&(e.isUpdate=!0,e.detectedType="repo",e.repoId=i.repoId,t.get("/api/repo/"+e.repoId).then(async k=>{e.accessRepairAllowed=!["removed","archived","preparing","queue","download","removing","expiring"].includes(k.data.status),e.githubConnection=k.data.connection||"oauth",e.sourceUrl="https://github.com/"+k.data.source.fullName,e._originalFullName=k.data.source.fullName,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.role=k.data.role||"owner",e._existingNever=k.data.options.expirationMode==="never",e._savedExpirationDate=k.data.options.expirationDate?new Date(k.data.options.expirationDate):null,e.coauthors=k.data.coauthors||[],e._originalBranch=k.data.source.branch,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,e.repositoryID=k.data.source.repositoryID,e._originalRepositoryID=k.data.source.repositoryID,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=S(parseGithubUrl(e.sourceUrl)),!await et()&&(await Promise.all([st(),tt()]),me())},()=>{s.url("/404")})),i.pullRequestId&&i.pullRequestId!=""&&(e.isUpdate=!0,e.detectedType="pr",e.pullRequestId=i.pullRequestId,t.get("/api/pr/"+e.pullRequestId).then(async k=>{if(e.githubConnection=k.data.connection||"oauth",e.sourceUrl="https://github.com/"+k.data.source.repositoryFullName+"/pull/"+k.data.source.pullRequestId,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=S(parseGithubUrl(e.sourceUrl)),!await et())try{await le()}catch{}},()=>{s.url("/404")})),i.gistId&&i.gistId!=""&&(e.isUpdate=!0,e.detectedType="gist",e.gistId=i.gistId,t.get("/api/gist/"+e.gistId).then(async k=>{e.sourceUrl="https://gist.github.com/"+k.data.source.gistId,e.terms=k.data.options.terms.filter(_=>_).join(`
`),e.source=k.data.source,e.options=Object.assign({},e.options,k.data.options),e.conference=k.data.conference,e._originalConference=k.data.conference,k.data.options.expirationDate&&(e.options.expirationDate=new Date(k.data.options.expirationDate)),A=S(parseGithubUrl(e.sourceUrl)),!await et()&&await Me()},()=>{s.url("/404")}))}),t.get("/github/connections").then(k=>{e.githubConnections=k.data,!i.repoId&&!i.pullRequestId&&!i.gistId&&e.githubConnection===void 0&&k.data.appEnabled&&k.data.appConnected&&(e.githubConnection="github-app",e.sourceUrl&&e.workspaceOpen&&De())}).catch(()=>{}),e.urlSelected=async(k=!1)=>{let _=++p;e.previousConfigurations=[],e.previousConfigurationId="";let z;try{z=parseGithubUrl(e.sourceUrl.trim())}catch{e.sourceLoading=!1,G.cancel(),Ne.cancel(),Ee.cancel(),e.previewStatus="idle",e.sourceUrlError=e.sourceUrl?"Please provide a valid GitHub URL.":"",J("sourceUrl","github",!1);return}let x=S(z),pe=k||A===x;A=x,e.sourceUrlError="",J("sourceUrl","github",!0);let be=document.activeElement?.id==="sourceUrl-landing";e.workspaceOpen=!0,setTimeout(()=>{let Fe=window.document.getElementById("sourceUrl");if(Fe){try{Fe.setSelectionRange(0,0)}catch{}Fe.scrollLeft=0}},50),be&&a(()=>document.getElementById("sourceUrl")?.focus(),0),e.reconnectingSource=!1,e.reconnectRepositoryId=void 0,!pe&&!e.isUpdate&&(e.repoId="",e.pullRequestId="",e.gistId=""),e.details=null,e.branches=[],pe||(e.source={type:"GitHubStream",branch:"",commit:""}),G.cancel(),Ne.cancel(),Ee.cancel(),re.clear(),Oe.clear(),e.previewStatus="idle",e.anonymize_readme="",e.readme="",e.html_readme="",e.detectedType=null,e.gistOAuthRequired=!1,e.gistAppRequired=!1,e._preservingDraft=pe;try{z.gistId&&!z.repo?(e.detectedType="gist",e.source={gistId:z.gistId},await Me()):z.pullRequestId?(e.detectedType="pr",e.source={repositoryFullName:z.owner+"/"+z.repo,pullRequestId:z.pullRequestId},await le()):(e.detectedType="repo",te(),await Promise.all([st(),tt()]),me())}catch{}finally{_===p&&(e._preservingDraft=!1)}$('[data-toggle="tooltip"]').tooltip()},$('[data-toggle="tooltip"]').tooltip(),e.watch("source.branch",async()=>{if(e.detectedType!=="repo")return;let k=e.branches.filter(z=>z.name==e.source.branch)[0];if(!k)return;!(!e.reconnectingSource&&e.isUpdate&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=k.commit),e.readme=k.readme,await tt(),me()}),e.getBranches=async k=>{let _=parseGithubUrl(e.sourceUrl),z=m();try{let x=await t.get(`/api/repo/${_.owner}/${_.repo}/branches`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&ce(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:k===!0||e.reconnectingSource?"1":"0",repositoryID:ke()}});if(!b(z))return;e.branches=x.data,e.sourceUnreachable=!1,e.source.branch||(e.source.branch=e.details.defaultBranch);let pe=e.branches.filter(be=>be.name==e.source.branch);pe.length>0&&(!(!e.reconnectingSource&&!k&&e.isUpdate&&!e.options.update&&e._originalBranch===e.source.branch&&e.source.commit)&&!(e._preservingDraft&&e.source.commit)&&(e.source.commit=pe[0].commit),e.readme=pe[0].readme,await tt(k))}catch(x){if(!b(z))return;e.branches=[],e.sourceUnreachable=x&&(x.status===404||x.data&&x.data.error==="repo_not_found");let pe=x&&x.data&&x.data.error||(x&&x.status===404?"repo_not_found":"unknown_error");r("ERRORS."+pe).then(be=>{e.toasts=e.toasts||[],e.addToast({title:"Error",date:new Date,body:be}),e.error=be},console.error),typeof J=="function"&&J("sourceUrl","missing",!1)}finally{w(z)}};async function st(){let k=parseGithubUrl(e.sourceUrl),_=m();try{ct();let z=await t.get(`/api/repo/${k.owner}/${k.repo}/`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&ce(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,repositoryID:ke(),force:"1"}});if(!b(_))return;e.details=z.data,e.reconnectingSource&&(e.reconnectRepositoryId=e.details.externalId),e.details&&e.details.id&&(e.repositoryID=e.details.id),e.repoId||(e.repoId=e.details.repo+"-"+generateRandomId(4)),await e.getBranches(e.reconnectingSource)}catch(z){if(!b(_))return;throw z.data&&(r("ERRORS."+z.data.error).then(x=>{e.addToast({title:"Error",date:new Date,body:x}),e.error=x},console.error),Qe(z.data.error)),J("sourceUrl","missing",!1),z}finally{w(_)}}async function tt(k){if(e.readme&&!k)return e.readme;let _=parseGithubUrl(e.sourceUrl),z=m();try{let x=await t.get(`/api/repo/${_.owner}/${_.repo}/readme`,{params:{reconnect:e.reconnectingSource?"1":void 0,anonymizedRepoId:e.isUpdate&&i.repoId&&ce(e.sourceUrl)===e._originalFullName?i.repoId:void 0,connection:e.githubConnection,force:k===!0?"1":"0",branch:e.source.branch,repositoryID:ke()}});b(z,!0)&&(e.readme=x.data)}catch{b(z,!0)&&(e.readme="")}finally{w(z)}}let He={magicalBraces:!0},bt=k=>k.startsWith("/")&&!k.endsWith("/")&&Vn(uo(k.slice(1),He),He)===k.slice(1),dt=()=>Object.keys(e.preserve.picked).filter(k=>e.pr Line truncated
`).map(k=>k.trim()).filter(Boolean),I=null,U=0,F=null,W=()=>!1;function E(){let k=U+"\0"+e.preserve.patterns;if(k!==F){F=k;try{W=Ea(Ca([...dt(),...fe()]))}catch{W=()=>!1}}return W}function N(k){let _=new Map([["",{dirs:[],files:[]}]]);for(let z of k){let x=z.split("/"),pe="";for(let be=0;be<x.length-1;be++){let Fe=x.slice(0,be+1).join("/");_.has(Fe)||(_.set(Fe,{dirs:[],files:[]}),_.get(pe).dirs.push(Fe)),pe=Fe}_.get(pe).files.push(z)}for(let z of _.values())z.dirs.sort();return{files:k,dirs:_,descendants:new Map}}function P(k){return I.descendants.has(k)||I.descendants.set(k,I.files.filter(_=>_.startsWith(k+"/"))),I.descendants.get(k)}let H=k=>E()(k);function B(k){let _=P(k),z=0;for(let x of _)H(x)&&z++;return z===0?"none":z===_.length?"all":"some"}e.preserve={open:!1,loading:!1,error:"",truncated:!1,commit:"",search:"",expanded:{},picked:{},patterns:"",patternsOpen:!1},e.preserveSummary=()=>{let k=(e.options?.preserveFiles||[]).map(_=>String(_).trim()).filter(Boolean).map(_=>bt(_)?uo(_.slice(1),He):_);return k.length?k.slice(0,2).join(", ")+(k.length>2?` and ${k.length-2} more`:""):"None. Every file is redacted."};async function K(){let k=e.source?.commit;if(!(I&&e.preserve.commit===k)){e.preserve.loading=!0,e.preserve.error="",I=null;try{let _=parseGithubUrl(e.sourceUrl),z=await t.get(`/api/repo/${_.owner}/${_.repo}/tree`,{params:{commit:k,connection:e.githubConnection,anonymizedRepoId:e.isUpdate&&i.repoId&&ce(e.sourceUrl)===e._originalFullName?i.repoId:void 0,repositoryID:ke()}});if(e.source?.commit!==k)return;I=Co(N(z.data.files||[])),e.preserve.commit=k,e.preserve.truncated=!!z.data.truncated,e.previewTreeOpen={}}catch{e.preserve.error="The file list could not be loaded from GitHub. You can still use patterns.",e.preserve.patternsOpen=!0}finally{e.preserve.loading=!1}}}e.watch("source.commit",k=>{e.detectedType==="repo"&&k&&e.sourceUrl&&K().catch(()=>{})}),e.openPreserveFiles=()=>{let k={},_=[];for(let x of e.options?.preserveFiles||[]){let pe=String(x).trim();pe&&(!_.length&&bt(pe)?k[uo(pe.slice(1),He)]=!0:_.push(pe))}let z={};for(let x of Object.keys(k)){let pe=x.split("/");for(let be=1;be<pe.length;be++)z[pe.slice(0,be).join("/")]=!0}Object.assign(e.preserve,{open:!0,search:"",picked:k,expanded:z,patterns:_.join(`
`),patternsOpen:_.length>0}),U++,a(()=>{let x=document.getElementById("preserve-files-dialog");x?.showModal&&!x.open&&x.showModal(),document.getElementById("preserve-files-search")?.focus()},0),K()},e.closePreserveFiles=()=>{document.getElementById("preserve-files-dialog")?.close?.(),e.preserve.open=!1},e.savePreserveFiles=()=>{e.options.preserveFiles=Ca([...dt(),...fe()]),e.closePreserveFiles()},e.preserveRows=()=>{if(!I)return[];let k=E(),_=(be,Fe,kt)=>{let pt=!!e.preserve.picked[be],Fn=k(be);return{kind:"file",path:be,label:kt,depth:Fe,state:Fn?"all":"none",locked:!pt&&Fn,note:!pt&&Fn?"matched by a pattern":pt&&!Fn?"excluded by a pattern":""}},z=String(e.preserve.search||"").trim().toLowerCase();if(z)return I.files.filter(be=>be.toLowerCase().includes(z)).slice(0,300).map(be=>_(be,0,be));let x=[],pe=(be,Fe)=>{let kt=I.dirs.get(be);for(let pt of kt.dirs){let Fn=!!e.preserve.expanded[pt],Pa=fe().includes(vt(pt));x.push({kind:"dir",path:pt,label:pt.slice(be?be.length+1:0)+"/",depth:Fe,open:Fn,state:B(pt),locked:!1,note:Pa?"whole folder":""}),Fn&&pe(pt,Fe+1)}for(let pt of kt.files)x.push(_(pt,Fe,pt.slice(be?be.length+1:0)))};return pe("",0),x},e.preserveCount=()=>I?I.files.filter(H).length:0,e.togglePreserveDir=k=>{e.preserve.expanded[k]=!e.preserve.expanded[k]},e.togglePreserveFile=k=>{e.preserve.picked[k]=!e.preserve.picked[k],U++},e.togglePreserveFolder=k=>{let _=vt(k),z=X(k),x=fe().filter(be=>be!==_&&be!==z),pe=B(k)==="all"||fe().includes(_);for(let be of P(k))e.preserve.picked[be]=!1;U++,e.preserve.patterns=(pe?x:[...x,_]).join(`
`),pe&&P(k).some(H)&&(e.preserve.patterns=[...x,z].join(`
`))};let se=[".github","","docs"].flatMap(k=>["README.md","README","README.markdown","README.rst","README.txt","readme.md"].map(_=>(k?k+"/":"")+_));e.readmePreserved=()=>{if(e.detectedType!=="repo")return!1;let k=(e.options?.preserveFiles||[]).map(_=>String(_).trim()).filter(Boolean);if(!k.length)return!1;try{let _=Ea(k);return se.some(z=>_(z))}catch{return!1}};function Q(){let k={terms:e.terms&&!e.readmePreserved()?e.terms.split(`
`):[],image:!!e.options.image,link:!!e.options.link,repoId:e.repoId};e.source&&e.source.branch&&(k.branchName=e.source.branch);try{let _=parseGithubUrl(e.sourceUrl);k.repoName=`${_.owner}/${_.repo}`}catch{}return k}function Z(k,_,z){let x=null,pe=0,be=()=>{if(e.detectedType!==k)return;x&&a.cancel(x);let Fe=++pe;e.previewStatus="loading",x=a(()=>{x=null;let kt=_();if(!kt){e.previewStatus="idle";return}t.post("/api/anonymize-preview",kt).then(pt=>{Fe===pe&&(z(pt.data,kt),e.previewStatus="ready")}).catch(()=>{Fe===pe&&(e.previewStatus="error")})},200)};return be.cancel=()=>{pe++,x&&a.cancel(x),x=null},e.on("dispose",be.cancel),be}e.retryPreview=()=>{e.detectedType==="repo"&&G(),e.detectedType==="pr"&&Ne(),e.detectedType==="gist"&&Ee()};let G=Z("repo",()=>e.readme?{content:e.readme,options:Q()}:null,k=>{if(typeof k?.content!="string")throw Error("Invalid preview response");e.anonymize_readme=k.content;let _="";try{let x=parseGithubUrl(e.sourceUrl),pe=e.source.branch||e.details&&e.details.defaultBranch||"main";_=`https://github.com/${x.owner}/${x.repo}/raw/${pe}/`}catch{}let z=renderMD(e.anonymize_readme,_);e.html_readme=z,a(()=>{Prism.highlightAll(),typeof Cs=="function"&&document.querySelectorAll(".reviewer-preview .anonymize-preview-body").forEach(Cs)},150)});function me(){!e.anonymize||!e.anonymize.terms||G()}async function le(){let k=parseGithubUrl(e.sourceUrl),_=m();try{ct();let z=await t.get(`/api/pr/${k.owner}/${k.repo}/${k.pullRequestId}`,{params:{connection:e.githubConnection}});if(!b(_))return;e.details=z.data,e.pullRequestId||(e.pullRequestId=k.repo+"-PR"+k.pullRequestId+"-"+generateRandomId(4))}catch(z){if(!b(_))return;throw z.data&&(r("ERRORS."+z.data.error).then(x=>{e.addToast({title:"Error",date:new Date,body:x}),e.error=x},console.error),Qe(z.data.error)),J("sourceUrl","missing",!1),z}finally{w(_)}}let re=ot(new Map);function he(){let k=new Set,_=e.details&&e.details.pullRequest;if(!_)return k;typeof _.title=="string"&&k.add(_.title),typeof _.body=="string"&&k.add(_.body),typeof _.diff=="string"&&k.add(_.diff);let z=_.comments||[];for(let x of z)typeof x.author=="string"&&k.add(x.author),typeof x.body=="string"&&k.add(x.body);return k}let Ne=Z("pr",()=>{let k=he(),_=Array.from(k);return _.length===0?null:{contents:_,options:Q()}},(k,_)=>{if(!Array.isArray(k?.contents)||k.contents.length!==_.contents.length||k.contents.some(pe=>typeof pe!="string"))throw Error("Invalid preview response");let z=_.contents,x=new Map;for(let pe=0;pe<z.length&&pe<k.contents.length;pe++)x.set(z[pe],k.contents[pe]);re.clear(),x.forEach((pe,be)=>re.set(be,pe))});e.anonymizePrContent=function(k){return k&&(re.has(k)?re.get(k):"")};async function Me(){let k=parseGithubUrl(e.sourceUrl),_=m();try{ct(),e.gistOAuthRequired=!1,e.gistAppRequired=!1;let z=await t.get(`/api/gist/source/${k.gistId}`);if(!b(_))return;e.details=z.data,e.gistId||(e.gistId="gist-"+k.gistId.substring(0,6)+"-"+generateRandomId(4))}catch(z){if(!b(_))return;if(z.data?.error==="github_app_reconnect_required"){e.gistAppRequired=!0,J("sourceUrl","missing",!1);return}if(z.data?.error==="github_oauth_required"){e.gistOAuthRequired=!0,J("sourceUrl","missing",!1);return}throw z.data&&(r("ERRORS."+z.data.error).then(x=>{e.addToast({title:"Error",date:new Date,body:x}),e.error=x},console.error),Qe(z.data.error)),J("sourceUrl","missing",!1),z}finally{w(_)}}let Oe=ot(new Map);function ge(){let k=new Set,_=e.details&&e.details.gist;if(!_)return k;typeof _.description=="string"&&k.add(_.description),typeof _.ownerLogin=="string"&&k.add(_.ownerLogin);let z=_.files||[];for(let pe of z)typeof pe.filename=="string"&&k.add(pe.filename),typeof pe.content=="string"&&k.add(pe.content);let x=_.comments||[];for(let pe of x)typeof pe.author=="string"&&k.add(pe.author),typeof pe.body=="string"&&k.add(pe.body);return k}let Ee=Z("gist",()=>{let k=ge(),_=Array.from(k);return _.length===0?null:{contents:_,options:Q()}},(k,_)=>{if(!Array.isArray(k?.contents)||k.contents.length!==_.contents.length||k.contents.some(pe=>typeof pe!="string"))throw Error("Invalid preview response");let z=_.contents,x=new Map;for(let pe=0;pe<z.length&&pe<k.contents.length;pe++)x.set(z[pe],k.contents[pe]);Oe.clear(),x.forEach((pe,be)=>Oe.set(be,pe)),je()});e.anonymizeGistContent=function(k){return k&&(Oe.has(k)?Oe.get(k):"")},e.previewGistFiles=[];function je(){let k=e.details&&e.details.gist&&e.details.gist.files||[];e.previewGistFiles=k.map(_=>({filename:e.anonymizeGistContent(_.filename),content:e.anonymizeGistContent(_.content),language:_.language}))}e.watch("details.gist.files",je,!0),e.watch("terms",je);function Ye(){let k=e.conference;if(e.conference_data=null,!k)return;let _=k===g||e.isUpdate&&k===e._originalConference;k!==g&&(g=null),t.get("/api/conferences/"+k).then(z=>{e.conference===k&&(e.conference_data=z.data,e.conference_data.startDate=new Date(e.conference_data.startDate),e.conference_data.endDate=new Date(e.conference_data.endDate),!_&&(e.options.expirationDate=new Date(e.conference_data.en Line truncated
`).filter(be=>be),connection:e.githubConnection,fullName:`${z.owner}/${z.repo}`,repository:e.sourceUrl,reconnectRepositoryId:e.reconnectRepositoryId,options:e.options,source:e.source,conference:e.conference};e.details&&(x.options.pageSource=e.details.pageSource),ct();let pe=e.isUpdate?"/api/repo/"+e.repoId:"/api/repo/";t.post(pe,x,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/status/"+e.repoId},be=>{if(be.data){let Fe=["quota_exceeded","subscription_required_for_never_expiration"].includes(be.data.error);Fe||r("ERRORS."+be.data.error).then(kt=>{e.error=kt},console.error),Qe(be.data.error),Fe&&(be.data.error==="subscription_required_for_never_expiration"&&(e._existingNever=!1),e.hostingQuotaBlocked=!0,e.hostingReview=!0,xe(()=>document.getElementById("repository-hosting")?.scrollIntoView({block:"center"})))}}).finally(()=>{_.disabled=!1})},e.anonymizeGist=k=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(wt())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=k.currentTarget||k.target.closest?.("button")||k.target;_.disabled=!0;let z=parseGithubUrl(e.sourceUrl),x={gistId:e.gistId,terms:e.terms.trim().split(`
`).filter(be=>be),source:{gistId:z.gistId},options:e.options,conference:e.conference};ct();let pe=e.isUpdate?"/api/gist/"+e.gistId:"/api/gist/";t.post(pe,x,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/gist/"+e.gistId},be=>{be.data&&(r("ERRORS."+be.data.error).then(Fe=>{e.error=Fe},console.error),Qe(be.data.error))}).finally(()=>{_.disabled=!1})},e.anonymizePullRequest=k=>{if(e.sourceLoading){e.error="Wait for the source to finish loading before saving.";return}if(wt())return;if(e.anonymize?.invalid||e.sourceUrlError){e.error="Please correct the highlighted fields before saving.";return}let _=k.currentTarget||k.target.closest?.("button")||k.target;_.disabled=!0;let z=parseGithubUrl(e.sourceUrl),x={pullRequestId:e.pullRequestId,connection:e.githubConnection,terms:e.terms.trim().split(`
`).filter(be=>be),source:{repositoryFullName:`${z.owner}/${z.repo}`,pullRequestId:z.pullRequestId},options:e.options,conference:e.conference};ct();let pe=e.isUpdate?"/api/pr/"+e.pullRequestId:"/api/pr/";t.post(pe,x,{headers:{"Content-Type":"application/json"}}).then(()=>{R.clear(),window.location.href="/pr/"+e.pullRequestId},be=>{be.data&&(r("ERRORS."+be.data.error).then(Fe=>{e.error=Fe},console.error),Qe(be.data.error))}).finally(()=>{_.disabled=!1})},e.watch("conference",()=>{Ye()}),e.termHints=[],e.matchTermAsWritten=k=>{e.terms=fc(e.terms,k)},e.watch("options.preserveFiles",()=>{e.detectedType==="repo"&&G()}),e.watch("terms",()=>{e.termHints=pc(e.terms),e.detectedType==="repo"&&me(),e.detectedType==="pr"&&Ne(),e.detectedType==="gist"&&Ee()}),e.watch("options.image",()=>{e.detectedType==="repo"&&me(),e.detectedType==="pr"&&Ne(),e.detectedType==="gist"&&Ee()}),e.watch("options.link",()=>{e.detectedType==="repo"&&me(),e.detectedType==="pr"&&Ne(),e.detectedType==="gist"&&Ee()}),e.watch("details",()=>{e.detectedType==="pr"&&Ne(),e.detectedType==="gist"&&Ee()},!0)},Da=function(e,t,o,i,s,r){let a=Tt();mc();let u=Qt();e.on("dark-mode",(I,U)=>{e.aceOption&&(U?e.aceOption.theme="nord_dark":e.aceOption.theme="chrome")});let p=0,y=null,h=null;e.fileLoadingSlow=!1,e.fileReceivedBytes=0;function b(){y&&(y.resolve(),y=null),h&&(a.timeout.cancel(h),h=null)}let m=!1;e.on("dispose",()=>{m=!0,p++,b(),w&&w.resolve()}),e.files=[],e.isMac=/Mac|iPhone|iPad|iPod/.test(navigator.platform||navigator.userAgent),e.fileSearchQuery="",e.fileSearchResults=null,e.fileSearchLoading=!1,u(document,"click",I=>{e.symbolsOpen&&!I.target.closest?.(".symbols")&&(e.symbolsOpen=!1),e.moreOpen&&!I.target.closest?.(".tb-more")&&(e.moreOpen=!1),e.tocOpen&&!I.target.closest?.(".tb-toc-m")&&(e.tocOpen=!1),e.gotoOpen&&I.target.isConnected&&!I.target.closest?.(".goto-pop, .btn-goto, .tb-more")&&(e.gotoOpen=!1),e.accountOpen&&!I.target.closest?.(".acct")&&(e.accountOpen=!1),e.helpOpen&&!I.target.closest?.(".vb-help")&&(e.helpOpen=!1)}),u(document,"keydown",I=>{I.key==="Escape"&&(e.symbolsOpen=!1,e.moreOpen=!1,e.tocOpen=!1,e.gotoOpen=!1,e.accountOpen=!1,e.helpOpen=!1),(I.ctrlKey||I.metaKey)&&!I.altKey&&I.key&&I.key.toLowerCase()==="f"&&e.type==="html"&&window.document.querySelector(".reading-layout")&&(I.preventDefault(),e.toggleMdFind(!0))}),u(document,"keydown",function(I){if((I.metaKey||I.ctrlKey)&&I.key==="k"){I.preventDefault();var U=document.querySelector(".tree-search-input");U&&(U.focus(),U.select())}});var w=null;e.onFileSearchChange=function(){w&&(w.resolve(),w=null);let I=e.fileSearchQuery;if(!I||I.length<2){e.fileSearchResults=null,e.fileSearchLoading=!1;return}e.fileSearchLoading=!0;let U=r.defer();w=U,t.get(`/api/repo/${e.repoId}/files/search?q=${encodeURIComponent(I)}`,{timeout:U.promise}).then(function(F){if(!(m||w!==U)){w=null,e.fileSearchLoading=!1;var W={};e.files.forEach(function(he){W[(he.path||"")+"/"+he.name]=!0});for(var E=[],N={},P=0;P<F.data.length;P++){var H=F.data[P];if(H.path)for(var B=H.path.split("/"),K="",se=0;se<B.length;se++){var Q=K;K=K?K+"/"+B[se]:B[se];var Z=Q+"/"+B[se];!W[Z]&&!N[Z]&&(N[Z]=!0,E.push({name:B[se],path:Q}))}}E.sort(function(he,Ne){return(he.path||"").split("/").length-(Ne.path||"").split("/").length}),E.length>0&&e.files.push.apply(e.files,E);for(var G=[],me=0;me<F.data.length;me++){var le=F.data[me],re=(le.path||"")+"/"+le.name;!W[re]&&le.size!=null&&(G.push(le),W[re]=!0)}G.length>0&&e.files.push.apply(e.files,G),e.fileSearchResults=F.data}},function(){!m&&w===U&&(w=null,e.fileSearchLoading=!1,e.fileSearchResults=[])})};let A={yml:"yaml",txt:"text",py:"python",js:"javascript",ts:"typescript"},S=["license","txt"],R=["png","jpg","jpeg","gif","svg","ico","bmp","tiff","tif","webp","avif","heif","heic"],g=["wav","mp3","ogg","wma","flac","aac","m4a"],C=["mp4","avi","webm","mov","mpg","mpeg","mkv","flv","wmv","3gp","3g2","m4v","f4v","f4p","f4a","f4b"];e.on("routeUpdate",function(I,U){if(e.repoId!=i.repoId)return fe();if((i.path||"")!=e.filePath){window.matchMedia?.("(max-width: 767px)").matches&&(e.sidebarCollapsed=!0),e.filePath=i.path||"",e.paths=e.filePath.split("/").filter(F=>F&&F.trim().length>0),dt();for(let F=0;F<e.paths.length-1;F++){let W=F>0?e.paths.slice(0,F).join("/"):"";e.files.some(N=>N.path===W)||e.getFiles(W)}}});function M(){if(e.paths[0]!="")return;let I=["readme.md","readme.txt","readme.org","readme.1st","readme"],U={};for(let W of e.files)W.name.toLowerCase().indexOf("readme")>-1&&(U[W.name.toLowerCase()]=W.name);let F=null;for(let W of I)if(U[W]){F=W;break}if(!F&&Object.keys(U).length>0&&(F=Object.keys(U)[0]),F){let W=o.url();W[W.length-1]!="/"&&(W+="/"),o.url(W+encodePathForUrl(U[F]))}}e.fileCounts=null;let V=0,q=new Set,j=!1;e.getFiles=function(I,U=!1){let F=e.repoId,W=V;return t.get(`/api/repo/${e.repoId}/files/?path=${encodeURIComponent(I)}&v=${e.options.lastUpdateDate}`).then(function(E){if(m||F!==e.repoId||W!==V)return[];let N=I||"";return e.files=e.files.filter(P=>P.path!==N),e.fi Line truncated
`).forEach((U,F)=>{for(let[W,E]of Pe){let N=W.exec(U);if(N&&!/^(if|for|while|switch|return|catch)$/.test(N[1])){I.push({name:N[1],kind:E,line:F+1});break}}}),we={content:e.content,list:I.slice(0,300)},we.list},e.goToSymbol=function(I){e.symbolsOpen=!1;let U=e.codeEditor;U&&(U.scrollToLine(I-1,!0,!0,()=>{}),U.gotoLine(I,0,!0),window.history.replaceState(null,"",window.location.pathname+window.location.search+"#L"+I),window.dispatchEvent(new HashChangeEvent("hashchange")))},e.gotoLine=function(){e.codeEditor&&(e.moreOpen=!1,e.gotoError="",e.gotoValue=String(e.codeEditor.getCursorPosition().row+1),e.gotoOpen=!0,setTimeout(()=>{let I=window.document.getElementById("goto-input");I&&(I.focus(),I.select())},0))},e.closeGoto=function(){e.gotoOpen=!1,e.gotoError="",e.codeEditor?.focus()},e.submitGoto=function(){let I=e.codeEditor;if(!I)return;let U=/^\s*:?\s*(\d+)\s*(?:[:,]\s*(\d+))?\s*$/.exec(e.gotoValue||""),F=I.session.getLength();if(!U||+U[1]<1||+U[1]>F){e.gotoError="Enter a line from 1 to "+F;return}I.gotoLine(+U[1],U[2]?Math.max(0,+U[2]-1):0,!0),e.gotoOpen=!1,e.gotoError="",I.focus()},e.rootEntries=function(){return[...e.files||[]].sort((I,U)=>{let F=I.size==null,W=U.size==null;return F!==W?F?-1:1:I.name.localeCompare(U.name)})},e.formatSize=function(I){if(I==null)return"";if(I<1024)return I+" B";let U=I/1024,F=W=>W.toFixed(1).replace(/\.0$/,"");return U<1024?F(U)+" KB":U<1024*1024?F(U/1024)+" MB":F(U/1024/1024)+" GB"},e.fileSize=function(I){if(!I)return null;let U=I.replace(/^\/+/,""),F=(e.files||[]).find(W=>(W.path?W.path+"/":"")+W.name===U);return F&&F.size!=null?F.size:null},e.revealFolder=function(I){e.sidebarHidden=!1,e.sidebarCollapsed=!1,xe(()=>{let U=window.document.querySelector('.files a[data-path="/'+(window.CSS?.escape?window.CSS.escape(I):I)+'"]');U&&(U.closest("li")?.classList.contains("open")||U.click(),U.scrollIntoView({block:"nearest"}),U.focus())})};let J={content:null,n:0},ce=I=>{if(J.content===I)return J.n;let U=I;if(typeof U=="string")try{U=JSON.parse(U)}catch{U=null}let F=[],W=N=>{Array.isArray(N)?F.push(N.join("")):typeof N=="string"&&F.push(N)};(U&&(U.cells||(U.worksheets||[]).flatMap(N=>N.cells||[]))||[]).forEach(N=>{W(N?.source??N?.input),(N?.outputs||[]).forEach(P=>{W(P?.text),P?.data&&(W(P.data["text/plain"]),W(P.data["text/markdown"]),W(P.data["text/html"])),W(P?.traceback)})});let E=F.reduce((N,P)=>N+(P.match(fo)||[]).length,0);return J={content:I,n:E},E};e.redactionCount=function(){return e.type==="IPython"?ce(e.content):typeof e.content!="string"?0:((e.type==="html"?e.content.replace(/<[^>]*>/g," "):e.content).match(fo)||[]).length},e.renderRedacted=_i;let ke=I=>I.toLowerCase().trim().replace(/[^a-z0-9\s-]/g,"").replace(/\s+/g,"-").slice(0,60)||"section";e.renderReadme=function(I){let U=e.renderRedacted(I);if(!U||typeof window.DOMParser!="function")return U;let F=new window.DOMParser().parseFromString("<div>"+U+"</div>","text/html"),W={};return F.querySelectorAll("h1, h2, h3").forEach(E=>{let N=E.id||ke(E.textContent);W[N]?N+="-"+ ++W[N]:W[N]=1,E.id=N}),F.body.firstChild.innerHTML};let De={content:null,list:[]};e.readmeToc=function(){if(e.type!=="html"||typeof e.content!="string")return[];if(De.content===e.content)return De.list;let U=[...new window.DOMParser().parseFromString("<div>"+e.renderReadme(e.sanitize?e.sanitize(e.content):e.content)+"</div>","text/html").querySelectorAll("h2, h3")].map(F=>({id:F.id,text:F.textContent.trim(),level:F.tagName==="H3"?3:2})).slice(0,40);return De={content:e.content,list:U},U},e.activeHeading=null,u(window,"scroll",()=>{let I=e.readmeToc?e.readmeToc():[];if(!I.length)return;let U=150,F="",W="";for(let E of I){let N=window.document.getElementById(E.id);if(!N)continue;let P=N.getBoundingClientRect().top;P<U?F=E.id:!W&&P<window.innerHeight-80&&(W=E.id)}W&&(F=W),e.activeHeading!==F&&(e.activeHeading=F)},{capture:!0,passive:!0}),e.scrollToHeading=function(I){if(!I){(window.document.querySelector(".explorer-content, .file-card-body, .main-pane")||window).scrollTo({top:0,behavior:"smooth"}),e.activeHeading="";return}let U=window.document.getElementById(I);U&&U.scrollIntoView({behavior:"smooth",block:"start"}),e.activeHeading=I},e.csvView="table";let et={content:null,rows:[]},st=(I,U)=>{let F=[],W=[],E="",N=!1;for(let P=0;P<I.length;P++){let H=I[P];N?H==='"'?I[P+1]==='"'?(E+='"',P++):N=!1:E+=H:H==='"'&&E===""?N=!0:H===U?(W.push(E),E=""):H===`
`||H==="\r"?(H==="\r"&&I[P+1]===`
`&&P++,W.push(E),F.push(W),W=[],E=""):E+=H}return(E!==""||W.length)&&(W.push(E),F.push(W)),F.filter(P=>P.length>1||P[0]!=="")};e.isCsv=()=>typeof e.content=="string"&&e.type!=="html"&&/\.(csv|tsv)$/i.test(e.filePath||"")&&e.content.length<=1024*1024,e.csvRows=()=>{if(et.content!==e.content){let I=/\.tsv$/i.test(e.filePath||"")?" ":",";et={content:e.content,rows:st(e.content,I)}}return et.rows},e.csvNumCol=I=>{let U=e.csvRows().slice(1).map(F=>F[I]).filter(F=>F!=null&&String(F).trim()!=="");return U.length>0&&U.every(F=>e.csvNumeric(F))},e.csvNumeric=I=>/^\s*[-+]?(\d[\d,]*)?(\.\d+)?(e[-+]?\d+)?%?\s*$/i.test(I)&&/\d/.test(I),e.redactParts=function(I){let U=[],F=0,W,E=/\bXXXX-(\d+)\b/g;for(I=String(I||"");W=E.exec(I);)W.index>F&&U.push({t:I.slice(F,W.index)}),U.push({n:W[1]}),F=W.index+W[0].length;return F<I.length&&U.push({t:I.slice(F)}),U},e.pathCopied=!1,e.copyPath=async function(){window.navigator.clipboard?.writeText&&(await window.navigator.clipboard.writeText(e.filePath||""),e.pathCopied=!0,setTimeout(()=>{e.pathCopied=!1},1600))},e.contentCopied=!1,e.copyContent=async function(){if(typeof e.content!="string"||!window.navigator.clipboard?.writeText)return;let I=e.content;if(e.type==="html"&&e.url)try{I=await(await window.fetch(e.url,{credentials:"same-origin"})).text()}catch{return}await window.navigator.clipboard.writeText(I),e.contentCopied=!0,setTimeout(()=>{e.contentCopied=!1},1600)};function tt(I){return A[I]?A[I]:I}function He(I){return I=="pdf"?"pdf":I=="html"||I=="htm"?"html-doc":I=="md"?"md":I=="org"?"org":I=="ipynb"?"IPython":S.indexOf(I)>-1?"text":R.indexOf(I)>-1?"image":C.indexOf(I)>-1?"media":g.indexOf(I)>-1?"audio":"code"}function bt(I,U){let F=p;if(!I){e.type="error",e.content="no_file_selected";return}let W=e.type;(W==="code"||W==="text")&&Us().catch(()=>{}),e.type="loading",e.content="loading",e.fileLoadingSlow=!1,e.fileReceivedBytes=0;let E=r.defer();y=E,h=a.timeout(()=>{!m&&F===p&&e.type==="loading"&&(e.fileLoadingSlow=!0)},1500);let N=U&&U.sha||"0";t.get(`/api/repo/${e.repoId}/file/${encodePathForUrl(I)}?v=`+N,{timeout:E.promise,onDownloadProgress:P=>{!m&&F===p&&(e.fileReceivedBytes=P)},transformResponse:P=>P}).then(P=>{if(!(m||F!==p)){if(b(),e.type=W,e.content=P.data,e.content==""&&(e.content=null),e.type=="md"&&(e.content=renderMD(P.data,o.url()+"/../"),e.type="html"),e.type=="org"){let B=contentAbs2Relative(P.data);var H=new Org.Parser().parse(B).convert(Org.ConverterHTML,{headerOffset:1,exportFromLineNumber:!1,suppressSubScriptHandling:!0,suppressAutoLink:!1});e.content=DOMPurify.sanitize(H.toString()),e.type="html"}e.type=="code"&&P.headers("content-type")=="application/octet-stream"&&(e.type="binary",e.content="binary"),a.timeout(()=>{Prism.highlightAll()},50)}},P=>{m||F!==p||(b(),e.type="error",e.content=Na(P))})}function dt(){p++,b(),e.content="",e.file=Y();let I="0";e.file&&e.file.sha&&(I=e.file.sha),e.url=`/api/repo/${e.repoId}/file/${encodePathForUrl(e.filePath)}?v=${I}`;let U=e.filePath.substring(0,e.filePath.lastIndexOf("/")+1);e.fileBaseUrl=`/api/repo/${e.repoId}/file/${U?encodePathForUrl(U):""}`,e.showSource=!1,e.imageSize="",e.allowScripts=!1;let F=e.filePath.toLowerCase(),W=F.lastIndexOf(".");W>-1&&(F=F.substring(W+1));let E={javascript:"JavaScript",typescript:"TypeScript",tsx:"TSX",jsx:"JSX",python:"Python",java:"Java",c_cpp:"C/C++",csharp:"C#",golang:"Go",rust:"Rust",ruby:"Ruby",php:"PHP",html:"HTML",css:"CSS",scss:"SCSS",json:"JSON",yaml:"YAML",markdown:"Markdown",sh:"Shell",dockerfile:"Dockerfile",xml:"XML",sql:"SQL",kotlin:"Kotlin",swift:"Swift",scala:"Scala",r:"R",julia:"Julia",latex:"LaTeX",toml:"TOML",csv:"CSV",tsv:"TSV",text:""},N=tt(F);if(e.languageName=E[N]??(N?N.charAt(0).toUpperCase()+N.slice(1):""),e.aceOption={readOnly:!0,useWrapMode:!0,showGutter:!0,theme:"chrome",useSoftTab:!0,tabSize:2,fontSize:window.matchMedia?.("(max-width: 767px)").matches?12:13,keyBinding:"vscode",fullLineSelection:!0,highlightActiveLine:!1,highlightGutterLine:!1,cursor:"hide",showInvisibles:!1,showIndentGuides:!1,showPrintMargin:!1,highlightSelectedWord:!1,enableBehaviours:!0,fadeFoldWidgets:!1,mode:tt(F),onLoad:function(P){e.codeEditor=Co(P);{let re=P.session,he=re.getTokens.bind(re),Ne=/\bXXXX-\d+\b/g;if(re.getTokens=function(Me){let Oe=he(Me);if(!Oe.some(Ee=>Ee.value.indexOf("XXXX-")!==-1))return Oe;let ge=[];for(let Ee of Oe){if(Ee.value.indexOf("XXXX-")===-1){ge.push(Ee);continue}let je=0;Ne.lastIndex=0;let Ye;for(;Ye=Ne.exec(Ee.value);)Ye.index>je&&ge.push({type:Ee.type,value:Ee.value.slice(je,Ye.index)}),ge.push({type:"redacted.n"+Ye[0].slice(5),value:Ye[0]}),je=Ye.index+Ye[0].length;je<Ee.value.length&&ge.push({type:Ee.type,value:Ee.value.slice(je)})}return ge},!window.document.getElementById("redact-index-rules")){let Me=window.document.createElement("style");Me.id="redact-index-rules",Me.textContent=Array.from({length:99},(Oe,ge)=>`.ace_redacted.ace_n${ge+1}::after{content:"${ge+1}"}`).join(""),window.document.head.appendChild(Me)}P.renderer.updateFull(!0)}P.session Line truncated
`).length+1)),placeholder:`Jane Smith
MIT CSAIL
jane.smith@example.org`},null,10,QT),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),t[115]||(t[115]=n("small",{class:"form-text text-muted"},"One term per line.",-1)),n("details",ZT,[t[110]||(t[110]=n("summary",null,"Regex & replacement syntax",-1)),t[111]||(t[111]=g()),n("small",xT,[t[104]||(t[104]=g("Regex is supported. Replaced by ",-1)),n("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[105]||(t[105]=g(", or use ",-1)),t[106]||(t[106]=n("code",null,"term=>replacement",-1)),t[107]||(t[107]=g(" to pick your own (e.g. ",-1)),t[108]||(t[108]=n("code",null,"Anonymous=>ABC",-1)),t[109]||(t[109]=g(").",-1))])]),(l(!0),d(L,null,ie((e.termHints||[]).slice(0,3),a=>(l(),d("div",{class:"term-hint",key:a.line},[n("span",null,[t[112]||(t[112]=g("In ",-1)),n("code",null,c(a.term),1),t[113]||(t[113]=g(", ",-1)),n("code",null,c(a.symbols.join(" ")),1),g(" "+c(a.symbols.length>1?"are regex symbols":"is a regex symbol")+", so it may not match the text as written.",1)]),n("button",{type:"button",class:"btn btn-outline-ink btn-sm",onClick:u=>e.matchTermAsWritten(a.line)},"Match as written",8,e3)]))),128)),(e.termHints||[]).length>3?(l(),d("div",t3,c(e.termHints.length-3)+" more "+c(e.termHints.length-3===1?"term uses":"terms use")+" regex symbols.",1)):f("v-if",!0),P(n("div",n3,"Terms are in an invalid format.",512),[[ee,e.anonymize?.terms?.errors?.format]])]),P(n("div",o3,[n("div",s3,[t[116]||(t[116]=n("span",{class:"paper-field-label",id:"preserve-files-label"},"Unredacted files",-1)),n("span",i3,c(e.preserveSummary()),1)]),n("button",{type:"button",class:"btn btn-outline-ink btn-sm","aria-describedby":"preserve-files-label",disabled:!e.source?.commit,onClick:t[21]||(t[21]=a=>e.openPreserveFiles())},c((e.options?.preserveFiles||[]).length?"Edit":"Choose files"),9,r3)],512),[[ee,e.detectedType==="repo"]]),e.preserve?.open?(l(),d("dialog",{key:0,id:"preserve-files-dialog",class:"preserve-dialog","aria-labelledby":"preserve-files-title",onCancel:t[26]||(t[26]=ce(a=>e.closePreserveFiles(),["prevent"]))},[n("form",{onSubmit:t[25]||(t[25]=ce(a=>e.savePreserveFiles(),["prevent"]))},[t[120]||(t[120]=n("h2",{id:"preserve-files-title"},"Leave files unredacted",-1)),t[121]||(t[121]=n("p",{class:"preserve-intro"},"Checked files are shown exactly as written, for example a bibliography where redacted self-citations would reveal you. File names are still redacted.",-1)),P(n("input",{type:"search",id:"preserve-files-search",class:"form-control",placeholder:"Search files","aria-label":"Search files",autocomplete:"off","onUpdate:modelValue":t[22]||(t[22]=a=>e.preserve.search=a)},null,512),[[dt,e.preserve.search]]),n("div",a3,[e.preserve.loading?(l(),d("p",l3,"Loading files from GitHub\u2026")):e.preserve.error?(l(),d("p",d3,c(e.preserve.error),1)):(l(),d(L,{key:2},[(l(!0),d(L,null,ie(e.preserveRows(),(a,u)=>(l(),d("div",{class:"preserve-item",key:a.kind+":"+a.path,style:$e({paddingLeft:a.depth*18+6+"px"})},[a.kind==="dir"?(l(),d("button",{key:0,type:"button",class:"preserve-caret","aria-expanded":a.open?"true":"false","aria-label":(a.open?"Collapse ":"Expand ")+a.label,onClick:p=>e.togglePreserveDir(a.path)},c(a.open?"\u25BE":"\u25B8"),9,u3)):(l(),d("span",c3)),n("input",{type:"checkbox",id:"pf-"+u,"aria-label":a.kind==="dir"?"Leave folder "+a.path+" unredacted":null,checked:a.state==="all",".indeterminate":a.state==="some",disabled:a.locked,onChange:p=>a.kind==="dir"?e.togglePreserveFolder(a.path):e.togglePreserveFile(a.path)},null,40,p3),n("label",{for:a.kind==="file"?"pf-"+u:null,class:"preserve-name",onClick:p=>a.kind==="dir"&&e.togglePreserveDir(a.path)},c(a.label),9,f3),a.note?(l(),d("span",h3,c(a.note),1)):f("v-if",!0)],4))),128)),!e.preserve.loading&&!e.preserveRows().length?(l(),d("p",m3,c(e.preserve.search?"No file matches your search.":"No text files in this commit."),1)):f("v-if",!0)],64))]),e.preserve.truncated?(l(),d("p",g3,"This repository has too many files to list them all. Use a pattern for files you cannot find.")):f("v-if",!0),n("details",{class:"preserve-patterns",open:e.preserve.patternsOpen},[t[117]||(t[117]=n("summary",null,"Patterns",-1)),P(n("textarea",{class:"form-control",rows:"3","aria-label":"Patterns",placeholder:`*.bib
paper/appendix/**`,"onUpdate:modelValue":t[23]||(t[23]=a=>e.preserve.patterns=a)},null,512),[[dt,e.preserve.patterns]]),t[118]||(t[118]=n("small",{class:"form-text text-muted"},[g("One per line, as in .gitignore: "),n("code",null,"*.bib"),g(" matches in any folder; "),n("code",null,"/refs.bib"),g(" and "),n("code",null,"paper/refs.bib"),g(" match from the repository root; a folder name such as "),n("code",null,"drafts/"),g(" covers everything inside it; "),n("code",null,"!private.bib"),g(" excludes again.")],-1))],8,v3),n("div",y3,[n("span",b3,c(e.preserve.loading||e.preserve.error?"":e.preserveCount()+(e.preserveCount()===1?" file":" files")+" will be shown as written"),1),n("span",w3,[n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[24]||(t[24]=a=>e.closePreserveFiles())},"Cancel"),t[119]||(t[119]=n("button",{type:"submit",class:"btn btn-ink"},"Save",-1))])])],32)],32)):f("v-if",!0)],512),[[ee,e.detectedType]]),P(n("section",k3,[t[142]||(t[142]=n("h2",{class:"paper-section-eyebrow"},"Display",-1)),P(n("div",null,[n("div",C3,[P(n("input",E3,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[123]||(t[123]=n("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),n("div",S3,[P(n("input",N3,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[124]||(t[124]=n("label",{class:"form-check-label",for:"image"},"Display images",-1))]),n("div",R3,[P(n("input",D3,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[125]||(t[125]=n("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1))]),n("div",A3,[P(n("input",T3,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[126]||(t[126]=n("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1))]),n("div",P3,[P(n("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,O3),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[127]||(t[127]=n("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?f("v-if",!0):(l(),d("small",I3,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",_3,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):f("v-if",!0)])],512),[[ee,e.detectedType==="repo"]]),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",M3,[...t[128]||(t[128]=[g("Images and PDFs are served unchanged. Review their contents and metadata before sharing. ",-1),n("a",{href:"/faq#formats"},"Supported formats",-1)])])):f("v-if",!0),P(n("div",null,[n("div",V3,[P(n("input",q3,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[129]||(t[129]=n("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),n("div",$3,[P(n("input",L3,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[130]||(t[130]=n("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),n("div",U3,[P(n("input",F3,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[131]||(t[131]=n("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),n("div",B3,[P(n("input",z3,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[132]||(t[132]=n("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),n("div",H3,[P(n("input",j3,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[133]||(t[133]=n("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),n("div",G3,[P(n("input",W3,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[134]||(t[134]=n("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[ee,e.detectedType==="gist"]]),P(n("div",null,[n("div",K3,[P(n("input",Y3,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[135]||(t[135]=n("label",{class:"form-check-label",for:"title"},"PR title",-1))]),n("div",X3,[P(n("input",J3,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[136]||(t[136]=n("label",{class:"form-check-label",for:"body"},"PR body",-1))]),n("div",Q3,[P(n( Line truncated
anonymous_github`)])])])])]),f(" Limitations "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-warning"})]),g("Limitations ")]),n("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),n("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[n("div",{class:"panel-body p-3"},[n("ul",null,[n("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),n("li",null," Files larger than 8 MB are not supported. "),n("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),n("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),f(" Privacy and security "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-shield"})]),g("Privacy and security ")]),n("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),n("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[n("div",{class:"panel-body p-3"},[n("p",null," Repository data is used to provide the anonymization service. If you purchase a plan, Stripe processes payment and billing information. When a repository is removed or expires, only its configuration is retained. This makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),n("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[n("div",{class:"panel-body p-3"},[n("p",null,[g("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),n("a",{href:"/connections"},"GitHub connections"),g(" page.")]),n("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),n("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),n("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[n("div",{class:"panel-body p-3"},[n("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),f(" Self-hosting "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#project-icon-storage"})]),g("Self"),n("span",{class:"serif-hy"},"-"),g("hosting ")]),n("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),n("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[n("div",{cla Line truncated
jane.smith@example.org`},null,10,oP),[[s,{state:e.viewState,set:a=>{e.terms=a},value:e.terms,form:"anonymize",options:{debounce:250}}]]),t[119]||(t[119]=n("small",{class:"form-text text-muted"},"One term per line.",-1)),n("details",sP,[t[114]||(t[114]=n("summary",null,"Regex & replacement syntax",-1)),t[115]||(t[115]=v()),n("small",iP,[t[108]||(t[108]=v("Regex is supported. Replaced by ",-1)),n("code",null,c(e.site_options?.ANONYMIZATION_MASK)+"-[N]",1),t[109]||(t[109]=v(", or use ",-1)),t[110]||(t[110]=n("code",null,"term=>replacement",-1)),t[111]||(t[111]=v(" to pick your own (e.g. ",-1)),t[112]||(t[112]=n("code",null,"Anonymous=>ABC",-1)),t[113]||(t[113]=v(").",-1))])]),(l(!0),d(L,null,ie((e.termHints||[]).slice(0,3),a=>(l(),d("div",{class:"term-hint",key:a.line},[n("span",null,[t[116]||(t[116]=v("In ",-1)),n("code",null,c(a.term),1),t[117]||(t[117]=v(", ",-1)),n("code",null,c(a.symbols.join(" ")),1),v(" "+c(a.symbols.length>1?"are regex symbols":"is a regex symbol")+", so it may not match the text as written.",1)]),n("button",{type:"button",class:"btn btn-outline-ink btn-sm",onClick:u=>e.matchTermAsWritten(a.line)},"Match as written",8,rP)]))),128)),(e.termHints||[]).length>3?(l(),d("div",aP,c(e.termHints.length-3)+" more "+c(e.termHints.length-3===1?"term uses":"terms use")+" regex symbols.",1)):f("v-if",!0),O(n("div",lP,"Terms are in an invalid format.",512),[[ee,e.anonymize?.terms?.errors?.format]])]),O(n("div",dP,[n("div",uP,[t[120]||(t[120]=n("span",{class:"paper-field-label",id:"preserve-files-label"},"Unredacted files",-1)),n("span",cP,c(e.preserveSummary()),1)]),n("button",{type:"button",class:"btn btn-outline-ink btn-sm","aria-describedby":"preserve-files-label",disabled:!e.source?.commit,onClick:t[22]||(t[22]=a=>e.openPreserveFiles())},c((e.options?.preserveFiles||[]).length?"Edit":"Choose files"),9,pP)],512),[[ee,e.detectedType==="repo"]]),e.preserve?.open?(l(),d("dialog",{key:0,id:"preserve-files-dialog",class:"preserve-dialog","aria-labelledby":"preserve-files-title",onCancel:t[27]||(t[27]=de(a=>e.closePreserveFiles(),["prevent"]))},[n("form",{onSubmit:t[26]||(t[26]=de(a=>e.savePreserveFiles(),["prevent"]))},[t[124]||(t[124]=n("h2",{id:"preserve-files-title"},"Leave files unredacted",-1)),t[125]||(t[125]=n("p",{class:"preserve-intro"},"Checked files are shown exactly as written, for example a bibliography where redacted self-citations would reveal you. File names are still redacted.",-1)),O(n("input",{type:"search",id:"preserve-files-search",class:"form-control",placeholder:"Search files","aria-label":"Search files",autocomplete:"off","onUpdate:modelValue":t[23]||(t[23]=a=>e.preserve.search=a)},null,512),[[lt,e.preserve.search]]),n("div",fP,[e.preserve.loading?(l(),d("p",hP,"Loading files from GitHub\u2026")):e.preserve.error?(l(),d("p",mP,c(e.preserve.error),1)):(l(),d(L,{key:2},[(l(!0),d(L,null,ie(e.preserveRows(),(a,u)=>(l(),d("div",{class:"preserve-item",key:a.kind+":"+a.path,style:Ve({paddingLeft:a.depth*18+6+"px"})},[a.kind==="dir"?(l(),d("button",{key:0,type:"button",class:"preserve-caret","aria-expanded":a.open?"true":"false","aria-label":(a.open?"Collapse ":"Expand ")+a.label,onClick:p=>e.togglePreserveDir(a.path)},c(a.open?"\u25BE":"\u25B8"),9,gP)):(l(),d("span",vP)),n("input",{type:"checkbox",id:"pf-"+u,"aria-label":a.kind==="dir"?"Leave folder "+a.path+" unredacted":null,checked:a.state==="all",".indeterminate":a.state==="some",disabled:a.locked,onChange:p=>a.kind==="dir"?e.togglePreserveFolder(a.path):e.togglePreserveFile(a.path)},null,40,yP),n("label",{for:a.kind==="file"?"pf-"+u:null,class:"preserve-name",onClick:p=>a.kind==="dir"&&e.togglePreserveDir(a.path)},c(a.label),9,bP),a.note?(l(),d("span",wP,c(a.note),1)):f("v-if",!0)],4))),128)),!e.preserve.loading&&!e.preserveRows().length?(l(),d("p",kP,c(e.preserve.search?"No file matches your search.":"No text files in this commit."),1)):f("v-if",!0)],64))]),e.preserve.truncated?(l(),d("p",CP,"This repository has too many files to list them all. Use a pattern for files you cannot find.")):f("v-if",!0),n("details",{class:"preserve-patterns",open:e.preserve.patternsOpen},[t[121]||(t[121]=n("summary",null,"Patterns",-1)),O(n("textarea",{class:"form-control",rows:"3","aria-label":"Patterns",placeholder:`*.bib
paper/appendix/**`,"onUpdate:modelValue":t[24]||(t[24]=a=>e.preserve.patterns=a)},null,512),[[lt,e.preserve.patterns]]),t[122]||(t[122]=n("small",{class:"form-text text-muted"},[v("One per line, as in .gitignore: "),n("code",null,"*.bib"),v(" matches in any folder; "),n("code",null,"/refs.bib"),v(" and "),n("code",null,"paper/refs.bib"),v(" match from the repository root; a folder name such as "),n("code",null,"drafts/"),v(" covers everything inside it; "),n("code",null,"!private.bib"),v(" excludes again.")],-1))],8,EP),n("div",SP,[n("span",NP,c(e.preserve.loading||e.preserve.error?"":e.preserveCount()+(e.preserveCount()===1?" file":" files")+" will be shown as written"),1),n("span",RP,[n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[25]||(t[25]=a=>e.closePreserveFiles())},"Cancel"),t[123]||(t[123]=n("button",{type:"submit",class:"btn btn-ink"},"Save",-1))])])],32)],32)):f("v-if",!0)],512),[[ee,e.detectedType]]),O(n("section",DP,[t[146]||(t[146]=n("h2",{class:"paper-section-eyebrow"},"Display",-1)),O(n("div",null,[n("div",AP,[O(n("input",TP,null,512),[[s,{state:e.viewState,set:a=>{e.options.link=a},value:e.options?.link,form:"anonymize",options:{}}]]),t[127]||(t[127]=n("label",{class:"form-check-label",for:"link"},"Keep links",-1))]),n("div",PP,[O(n("input",OP,null,512),[[s,{state:e.viewState,set:a=>{e.options.image=a},value:e.options?.image,form:"anonymize",options:{}}]]),t[128]||(t[128]=n("label",{class:"form-check-label",for:"image"},"Display images",-1))]),n("div",IP,[O(n("input",MP,null,512),[[s,{state:e.viewState,set:a=>{e.options.pdf=a},value:e.options?.pdf,form:"anonymize",options:{}}]]),t[129]||(t[129]=n("label",{class:"form-check-label",for:"pdf"},"Display PDFs",-1))]),n("div",_P,[O(n("input",VP,null,512),[[s,{state:e.viewState,set:a=>{e.options.notebook=a},value:e.options?.notebook,form:"anonymize",options:{}}]]),t[130]||(t[130]=n("label",{class:"form-check-label",for:"notebook"},"Display notebooks",-1))]),n("div",qP,[O(n("input",{class:"form-check-input",type:"checkbox",id:"page",name:"page",disabled:!e.details?.hasPage||e.details?.pageSource&&e.details?.pageSource?.branch!==e.source?.branch},null,8,$P),[[s,{state:e.viewState,set:a=>{e.options.page=a},value:e.options?.page,form:"anonymize",options:{}}]]),t[131]||(t[131]=n("label",{class:"form-check-label",for:"page"},"GitHub Pages",-1)),e.details?.hasPage?f("v-if",!0):(l(),d("small",LP,c(e.fmt?.translate("WARNINGS.page_not_enabled_on_repo")),1)),e.details?.hasPage&&e.details?.pageSource?.branch&&e.source?.branch&&e.details.pageSource.branch!==e.source.branch?(l(),d("small",UP,c(e.fmt?.translate("WARNINGS.page_branch_mismatch",{pageBranch:e.details?.pageSource?.branch,selectedBranch:e.source?.branch})),1)):f("v-if",!0)])],512),[[ee,e.detectedType==="repo"]]),e.detectedType==="repo"&&(e.options.image||e.options.pdf)?(l(),d("p",FP,[...t[132]||(t[132]=[v("Images and PDFs are served unchanged. Review their contents and metadata before sharing. ",-1),n("a",{href:"/faq#formats"},"Supported formats",-1)])])):f("v-if",!0),O(n("div",null,[n("div",BP,[O(n("input",zP,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[133]||(t[133]=n("label",{class:"form-check-label",for:"title-gist"},"Gist description",-1))]),n("div",HP,[O(n("input",jP,null,512),[[s,{state:e.viewState,set:a=>{e.options.content=a},value:e.options?.content,form:"anonymize",options:{}}]]),t[134]||(t[134]=n("label",{class:"form-check-label",for:"content-gist"},"File contents",-1))]),n("div",GP,[O(n("input",WP,null,512),[[s,{state:e.viewState,set:a=>{e.options.comments=a},value:e.options?.comments,form:"anonymize",options:{}}]]),t[135]||(t[135]=n("label",{class:"form-check-label",for:"comments-gist"},"Comments",-1))]),n("div",KP,[O(n("input",YP,null,512),[[s,{state:e.viewState,set:a=>{e.options.username=a},value:e.options?.username,form:"anonymize",options:{}}]]),t[136]||(t[136]=n("label",{class:"form-check-label",for:"username-gist"},"Usernames",-1))]),n("div",XP,[O(n("input",QP,null,512),[[s,{state:e.viewState,set:a=>{e.options.date=a},value:e.options?.date,form:"anonymize",options:{}}]]),t[137]||(t[137]=n("label",{class:"form-check-label",for:"date-gist"},"Dates",-1))]),n("div",JP,[O(n("input",ZP,null,512),[[s,{state:e.viewState,set:a=>{e.options.origin=a},value:e.options?.origin,form:"anonymize",options:{}}]]),t[138]||(t[138]=n("label",{class:"form-check-label",for:"origin-gist"},"Source gist ID",-1))])],512),[[ee,e.detectedType==="gist"]]),O(n("div",null,[n("div",xP,[O(n("input",e3,null,512),[[s,{state:e.viewState,set:a=>{e.options.title=a},value:e.options?.title,form:"anonymize",options:{}}]]),t[139]||(t[139]=n("label",{class:"form-check-label",for:"title"},"PR title",-1))]),n("div",t3,[O(n("input",n3,null,512),[[s,{state:e.viewState,set:a=>{e.options.body=a},value:e.options?.body,form:"anonymize",options:{}}]]),t[140]||(t[140]=n("label",{class:"form-check-label",for:"body"},"PR body",-1))]),n("div",o3,[O(n( Line truncated
anonymous_github`)])])])])]),f(" Limitations "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-warning"})]),v("Limitations ")]),n("div",{class:"panel-group",id:"faq-limitations",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingLimitation"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-limitations",href:"#limitation","aria-expanded":"false","aria-controls":"limitation"}," What are the limitations of Anonymous GitHub? ")])]),n("div",{id:"limitation",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingLimitation"},[n("div",{class:"panel-body p-3"},[n("ul",null,[n("li",null," Anonymous GitHub only anonymizes text-based files. Binary files (compiled executables, archives, etc.) are served as-is without anonymization. "),n("li",null," Files larger than 8 MB are not supported. "),n("li",null," Static site generators (such as Jekyll) used with GitHub Pages are not fully supported, although Markdown files are converted to HTML. "),n("li",null," The anonymization of terms within source code may change the behavior of the program (e.g., if a replaced term appears in a string literal or identifier). ")])])])])]),f(" Privacy and security "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#ui-icon-shield"})]),v("Privacy and security ")]),n("div",{class:"panel-group",id:"faq-privacy",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingData"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#data","aria-expanded":"false","aria-controls":"data"}," How is my data handled? ")])]),n("div",{id:"data",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingData"},[n("div",{class:"panel-body p-3"},[n("p",null," Repository data is used to provide the anonymization service. If you purchase a plan, Stripe processes payment and billing information. When a repository is removed or expires, only its configuration is retained. This makes it easy to restore the repository if needed and ensures that no future repository reuses the same ID. ")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingPermissions"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#permissions","aria-expanded":"false","aria-controls":"permissions"}," Why does GitHub say Anonymous GitHub asks for write access? ")])]),n("div",{id:"permissions",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingPermissions"},[n("div",{class:"panel-body p-3"},[n("p",null,[v("The GitHub App has read-only access to the repositories you choose. You can change repository access on your "),n("a",{href:"/connections"},"GitHub connections"),v(" page.")]),n("p",null,"Legacy GitHub OAuth includes write access to private repositories because GitHub's OAuth scopes do not offer a read-only option for them. Existing OAuth anonymizations and gists can still use this connection."),n("p",null,"Anonymous GitHub reads repository content. It never pushes, modifies, or deletes files on GitHub.")])])]),n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingViewer"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-privacy",href:"#viewer","aria-expanded":"false","aria-controls":"viewer"}," Can repository owners see who viewed their anonymized repository? ")])]),n("div",{id:"viewer",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingViewer"},[n("div",{class:"panel-body p-3"},[n("p",null," No. Only the total number of views is tracked as an incremental counter. It is not possible for the repository owner or for Anonymous GitHub to identify individual viewers. Reviewer anonymity is fully preserved. ")])])])]),f(" Self-hosting "),n("h4",{class:"faq-cat"},[n("svg",{class:"ui-icon mr-2","aria-hidden":"true"},[n("use",{href:"#project-icon-storage"})]),v("Self"),n("span",{class:"serif-hy"},"-"),v("hosting ")]),n("div",{class:"panel-group",id:"faq-hosting",role:"tablist","aria-multiselectable":"true"},[n("div",{class:"panel panel-default mb-3"},[n("div",{class:"panel-heading p-3",role:"tab",id:"headingDeploy"},[n("h3",{class:"panel-title"},[n("a",{class:"collapsed",role:"button","data-toggle":"collapse","data-parent":"#faq-hosting",href:"#deploy","aria-expanded":"false","aria-controls":"deploy"}," Can I deploy my own instance? ")])]),n("div",{id:"deploy",class:"panel-collapse collapse",role:"tabpanel","aria-labelledby":"headingDeploy"},[n("div",{cla Line truncated
anonymized repository often think it is about the paper, so the
label names the service and the tooltip says who to contact. `),t[26]||(t[26]=Ce('<li class="nav-item d-none d-lg-block"><a class="nav-link" target="_blank" rel="noopener" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" title="Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors." data-offset="30"><svg class="ui-icon d-lg-none mr-1" aria-hidden="true"><use href="#ui-icon-bug"></use></svg>Report a bug </a></li><li class="nav-item nav-support-item d-none d-lg-block"><a class="nav-link nav-support-inline" href="https://ko-fi.com/tdurieux" target="_blank" rel="noopener" title="Donate on Ko-fi to help cover hosting costs"><svg class="ui-icon nav-heart" aria-hidden="true"><use href="#ui-icon-heart"></use></svg>Support </a></li>',2)),e.isDarkMode?f("v-if",!0):(l(),d("li",mU,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to dark mode","aria-label":"Switch to dark mode",onClick:t[1]||(t[1]=o=>{e.darkMode(!0)})},[...t[19]||(t[19]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",gU,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to light mode","aria-label":"Switch to light mode",onClick:t[2]||(t[2]=o=>{e.darkMode(!1)})},[...t[20]||(t[20]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sun"})],-1)])])])):f("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",vU,[...t[21]||(t[21]=[n("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[n("i",{class:"fab fa-github mr-1"}),g(" Sign in ")],-1)])])):f("v-if",!0),e.user?.username&&e.headerCanUpgrade&&!e.headerBillingPending?(l(),d("li",yU,[n("a",{class:"nav-link nav-upgrade",href:"/profile?upgrade=1",onClick:t[3]||(t[3]=ce(o=>e.openHeaderUpgrade(),["prevent"]))},"Upgrade")])):f("v-if",!0),e.user?(l(),d("li",bU,[n("a",wU,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,kU)):f("v-if",!0),n("span",CU,c(e.user?.username),1)]),n("div",EU,[n("h6",SU,"Signed in as @"+c(e.user?.username),1),t[23]||(t[23]=Ce('<a class="dropdown-item" href="/profile"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-filter"></use></svg><span>Settings<small>Defaults, quotas, account</small></span></a><a class="dropdown-item" href="/connections"><i class="fab fa-github" aria-hidden="true"></i><span>GitHub connections<small>Repository access and OAuth</small></span></a><a class="dropdown-item" href="/claim"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg><span>Claim an anonymization<small>Attach an existing mirror to your account</small></span></a><div class="dropdown-divider"></div><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-bug"></use></svg><span>Report a bug<small>About this service, not a paper</small></span></a><a class="dropdown-item um-extra" href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener"><i class="fab fa-github" aria-hidden="true"></i><span>Source code</span></a>',6)),e.headerShowSupport?(l(),d("a",NU,[...t[22]||(t[22]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-heart"})],-1),n("span",null,"Support the project",-1)])])):f("v-if",!0),t[24]||(t[24]=n("div",{class:"dropdown-divider"},null,-1)),t[25]||(t[25]=n("a",{class:"dropdown-item",href:"/api/user/logout",target:"_self"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-logout"})]),n("span",null,"Sign out")],-1))])])):f("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,RU)):f("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[8]||(t[8]=ce(o=>e.respondToEmailPrompt("later"),["prevent"]))},[n("form",{onSubmit:t[7]||(t[7]=ce(o=>e.respondToEmailPrompt("save"),["prevent"]))},[t[29]||(t[29]=n("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[30]||(t[30]=n("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[31]||(t[31]=n("label",{for:"email-prompt-address"},"Email address",-1)),P(n("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[4]||(t[4]=o=>e.emailPromptAddress=o),disabled:e.emailPromptBusy},null,8,DU),[[dt,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p",AU,c(e.emailPromptError),1)):f("v-if",!0),n("div",TU,[n("button",{type:"button",class:"btn btn-outline-ink",disabled:e.emailPromptBusy,onClick:t[5]||(t[5]=o=>e.respondToEma Line truncated
python experiments/run.py`),n("p",null,[g("Contact: "),n("span",{class:"redact",role:"img","aria-label":"Redacted term 3"},[n("i",null,"3")])])])])])])],-1))]),f(" Live stats "),n("section",{class:T(["paper-stats paper-wrap",{"is-empty":e.statsEmpty()}]),id:"metrics","aria-label":"Usage over the last 60 days"},[n("div",UU,[e.statsEmpty()?f("v-if",!0):(l(),d("div",FU,[...t[11]||(t[11]=[n("span",{class:"paper-stats-dot","aria-hidden":"true"},null,-1),g(),n("span",null,[g("Live \xB7 last 60 days"),n("span",{class:"paper-stats-daily"}," \xB7 updated daily")],-1)])])),t[12]||(t[12]=n("div",{class:"paper-stats-meta-right"},"Used by authors at ICSE \xB7 FSE \xB7 OOPSLA",-1))]),e.statsEmpty()?f("v-if",!0):(l(),d("div",BU,[(l(!0),d(L,null,ie(e.cards,(i,s)=>(l(),d("div",{class:"paper-stat-card",key:i?.key},[n("div",{class:T(["paper-stat-value",{"is-pending":!e.stat}])},c(e.stat?e.fmt?.bigNum(i?.total):"\u2014"),3),n("div",zU,c(i?.label),1),e.history[i?.key].bars?.length>1&&e.history[i?.key].deltaToday>0?(l(),d("div",HU," +"+c(e.fmt?.number(e.history[i?.key].deltaToday))+" today ",1)):f("v-if",!0)]))),128))]))],2),f(" Before / after "),t[22]||(t[22]=n("section",{class:"paper-section-head paper-wrap"},[n("div",null,[n("div",{class:"paper-eyebrow"},"Try it"),n("h2",null,[g("The same repository, "),n("em",null,"minus you.")])]),n("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),n("div",jU,[n("div",GU,[t[13]||(t[13]=n("label",{for:"demo-terms"},[g("Terms to redact "),n("span",null,[g("comma-separated"),n("span",{class:"dt-try"},", try adding your own")])],-1)),P(n("textarea",{id:"demo-terms",class:"demo-terms-input",rows:"1","onUpdate:modelValue":t[0]||(t[0]=i=>e.demoTerms=i),spellcheck:"false",autocomplete:"off",onKeydown:t[1]||(t[1]=mt(ce(()=>{},["prevent"]),["enter"]))},null,544),[[dt,e.demoTerms]])]),n("div",WU,[n("div",KU,[t[15]||(t[15]=n("div",{class:"pane-header"},[n("span",{class:"pane-label"},[g("Your repository "),n("span",{class:"pane-edit-hint"},"\xB7 editable")]),n("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")],-1)),n("div",YU,[n("div",XU,[(l(!0),d(L,null,ie(e.demoParts(),(i,s)=>(l(),d(L,{key:s},[i.redacted?(l(),d("mark",JU,c(i.original),1)):(l(),d(L,{key:1},[g(c(i.text),1)],64))],64))),128)),t[14]||(t[14]=g("\u200B",-1))]),P(n("textarea",{class:"pane-body demo-input","onUpdate:modelValue":t[2]||(t[2]=i=>e.demoText=i),spellcheck:"false","aria-label":"Sample README to anonymize"},null,512),[[dt,e.demoText]])])]),n("div",QU,[n("div",ZU,[t[16]||(t[16]=n("span",{class:"pane-label"},"What reviewers see",-1)),n("span",xU,[n("span",eF,c(e.demoCount())+" redacted",1)])]),n("div",tF,[(l(!0),d(L,null,ie(e.demoParts(),(i,s)=>(l(),d(L,{key:s},[i.redacted?(l(),d("span",{key:0,class:"redact-chip",title:"Replaces \u201C"+i.original+"\u201D"},c(i.text),9,nF)):(l(),d(L,{key:1},[g(c(i.text),1)],64))],64))),128))])])])]),f(" What you get: one screenshot, three tabs "),t[23]||(t[23]=n("section",{class:"paper-section-head paper-wrap",id:"about"},[n("div",null,[n("div",{class:"paper-eyebrow"},"What you get"),n("h2",null,"Anonymize, review, manage.")]),n("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),n("section",oF,[n("div",sF,[(l(!0),d(L,null,ie(e.features,(i,s)=>(l(),d("div",{class:T(["paper-feature",{"is-on":e.feature===i?.key}]),key:i?.key},[n("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:r=>e.selectFeature(i.key),onKeydown:r=>e.featureKeydown(r,s),id:"feature-tab-"+i?.key,"aria-controls":"feature-panel-"+i?.key,"aria-selected":e.feature===i?.key,tabindex:e.feature===i?.key?0:-1},[n("span",rF,[n("span",aF,c(i?.num),1),t[17]||(t[17]=n("span",{class:"pf-sep"}," \xB7 ",-1)),n("span",lF,c(i?.eyebrow),1)]),n("span",dF,[g(c(i?.title.split("-")[0]),1),i?.title.includes("-")?(l(),d("span",uF,"-")):f("v-if",!0),g(c(i?.title.split("-").slice(1).join("-"))+" "+c(i?.accent),1)])],40,iF),n("div",cF,[n("span",pF,[g(c(i?.title.split("-")[0]),1),i?.title.includes("-")?(l(),d("span",fF,"-")):f("v-if",!0),g(c(i?.title.split("-").slice(1).join("-"))+" "+c(i?.accent),1)]),n("p",null,c(i?.text),1),n("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(i)),target:e.featureTarget(i)},c(i?.cta)+" \u2192",9,hF)])],2))),128))]),n("div",mF,[(l(!0),d(L,null,ie(e.features,(i,s)=>P((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:i?.key,id:"feature-panel-"+i?.key,"aria-labelledby":"feature-tab-"+i?.key},[n("div",vF,[n("div",yF,[t[18]||(t[18]=n("span",{class:"dots"},[n("i"),n("i"),n("i")],-1)),n("span",bF,c(i?.url),1)]),n("div",{class:T(["feat-mock","is-"+i?.key]),role:"img","aria-label":i?.alt},[i?.key==="anonymize"?(l(),d("div",kF,[...t[19]||(t[19]=[Ce('<div class="fm-label">GitHub re Line truncated
label names the service and the tooltip says who to contact. `),n("li",{class:T(["nav-item nav-extra-item d-none d-lg-block",{"in-user-menu":!!e.user?.username}])},[...t[19]||(t[19]=[n("a",{class:"nav-link",target:"_blank",rel:"noopener",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",title:"Report a problem with the Anonymous GitHub service. Questions about an anonymized repository or paper go to its authors.","data-offset":"30"},[n("svg",{class:"ui-icon d-lg-none mr-1","aria-hidden":"true"},[n("use",{href:"#ui-icon-bug"})]),v("Report a bug ")],-1)])],2),n("li",{class:T(["nav-item nav-support-item nav-extra-item d-none d-lg-block",{"in-user-menu":!!e.user?.username}])},[...t[20]||(t[20]=[n("a",{class:"nav-link nav-support-inline",href:"https://ko-fi.com/tdurieux",target:"_blank",rel:"noopener",title:"Donate on Ko-fi to help cover hosting costs"},[n("svg",{class:"ui-icon nav-heart","aria-hidden":"true"},[n("use",{href:"#ui-icon-heart"})]),v("Support ")],-1)])],2),e.isDarkMode?f("v-if",!0):(l(),d("li",NU,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to dark mode","aria-label":"Switch to dark mode",onClick:t[1]||(t[1]=o=>{e.darkMode(!0)})},[...t[21]||(t[21]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-moon"})],-1)])])])),e.isDarkMode?(l(),d("li",RU,[n("button",{type:"button",class:"nav-link nav-icon",title:"Switch to light mode","aria-label":"Switch to light mode",onClick:t[2]||(t[2]=o=>{e.darkMode(!1)})},[...t[22]||(t[22]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sun"})],-1)])])])):f("v-if",!0),!e.user&&!e.isReviewerRoute?(l(),d("li",DU,[...t[23]||(t[23]=[n("a",{class:"nav-link btn-signin",target:"_self",href:"/signin","data-offset":"30"},[n("i",{class:"fab fa-github mr-1"}),v(" Sign in ")],-1)])])):f("v-if",!0),e.user?.username&&e.headerCanUpgrade&&!e.headerBillingPending?(l(),d("li",AU,[n("a",{class:"nav-link nav-upgrade",href:"/profile?upgrade=1",onClick:t[3]||(t[3]=de(o=>e.openHeaderUpgrade(),["prevent"]))},"Upgrade")])):f("v-if",!0),e.user?(l(),d("li",TU,[n("a",PU,[e.user?.photo?(l(),d("img",{key:0,width:"22",height:"22",class:"rounded-circle",src:e.safeUrl(e.user?.photo)},null,8,OU)):f("v-if",!0),n("span",IU,c(e.user?.username),1)]),n("div",MU,[n("h6",_U,"Signed in as @"+c(e.user?.username),1),t[25]||(t[25]=Se('<a class="dropdown-item" href="/profile"><svg class="ui-icon" aria-hidden="true"><use href="#project-icon-filter"></use></svg><span>Settings<small>Defaults, quotas, account</small></span></a><a class="dropdown-item" href="/connections"><i class="fab fa-github" aria-hidden="true"></i><span>GitHub connections<small>Repository access and OAuth</small></span></a><a class="dropdown-item" href="/claim"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-link"></use></svg><span>Claim an anonymization<small>Attach an existing mirror to your account</small></span></a><div class="dropdown-divider"></div><a class="dropdown-item" href="https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml" target="_blank" rel="noopener"><svg class="ui-icon" aria-hidden="true"><use href="#ui-icon-bug"></use></svg><span>Report a bug<small>About this service, not a paper</small></span></a><a class="dropdown-item um-extra" href="https://github.com/tdurieux/anonymous_github/" target="_blank" rel="noopener"><i class="fab fa-github" aria-hidden="true"></i><span>Source code</span></a>',6)),e.headerShowSupport?(l(),d("a",VU,[...t[24]||(t[24]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-heart"})],-1),n("span",null,"Support the project",-1)])])):f("v-if",!0),t[26]||(t[26]=n("div",{class:"dropdown-divider"},null,-1)),t[27]||(t[27]=n("a",{class:"dropdown-item",href:"/api/user/logout",target:"_self"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-logout"})]),n("span",null,"Sign out")],-1))])])):f("v-if",!0)])])],2),e.generalMessage?(l(),d("div",{key:0,class:"navbar shadow generalMessage",innerHTML:e.sanitize(e.generalMessage)},null,8,qU)):f("v-if",!0),e.emailPromptOpen?(l(),d("dialog",{key:1,id:"email-prompt",class:"email-prompt","aria-labelledby":"email-prompt-title","aria-describedby":"email-prompt-reason",onCancel:t[8]||(t[8]=de(o=>e.respondToEmailPrompt("later"),["prevent"]))},[n("form",{onSubmit:t[7]||(t[7]=de(o=>e.respondToEmailPrompt("save"),["prevent"]))},[t[30]||(t[30]=n("h2",{id:"email-prompt-title"},"Stay informed about access problems",-1)),t[31]||(t[31]=n("p",{id:"email-prompt-reason"},"Get email alerts when your GitHub token or repository access fails.",-1)),t[32]||(t[32]=n("label",{for:"email-prompt-address"},"Email address",-1)),O(n("input",{id:"email-prompt-address",class:"form-control",type:"email",autocomplete:"email",maxlength:"254",required:"","onUpdate:modelValue":t[4]||(t[4]=o=>e.emailPromptAddress=o),disabled:e.emailPromptBusy},null,8,$U),[[lt,e.emailPromptAddress]]),e.emailPromptError?(l(),d("p Line truncated
python experiments/run.py`),n("p",null,[v("Contact: "),n("span",{class:"redact",role:"img","aria-label":"Redacted term 3"},[n("i",null,"3")])])])])])])],-1))]),f(" Live stats "),n("section",{class:T(["paper-stats paper-wrap",{"is-empty":e.statsEmpty()}]),id:"metrics","aria-label":"Usage over the last 60 days"},[n("div",XU,[e.statsEmpty()?f("v-if",!0):(l(),d("div",QU,[...t[11]||(t[11]=[n("span",{class:"paper-stats-dot","aria-hidden":"true"},null,-1),v(),n("span",null,[v("Live \xB7 last 60 days"),n("span",{class:"paper-stats-daily"}," \xB7 updated daily")],-1)])])),t[12]||(t[12]=n("div",{class:"paper-stats-meta-right"},"Used by authors at ICSE \xB7 FSE \xB7 OOPSLA",-1))]),e.statsEmpty()?f("v-if",!0):(l(),d("div",JU,[(l(!0),d(L,null,ie(e.cards,(i,s)=>(l(),d("div",{class:"paper-stat-card",key:i?.key},[n("div",{class:T(["paper-stat-value",{"is-pending":!e.stat}])},c(e.stat?e.fmt?.bigNum(i?.total):"\u2014"),3),n("div",ZU,c(i?.label),1),e.history[i?.key].bars?.length>1&&e.history[i?.key].deltaToday>0?(l(),d("div",xU," +"+c(e.fmt?.number(e.history[i?.key].deltaToday))+" today ",1)):f("v-if",!0)]))),128))]))],2),f(" Before / after "),t[22]||(t[22]=n("section",{class:"paper-section-head paper-wrap"},[n("div",null,[n("div",{class:"paper-eyebrow"},"Try it"),n("h2",null,[v("The same repository, "),n("em",null,"minus you.")])]),n("p",null," Names, affiliations, emails, and any term you list are replaced across the README, source files, notebooks, and PDF links. Reviewers browse the real thing, not a zip. ")],-1)),n("div",eF,[n("div",tF,[t[13]||(t[13]=n("label",{for:"demo-terms"},[v("Terms to redact "),n("span",null,[v("comma-separated"),n("span",{class:"dt-try"},", try adding your own")])],-1)),O(n("textarea",{id:"demo-terms",class:"demo-terms-input",rows:"1","onUpdate:modelValue":t[0]||(t[0]=i=>e.demoTerms=i),spellcheck:"false",autocomplete:"off",onKeydown:t[1]||(t[1]=ut(de(()=>{},["prevent"]),["enter"]))},null,544),[[lt,e.demoTerms]])]),n("div",nF,[n("div",oF,[t[15]||(t[15]=n("div",{class:"pane-header"},[n("span",{class:"pane-label"},[v("Your repository "),n("span",{class:"pane-edit-hint"},"\xB7 editable")]),n("span",{class:"pane-url"},"github.com/jane-smith/DeepLearnUtils")],-1)),n("div",sF,[n("div",iF,[(l(!0),d(L,null,ie(e.demoParts(),(i,s)=>(l(),d(L,{key:s},[i.redacted?(l(),d("mark",rF,c(i.original),1)):(l(),d(L,{key:1},[v(c(i.text),1)],64))],64))),128)),t[14]||(t[14]=v("\u200B",-1))]),O(n("textarea",{class:"pane-body demo-input","onUpdate:modelValue":t[2]||(t[2]=i=>e.demoText=i),spellcheck:"false","aria-label":"Sample README to anonymize"},null,512),[[lt,e.demoText]])])]),n("div",aF,[n("div",lF,[t[16]||(t[16]=n("span",{class:"pane-label"},"What reviewers see",-1)),n("span",dF,[n("span",uF,c(e.demoCount())+" redacted",1)])]),n("div",cF,[(l(!0),d(L,null,ie(e.demoParts(),(i,s)=>(l(),d(L,{key:s},[i.redacted?(l(),d("span",{key:0,class:"redact-chip",title:"Replaces \u201C"+i.original+"\u201D"},c(i.text),9,pF)):(l(),d(L,{key:1},[v(c(i.text),1)],64))],64))),128))])])])]),f(" What you get: one screenshot, three tabs "),t[23]||(t[23]=n("section",{class:"paper-section-head paper-wrap",id:"about"},[n("div",null,[n("div",{class:"paper-eyebrow"},"What you get"),n("h2",null,"Anonymize, review, manage.")]),n("p",null," Terms are redacted in text files. Enabled images and PDFs are served unchanged, so review them for identifying content before sharing. Monitor your mirror, update it, or remove it when the review is over. ")],-1)),n("section",fF,[n("div",hF,[(l(!0),d(L,null,ie(e.features,(i,s)=>(l(),d("div",{class:T(["paper-feature",{"is-on":e.feature===i?.key}]),key:i?.key},[n("button",{type:"button",class:"paper-feature-tab",role:"tab",onClick:r=>e.selectFeature(i.key),onKeydown:r=>e.featureKeydown(r,s),id:"feature-tab-"+i?.key,"aria-controls":"feature-panel-"+i?.key,"aria-selected":e.feature===i?.key,tabindex:e.feature===i?.key?0:-1},[n("span",gF,[n("span",vF,c(i?.num),1),t[17]||(t[17]=n("span",{class:"pf-sep"}," \xB7 ",-1)),n("span",yF,c(i?.eyebrow),1)]),n("span",bF,[v(c(i?.title.split("-")[0]),1),i?.title.includes("-")?(l(),d("span",wF,"-")):f("v-if",!0),v(c(i?.title.split("-").slice(1).join("-"))+" "+c(i?.accent),1)])],40,mF),n("div",kF,[n("span",CF,[v(c(i?.title.split("-")[0]),1),i?.title.includes("-")?(l(),d("span",EF,"-")):f("v-if",!0),v(c(i?.title.split("-").slice(1).join("-"))+" "+c(i?.accent),1)]),n("p",null,c(i?.text),1),n("a",{class:"paper-link-arrow",href:e.safeUrl(e.featureHref(i)),target:e.featureTarget(i)},c(i?.cta)+" \u2192",9,SF)])],2))),128))]),n("div",NF,[(l(!0),d(L,null,ie(e.features,(i,s)=>O((l(),d("div",{class:"paper-feature-panel",role:"tabpanel",key:i?.key,id:"feature-panel-"+i?.key,"aria-labelledby":"feature-tab-"+i?.key},[n("div",DF,[n("div",AF,[t[18]||(t[18]=n("span",{class:"dots"},[n("i"),n("i"),n("i")],-1)),n("span",TF,c(i?.url),1)]),n("div",{class:T(["feat-mock","is-"+i?.key]),role:"img","aria-label":i?.alt},[i?.key==="anonymize"?(l(),d("div",OF,[...t[19]||(t[19]=[Se('<div class="fm-label">GitHub re Line truncated
<span class="ln">2</span><span class="c"># Author: <span class="redact">XXXX-1</span>, <span class="redact">XXXX-2</span></span>
<span class="ln">3</span><span class="k">import</span> torch
<span class="ln">4</span><span class="k">from</span> utils <span class="k">import</span> load_config
@@ -54,14 +54,14 @@ python experiments/run.py`),n("p",null,[g("Contact: "),n("span",{class:"redact",
<span class="ln">7</span> model = build_model(config)
<span class="ln">8</span> <span class="k">for</span> epoch <span class="k">in</span> range(config.epochs):
<span class="ln">9</span> loss = step(model)
<span class="ln">10</span> log(<span class="s">&quot;epoch %d: %.3f&quot;</span>, epoch, loss)</pre></div>`,2)])])):(l(),d("div",EF,[...t[21]||(t[21]=[Ce('<div class="fm-dash-head"><span>Project</span><span>Status</span><span>Views</span><span>Expires</span></div><div class="fm-dash-row"><span><b>DeepLearnUtils</b><i>paper-7f2a \xB7 ICSE 2027</i></span><span class="st is-ready">Ready</span><span>41</span><span>Mar 31, 2027</span></div><div class="fm-dash-row"><span><b>vision-bench#212</b><i>pull request \xB7 FSE 2027</i></span><span class="st is-ready">Ready</span><span>12</span><span>Never</span></div><div class="fm-dash-row"><span><b>graph-repair</b><i>gr-91ab</i></span><span class="st is-progress">Updating</span><span>5</span><span>Jan 5, 2027</span></div><div class="fm-dash-row is-muted"><span><b>JarSift</b><i>OOPSLA 2025</i></span><span class="st is-expired">Expired</span><span>72</span><span>Sep 28, 2026</span></div>',5)])]))],10,wF)])],8,gF)),[[ee,e.feature===i?.key]])),128))])]),f(" FAQ teaser "),t[24]||(t[24]=Ce('<section class="paper-qa paper-qa-r3 paper-wrap" aria-labelledby="qa-heading"><div class="qa-head"><div><div class="paper-eyebrow">Before you sign in</div><h2 id="qa-heading">The questions that come up most.</h2></div><a class="paper-link-arrow" href="/faq">Read the full FAQ \u2192</a></div><div class="qa-grid"><div class="q"><a href="/faq#permissions">What access does GitHub sign-in require?</a><p> The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories. </p></div><div class="q"><a href="/faq#formats">Which file formats are supported?</a><p> Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged. </p></div><div class="q"><a href="/faq#expiration">What happens when an anonymized repository expires?</a><p> You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over. </p></div></div></section><section class="paper-cta paper-wrap" aria-labelledby="cta-heading"><div><h2 id="cta-heading">Ready for review?</h2><p>Create an anonymous mirror in a couple of minutes. Reviewers just open the link.</p></div><div class="paper-cta-actions"><a class="btn-hero" href="/signin" target="_self"><i class="fab fa-github" aria-hidden="true"></i> Sign in with GitHub</a><a class="paper-link-arrow" target="_self" href="https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/">See an anonymized repository \u2192</a></div></section>',2)),Me(o,{name:"partials/footer.htm",state:e.viewState},null,8,["state"])])}var SF={class:"paper-empty"},NF={class:"paper-empty-inner"},RF={key:0,class:"paper-eyebrow"},DF={key:1,class:"paper-eyebrow"},AF={key:2,class:"paper-empty-title"},TF=["textContent"];function Qc(e,t){return l(),d("div",SF,[n("div",NF,[e.error?f("v-if",!0):(l(),d("div",RF,"Working")),e.error?(l(),d("div",DF,"Error")):f("v-if",!0),e.error?f("v-if",!0):(l(),d("h1",AF,[...t[0]||(t[0]=[g(" Loading",-1),n("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,TF)):f("v-if",!0)])])}var PF={class:"container paper-page paper-settings"},OF={class:"paper-crumbs"},IF={class:"here"},_F={class:"paper-page-title"},MF={class:"paper-settings-body"},VF={class:"paper-settings-toc"},qF={href:"#conf-billing"},$F={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},LF={id:"conf-basics",class:"paper-settings-section"},UF={class:"form-group"},FF={class:"invalid-feedback"},BF={class:"invalid-feedback"},zF={class:"form-group"},HF={class:"invalid-feedback"},jF={class:"form-group"},GF={class:"invalid-feedback"},WF={class:"invalid-feedback"},KF={id:"conf-window",class:"paper-settings-section"},YF={class:"form-grid-2"},XF={class:"form-group"},JF={class:"invalid-feedback"},QF={class:"invalid-feedback"},ZF={class:"form-group"},xF={class:"invalid-feedback"},e7={class:"invalid-feedback"},t7={id:"conf-rendering",class:"paper-settings-section"},n7={class:"form-check"},o7={class:"form-check-input",type:"checkbox",id:"link",name:"link"},s7={class:"form-check"},i7={class:"form-check-input",type:"checkbox",id:"image",name:"image"},r7={class:"form-check"},a7={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},l7={class:"form-check"},d7={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},u7={id:"conf-features",class:"paper-settings-section"},c7={class:"form-check"},p7={class:"form-check-input",type:"checkbox",id:"update",name:"update"},f7={class:"form-check"},h7={class:"form-check-input",type:"checkbox",id:"page",name:"page"},m7={id:"conf-plan",class:"paper-settings-section"},g7={key:0,class:"paper-section-copy"},v7={class:"conference-tiers",role:"radiogroup","aria-label":"Review package size"}Line truncated
`).length))+" lines",1)):f("v-if",!0)]),P(n("button",{type:"button",class:"btn btn-sm btn-icon-only btn-ghost copy-path-btn","aria-label":e.pathCopied?"Path copied":"Copy file path",title:e.pathCopied?"Path copied":"Copy file path",onClick:t[2]||(t[2]=a=>e.copyPath())},[(l(),d("svg",u9,[n("use",{href:e.pathCopied?"#ui-icon-check":"#ui-icon-link"},null,8,c9)]))],8,d9),[[ee,e.filePath]])]),e.type!="html"&&typeof e.content=="string"?(l(),d("span",p9,[e.redactionCount()?(l(),d(L,{key:0},[n("span",{class:"meta-redact",title:e.redactionCount()+" redacted terms"},[g(c(e.redactionCount()),1),t[47]||(t[47]=n("span",{class:"meta-redact-word"}," redacted",-1))],8,f9),t[48]||(t[48]=n("span",{class:"sep"},"\xB7",-1))],64)):f("v-if",!0),g(c(e.languageName||"Text"),1),n("span",h9,[t[49]||(t[49]=n("span",{class:"sep"},"\xB7",-1)),g(c(e.content.length<1024?e.content.length+" B":(e.content.length/1024).toFixed(1)+" KB"),1)]),t[50]||(t[50]=n("span",{class:"sep"},"\xB7",-1)),g(c(e.fmt?.number(e.content.split(`
`).length))+" lines",1)])):f("v-if",!0),e.type=="html"?(l(),d("span",m9,[e.redactionCount()?(l(),d(L,{key:0},[n("span",{class:"meta-redact",title:e.redactionCount()+" redacted terms"},[g(c(e.redactionCount()),1),t[51]||(t[51]=n("span",{class:"meta-redact-word"}," redacted",-1))],8,g9),t[52]||(t[52]=n("span",{class:"sep"},"\xB7",-1))],64)):f("v-if",!0),t[54]||(t[54]=g("Markdown",-1)),e.fileSize(e.filePath)!=null?(l(),d(L,{key:1},[t[53]||(t[53]=n("span",{class:"sep"},"\xB7",-1)),g(c(e.formatSize(e.fileSize(e.filePath))),1)],64)):f("v-if",!0)])):f("v-if",!0),n("div",v9,[e.isCsv()?(l(),d("div",y9,[n("button",{type:"button",role:"radio",class:T(["seg-chip",{active:e.csvView==="table"}]),"aria-checked":e.csvView==="table",onClick:t[3]||(t[3]=a=>e.csvView="table")},"Table",10,b9),n("button",{type:"button",role:"radio",class:T(["seg-chip",{active:e.csvView==="raw"}]),"aria-checked":e.csvView==="raw",onClick:t[4]||(t[4]=a=>e.csvView="raw"),title:"Show the file as text with line numbers"},"Text",10,w9)])):f("v-if",!0),e.type!="html"&&e.symbols().length>1?(l(),d("div",k9,[n("button",{type:"button",class:T(["btn btn-sm btn-ghost btn-symbols",{"is-on":e.symbolsOpen}]),"aria-expanded":e.symbolsOpen?"true":"false","aria-haspopup":"true",title:"Symbols in this file",onClick:t[5]||(t[5]=a=>e.symbolsOpen=!e.symbolsOpen)},[...t[55]||(t[55]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-list"})],-1),n("span",{class:"btn-find-label"},"Symbols",-1)])],10,C9),e.symbolsOpen?(l(),d("div",E9,[n("div",S9,c(e.symbols().length)+" "+c(e.symbols().length===1?"symbol":"symbols"),1),(l(!0),d(L,null,ie(e.symbols(),a=>(l(),d("button",{type:"button",class:"symbols-item",role:"menuitem",key:a.line+a.name,onClick:u=>e.goToSymbol(a.line)},[n("span",{class:T(["symbols-kind","is-"+a.kind])},c(a.kind==="class"?"C":a.kind==="function"?"\u0192":"v"),3),n("span",R9,c(a.name),1),n("span",D9,c(a.line),1)],8,N9))),128))])):f("v-if",!0)])):f("v-if",!0),e.type=="html"?(l(),d("button",{key:2,type:"button",class:T(["btn btn-sm btn-ghost btn-icon-only btn-find btn-md-find",{"is-on":e.mdFindOpen}]),"aria-label":"Find on this page",title:"Find on this page ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[6]||(t[6]=a=>e.toggleMdFind())},[...t[56]||(t[56]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],10,A9)):f("v-if",!0),e.type!="html"&&!(e.isCsv()&&e.csvView==="table")?(l(),d("div",T9,[e.type!="html"?(l(),d("button",{key:0,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-goto","aria-label":"Go to line",title:"Go to line ("+(e.isMac?"\u2318":"Ctrl+")+"G)",onClick:t[7]||(t[7]=a=>e.gotoLine())},[...t[57]||(t[57]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1)])],8,P9)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:1,type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost btn-toggle",{"is-on":e.wrapLines}]),"aria-pressed":e.wrapLines?"true":"false","aria-label":"Wrap lines",title:"Wrap lines (Alt+Z)",onClick:t[8]||(t[8]=a=>e.toggleWrap())},[...t[58]||(t[58]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)])],10,O9)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:2,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-find","aria-label":"Find in file",title:"Find in file ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[9]||(t[9]=a=>e.findInFile())},[...t[59]||(t[59]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],8,I9)):f("v-if",!0)])):f("v-if",!0),n("div",_9,[n("a",{target:"_self",class:"tb-seg-btn",title:e.type=="html"?"Open the Markdown source":"Open the raw file",href:e.safeUrl(e.url)},"Raw",8,M9),typeof e.content=="string"?(l(),d("button",{key:0,type:"button",class:"tb-seg-btn tb-seg-icon","aria-label":e.contentCopied?"Copied":"Copy file contents",title:e.contentCopied?"Copied":"Copy file contents",onClick:t[10]||(t[10]=a=>e.copyContent())},[(l(),d("svg",q9,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,$9)]))],8,V9)):f("v-if",!0),n("a",{target:"_self",class:"tb-seg-btn tb-seg-icon","aria-label":"Download file",title:"Download file",href:e.safeUrl(e.url+"&download=true")},[...t[60]||(t[60]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1)])],8,L9)]),typeof e.content=="string"?(l(),d("button",{key:4,type:"button",class:"btn btn-sm btn-icon-only btn-ghost tb-copy-m","aria-label":e.contentCopied?"Copied":"Copy file contents",onClick:t[11]||(t[11]=a=>e.copyContent())},[(l(),d("svg",F9,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,B9)]))],8,U9)):f("v-if",!0),e.type=="html"&&e.readmeToc().length>=3?(l(),d("div",z9,[n("button",{type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost tb-toc-btn",{"is-on":e.tocOpen}]),"aria-label":"On this page",title:"On this page","aria-haspopup":"true","aria-expanded":e.tocOpen?"true":"false",onClick:t[12]||(t[12]=ce(a=>{e.tocOpe Line truncated
`).length))+" lines",1)],64)):f("v-if",!0)])):f("v-if",!0),e.options?.publishedAt||e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate?(l(),d("div",J9)):f("v-if",!0),e.type=="html"?(l(),d("button",{key:3,type:"button",role:"menuitem",onClick:t[16]||(t[16]=a=>e.toggleMdFind())},[...t[65]||(t[65]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),g("Find in file",-1)])])):f("v-if",!0),e.type=="html"?(l(),d("div",Q9)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:5,type:"button",role:"menuitem",onClick:t[17]||(t[17]=a=>e.findInFile())},[...t[66]||(t[66]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),g("Find in file",-1)])])):f("v-if",!0),e.type!="html"?(l(),d("button",{key:6,type:"button",role:"menuitem",onClick:t[18]||(t[18]=a=>e.gotoLine())},[...t[67]||(t[67]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1),g("Go to line",-1)])])):f("v-if",!0),e.type!="html"?(l(),d("button",{key:7,type:"button",role:"menuitemcheckbox","aria-checked":e.wrapLines?"true":"false",onClick:t[19]||(t[19]=a=>e.toggleWrap())},[t[68]||(t[68]=n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)),t[69]||(t[69]=g("Wrap lines",-1)),e.wrapLines?(l(),d("span",x9,"\u2713")):f("v-if",!0)],8,Z9)):f("v-if",!0),e.isCsv()?(l(),d("button",{key:8,type:"button",role:"menuitem",class:"tb-csv-view",onClick:t[20]||(t[20]=a=>{e.csvView=e.csvView==="table"?"raw":"table",e.moreOpen=!1})},[(l(),d("svg",eB,[n("use",{href:e.csvView==="table"?"#ui-icon-code":"#ui-icon-list"},null,8,tB)])),g(c(e.csvView==="table"?"Show as text":"Show as table"),1)])):f("v-if",!0),e.type!="html"?(l(),d("div",nB)):f("v-if",!0),e.type=="html"?(l(),d("a",{key:10,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[70]||(t[70]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),g("View raw",-1)])],8,oB)):f("v-if",!0),e.type!="html"?(l(),d("a",{key:11,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[71]||(t[71]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),g("View raw",-1)])],8,sB)):f("v-if",!0),n("a",{role:"menuitem",target:"_self",href:e.safeUrl(e.url+"&download=true")},[...t[72]||(t[72]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1),g("Download file",-1)])],8,iB),e.options?.hasWebsite?(l(),d("a",{key:12,role:"menuitem",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[73]||(t[73]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-globe"})],-1),g("Open website",-1)])],8,rB)):f("v-if",!0),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:13,role:"menuitem",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[74]||(t[74]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-edit"})],-1),g("Edit anonymization",-1)])],8,aB)):f("v-if",!0),e.options?.download?(l(),d("a",{key:14,role:"menuitem",target:"_self",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[75]||(t[75]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-archive"})],-1),g("Download ZIP",-1)])],8,lB)):f("v-if",!0),n("button",{type:"button",role:"menuitem",onClick:t[21]||(t[21]=a=>e.copyPath())},[...t[76]||(t[76]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-link"})],-1),g("Copy file path",-1)])]),t[77]||(t[77]=n("div",{class:"tb-menu-sep"},null,-1)),t[78]||(t[78]=n("a",{role:"menuitem",href:"/faq"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-help"})]),g("FAQ")],-1)),t[79]||(t[79]=n("a",{role:"menuitem",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",target:"_blank",rel:"noopener"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-bug"})]),g("Report a bug")],-1))])):f("v-if",!0)])]),e.gotoOpen&&e.type!="html"?(l(),d("form",{key:2,class:"goto-pop",role:"dialog","aria-label":"Go to line",onSubmit:t[25]||(t[25]=ce(a=>e.submitGoto(),["prevent"]))},[t[80]||(t[80]=n("label",{class:"goto-label",for:"goto-input"},"Go to line",-1)),P(n("input",{id:"goto-input",class:"goto-input",type:"text",inputmode:"numeric",autocomplete:"off",spellcheck:"false",placeholder:"1\u2013"+e.fmt?.number(typeof e.content=="string"?e.content.split(`
`).length:1),"aria-invalid":e.gotoError?"true":"false","onUpdate:modelValue":t[23]||(t[23]=a=>e.gotoValue=a),onKeydown:t[24]||(t[24]=mt(ce(a=>e.closeGoto(),["prevent","stop"]),["esc"]))},null,40,dB),[[dt,e.gotoValue]]),n("span",{class:T(["goto-hint",{"is-error":e.gotoError}])},c(e.gotoError||"Line, or line:column"),3)],32)):f("v-if",!0)]),e.isCsv()&&e.csvView==="table"?(l(),d("div",{key:0,class:"csv-table-wrap",tabindex:"0",role:"region","aria-label":"Table view of "+(e.paths?.[e.paths.length-1]||"file")},[n("table",cB,[n("thead",null,[n("tr",null,[t[81]||(t[81]=n("th",{class:"csv-rownum",scope:"col"},[n("span",{class:"sr-only"},"Row")],-1)),(l(!0),d(L,null,ie(e.csvRows()[0]||[],(a,u)=>(l(),d("th",{scope:"col",key:u,class:T({"is-num":e.csvNumCol(u)})},[(l(!0),d(L,null,ie(e.redactParts(a),(p,y)=>(l(),d(L,{key:y},[p.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+p.n},[n("i",null,c(p.n),1)],8,pB)):(l(),d(L,{key:1},[g(c(p.t),1)],64))],64))),128))],2))),128))])]),n("tbody",null,[(l(!0),d(L,null,ie(e.csvRows().slice(1),(a,u)=>(l(),d("tr",{key:u},[n("td",fB,c(u+1),1),(l(!0),d(L,null,ie(a,(p,y)=>(l(),d("td",{key:y,class:T({"is-num":e.csvNumCol(y)})},[(l(!0),d(L,null,ie(e.redactParts(p),(m,b)=>(l(),d(L,{key:b},[m.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+m.n},[n("i",null,c(m.n),1)],8,hB)):(l(),d(L,{key:1},[g(c(m.t),1)],64))],64))),128))],2))),128))]))),128))])])],8,uB)):f("v-if",!0),e.type!="html"&&!(e.isCsv()&&e.csvView==="table")?P((l(),d("div",mB,null,512)),[[r,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="html"&&e.mdFindOpen?(l(),d("div",gB,[n("input",{type:"search",class:"md-find-input",placeholder:"Find on this page","aria-label":"Find on this page",value:e.mdFindQuery,onInput:t[26]||(t[26]=a=>{e.mdFindQuery=a.target.value,e.runMdFind()}),onKeydown:[t[27]||(t[27]=mt(ce(a=>a.shiftKey?e.stepMdFind(-1):e.stepMdFind(1),["prevent"]),["enter"])),t[28]||(t[28]=mt(ce(a=>e.toggleMdFind(!1),["prevent"]),["esc"]))]},null,40,vB),n("span",yB,[n("button",{type:"button","aria-label":"Previous match",onClick:t[29]||(t[29]=a=>e.stepMdFind(-1)),disabled:!e.mdFindTotal},[...t[82]||(t[82]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-left"})],-1)])],8,bB),n("button",{type:"button","aria-label":"Next match",onClick:t[30]||(t[30]=a=>e.stepMdFind(1)),disabled:!e.mdFindTotal},[...t[83]||(t[83]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-right"})],-1)])],8,wB)]),n("span",kB,c(e.mdFindQuery?e.mdFindTotal?e.mdFindIndex+1+" of "+e.mdFindTotal:"No results":""),1),n("button",{type:"button",class:T(["md-find-opt",{"is-on":e.mdFindCase}]),"aria-pressed":e.mdFindCase?"true":"false",title:"Match case","aria-label":"Match case",onClick:t[31]||(t[31]=a=>{e.mdFindCase=!e.mdFindCase,e.runMdFind()})},"Aa",10,CB),n("button",{type:"button",class:"md-find-close","aria-label":"Close find",onClick:t[32]||(t[32]=a=>e.toggleMdFind(!1))},"\xD7")])):f("v-if",!0),e.type=="html"?(l(),d("div",EB,[n("div",{class:"file-content markdown-body",innerHTML:e.renderReadme(e.sanitize(e.content))},null,8,SB),e.readmeToc().length>=3?(l(),d("aside",NB,[t[84]||(t[84]=n("div",{class:"readme-toc-head"},"On this page",-1)),n("nav",RB,[n("a",{href:"#",class:T(["lvl-2 toc-top",{"is-active":!e.activeHeading}]),onClick:t[33]||(t[33]=ce(a=>e.scrollToHeading(null),["prevent"]))},"Introduction",2),(l(!0),d(L,null,ie(e.readmeToc(),(a,u)=>(l(),d("a",{key:a.id,href:"#"+a.id,class:T(["lvl-"+a.level,{"is-active":e.activeHeading===a.id}]),onClick:ce(p=>e.scrollToHeading(a.id),["prevent"])},c(a.text),11,DB))),128))])])):f("v-if",!0)])):f("v-if",!0)],2)):f("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),sn(o,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):f("v-if",!0),e.fileFrame()?(l(),d("section",{key:3,class:T(["file-card file-card-media","view-"+e.type])},[n("header",AB,[n("div",TB,[n("button",{type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost card-files-btn",{"is-needed":e.sidebarHidden}]),title:"Show file tree",onClick:t[34]||(t[34]=a=>e.sidebarHidden?e.sidebarHidden=!1:e.sidebarCollapsed=!1)},[...t[85]||(t[85]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sidebar"})],-1),n("span",{class:"card-files-label"},"Files",-1)])],2),n("ol",PB,[n("li",OB,[n("a",{href:e.safeUrl("/r/"+e.repoId+"/"),title:e.repoId,textContent:c(/^[0-9a-f]{8}-[0-9a-f]{4}-/i.test(e.repoId||"")?"repository":e.repoId)},null,8,IB)]),(l(!0),d(L,null,ie(e.paths,(a,u)=>(l(),d("li",{class:"breadcrumb-item","aria-current":u===e.paths.length-1?"page":null},[(l(!0),d(L,null,ie(e.redactParts(a),(p,y)=>(l(),d(L,{key:y},[p.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+p.n},[n("i",null,c(p.n),1)],8,MB)):(l(),d(L,{key:1},[g(c(p.t),1)],64))],64))),128))],8,_B))),256))]),n("span",VB,[e.type== Line truncated
<span class="ln">10</span> log(<span class="s">&quot;epoch %d: %.3f&quot;</span>, epoch, loss)</pre></div>`,2)])])):(l(),d("div",MF,[...t[21]||(t[21]=[Se('<div class="fm-dash-head"><span>Project</span><span>Status</span><span>Views</span><span>Expires</span></div><div class="fm-dash-row"><span><b>DeepLearnUtils</b><i>paper-7f2a \xB7 ICSE 2027</i></span><span class="st is-ready">Ready</span><span>41</span><span>Mar 31, 2027</span></div><div class="fm-dash-row"><span><b>vision-bench#212</b><i>pull request \xB7 FSE 2027</i></span><span class="st is-ready">Ready</span><span>12</span><span>Never</span></div><div class="fm-dash-row"><span><b>graph-repair</b><i>gr-91ab</i></span><span class="st is-progress">Updating</span><span>5</span><span>Jan 5, 2027</span></div><div class="fm-dash-row is-muted"><span><b>JarSift</b><i>OOPSLA 2025</i></span><span class="st is-expired">Expired</span><span>72</span><span>Sep 28, 2026</span></div>',5)])]))],10,PF)])],8,RF)),[[ee,e.feature===i?.key]])),128))])]),f(" FAQ teaser "),t[24]||(t[24]=Se('<section class="paper-qa paper-qa-r3 paper-wrap" aria-labelledby="qa-heading"><div class="qa-head"><div><div class="paper-eyebrow">Before you sign in</div><h2 id="qa-heading">The questions that come up most.</h2></div><a class="paper-link-arrow" href="/faq">Read the full FAQ \u2192</a></div><div class="qa-grid"><div class="q"><a href="/faq#permissions">What access does GitHub sign-in require?</a><p> The GitHub App has read-only access to gists and the repositories you choose. Legacy OAuth uses broader permissions. Anonymous GitHub never writes to your repositories. </p></div><div class="q"><a href="/faq#formats">Which file formats are supported?</a><p> Source code with syntax highlighting, Markdown, Jupyter notebooks, PDFs, images, and GitHub Pages sites. Text files are anonymized; enabled images and PDFs are served unchanged. </p></div><div class="q"><a href="/faq#expiration">What happens when an anonymized repository expires?</a><p> You choose: the mirror is removed, or visitors are redirected to the original GitHub repository once the review is over. </p></div></div></section><section class="paper-cta paper-wrap" aria-labelledby="cta-heading"><div><h2 id="cta-heading">Ready for review?</h2><p>Create an anonymous mirror in a couple of minutes. Reviewers just open the link.</p></div><div class="paper-cta-actions"><a class="btn-hero" href="/signin" target="_self"><i class="fab fa-github" aria-hidden="true"></i> Sign in with GitHub</a><a class="paper-link-arrow" target="_self" href="https://anonymous.4open.science/r/840c8c57-3c32-451e-bf12-0e20be300389/">See an anonymized repository \u2192</a></div></section>',2)),_e(o,{name:"partials/footer.htm",state:e.viewState},null,8,["state"])])}var _F={class:"paper-empty"},VF={class:"paper-empty-inner"},qF={key:0,class:"paper-eyebrow"},$F={key:1,class:"paper-eyebrow"},LF={key:2,class:"paper-empty-title"},UF=["textContent"];function ep(e,t){return l(),d("div",_F,[n("div",VF,[e.error?f("v-if",!0):(l(),d("div",qF,"Working")),e.error?(l(),d("div",$F,"Error")):f("v-if",!0),e.error?f("v-if",!0):(l(),d("h1",LF,[...t[0]||(t[0]=[v(" Loading",-1),n("span",{class:"dot-anim"},"\u2026",-1)])])),e.error?(l(),d("h1",{key:3,class:"paper-empty-title",textContent:c(e.fmt.translate(e.error))},null,8,UF)):f("v-if",!0)])])}var FF={class:"container paper-page paper-settings"},BF={class:"paper-crumbs"},zF={class:"here"},HF={class:"paper-page-title"},jF={class:"paper-settings-body"},GF={class:"paper-settings-toc"},WF={href:"#conf-billing"},KF={class:"form needs-validation paper-settings-main",name:"conference",novalidate:""},YF={id:"conf-basics",class:"paper-settings-section"},XF={class:"form-group"},QF={class:"invalid-feedback"},JF={class:"invalid-feedback"},ZF={class:"form-group"},xF={class:"invalid-feedback"},e7={class:"form-group"},t7={class:"invalid-feedback"},n7={class:"invalid-feedback"},o7={id:"conf-window",class:"paper-settings-section"},s7={class:"form-grid-2"},i7={class:"form-group"},r7={class:"invalid-feedback"},a7={class:"invalid-feedback"},l7={class:"form-group"},d7={class:"invalid-feedback"},u7={class:"invalid-feedback"},c7={id:"conf-rendering",class:"paper-settings-section"},p7={class:"form-check"},f7={class:"form-check-input",type:"checkbox",id:"link",name:"link"},h7={class:"form-check"},m7={class:"form-check-input",type:"checkbox",id:"image",name:"image"},g7={class:"form-check"},v7={class:"form-check-input",type:"checkbox",id:"pdf",name:"pdf"},y7={class:"form-check"},b7={class:"form-check-input",type:"checkbox",id:"notebook",name:"notebook"},w7={id:"conf-features",class:"paper-settings-section"},k7={class:"form-check"},C7={class:"form-check-input",type:"checkbox",id:"update",name:"update"},E7={class:"form-check"},S7={class:"form-check-input",type:"checkbox",id:"page",name:"page"},N7={id:"conf-plan",class:"paper-settings-section"},R7={key:0,class:"paper-section-copy"},D7={class:"conference-tiers",role:"radiogroup","aria-label":"Review package size"}Line truncated
`).length))+" lines",1)):f("v-if",!0)]),O(n("button",{type:"button",class:"btn btn-sm btn-icon-only btn-ghost copy-path-btn","aria-label":e.pathCopied?"Path copied":"Copy file path",title:e.pathCopied?"Path copied":"Copy file path",onClick:t[2]||(t[2]=a=>e.copyPath())},[(l(),d("svg",w9,[n("use",{href:e.pathCopied?"#ui-icon-check":"#ui-icon-link"},null,8,k9)]))],8,b9),[[ee,e.filePath]])]),e.type!="html"&&typeof e.content=="string"?(l(),d("span",C9,[e.redactionCount()?(l(),d(L,{key:0},[n("span",{class:"meta-redact",title:e.redactionCount()+" redacted terms"},[v(c(e.redactionCount()),1),t[47]||(t[47]=n("span",{class:"meta-redact-word"}," redacted",-1))],8,E9),t[48]||(t[48]=n("span",{class:"sep"},"\xB7",-1))],64)):f("v-if",!0),v(c(e.languageName||"Text"),1),n("span",S9,[t[49]||(t[49]=n("span",{class:"sep"},"\xB7",-1)),v(c(e.content.length<1024?e.content.length+" B":(e.content.length/1024).toFixed(1)+" KB"),1)]),t[50]||(t[50]=n("span",{class:"sep"},"\xB7",-1)),v(c(e.fmt?.number(e.content.split(`
`).length))+" lines",1)])):f("v-if",!0),e.type=="html"?(l(),d("span",N9,[e.redactionCount()?(l(),d(L,{key:0},[n("span",{class:"meta-redact",title:e.redactionCount()+" redacted terms"},[v(c(e.redactionCount()),1),t[51]||(t[51]=n("span",{class:"meta-redact-word"}," redacted",-1))],8,R9),t[52]||(t[52]=n("span",{class:"sep"},"\xB7",-1))],64)):f("v-if",!0),t[54]||(t[54]=v("Markdown",-1)),e.fileSize(e.filePath)!=null?(l(),d(L,{key:1},[t[53]||(t[53]=n("span",{class:"sep"},"\xB7",-1)),v(c(e.formatSize(e.fileSize(e.filePath))),1)],64)):f("v-if",!0)])):f("v-if",!0),n("div",D9,[e.isCsv()?(l(),d("div",A9,[n("button",{type:"button",role:"radio",class:T(["seg-chip",{active:e.csvView==="table"}]),"aria-checked":e.csvView==="table",onClick:t[3]||(t[3]=a=>e.csvView="table")},"Table",10,T9),n("button",{type:"button",role:"radio",class:T(["seg-chip",{active:e.csvView==="raw"}]),"aria-checked":e.csvView==="raw",onClick:t[4]||(t[4]=a=>e.csvView="raw"),title:"Show the file as text with line numbers"},"Text",10,P9)])):f("v-if",!0),e.type!="html"&&e.symbols().length>1?(l(),d("div",O9,[n("button",{type:"button",class:T(["btn btn-sm btn-ghost btn-symbols",{"is-on":e.symbolsOpen}]),"aria-expanded":e.symbolsOpen?"true":"false","aria-haspopup":"true",title:"Symbols in this file",onClick:t[5]||(t[5]=a=>e.symbolsOpen=!e.symbolsOpen)},[...t[55]||(t[55]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-list"})],-1),n("span",{class:"btn-find-label"},"Symbols",-1)])],10,I9),e.symbolsOpen?(l(),d("div",M9,[n("div",_9,c(e.symbols().length)+" "+c(e.symbols().length===1?"symbol":"symbols"),1),(l(!0),d(L,null,ie(e.symbols(),a=>(l(),d("button",{type:"button",class:"symbols-item",role:"menuitem",key:a.line+a.name,onClick:u=>e.goToSymbol(a.line)},[n("span",{class:T(["symbols-kind","is-"+a.kind])},c(a.kind==="class"?"C":a.kind==="function"?"\u0192":"v"),3),n("span",q9,c(a.name),1),n("span",$9,c(a.line),1)],8,V9))),128))])):f("v-if",!0)])):f("v-if",!0),e.type=="html"?(l(),d("button",{key:2,type:"button",class:T(["btn btn-sm btn-ghost btn-icon-only btn-find btn-md-find",{"is-on":e.mdFindOpen}]),"aria-label":"Find on this page",title:"Find on this page ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[6]||(t[6]=a=>e.toggleMdFind())},[...t[56]||(t[56]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],10,L9)):f("v-if",!0),e.type!="html"&&!(e.isCsv()&&e.csvView==="table")?(l(),d("div",U9,[e.type!="html"?(l(),d("button",{key:0,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-goto","aria-label":"Go to line",title:"Go to line ("+(e.isMac?"\u2318":"Ctrl+")+"G)",onClick:t[7]||(t[7]=a=>e.gotoLine())},[...t[57]||(t[57]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1)])],8,F9)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:1,type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost btn-toggle",{"is-on":e.wrapLines}]),"aria-pressed":e.wrapLines?"true":"false","aria-label":"Wrap lines",title:"Wrap lines (Alt+Z)",onClick:t[8]||(t[8]=a=>e.toggleWrap())},[...t[58]||(t[58]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)])],10,B9)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:2,type:"button",class:"btn btn-sm btn-ghost btn-icon-only btn-find","aria-label":"Find in file",title:"Find in file ("+(e.isMac?"\u2318":"Ctrl+")+"F)",onClick:t[9]||(t[9]=a=>e.findInFile())},[...t[59]||(t[59]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1)])],8,z9)):f("v-if",!0)])):f("v-if",!0),n("div",H9,[n("a",{target:"_self",class:"tb-seg-btn",title:e.type=="html"?"Open the Markdown source":"Open the raw file",href:e.safeUrl(e.url)},"Raw",8,j9),typeof e.content=="string"?(l(),d("button",{key:0,type:"button",class:"tb-seg-btn tb-seg-icon","aria-label":e.contentCopied?"Copied":"Copy file contents",title:e.contentCopied?"Copied":"Copy file contents",onClick:t[10]||(t[10]=a=>e.copyContent())},[(l(),d("svg",W9,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,K9)]))],8,G9)):f("v-if",!0),n("a",{target:"_self",class:"tb-seg-btn tb-seg-icon","aria-label":"Download file",title:"Download file",href:e.safeUrl(e.url+"&download=true")},[...t[60]||(t[60]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1)])],8,Y9)]),typeof e.content=="string"?(l(),d("button",{key:4,type:"button",class:"btn btn-sm btn-icon-only btn-ghost tb-copy-m","aria-label":e.contentCopied?"Copied":"Copy file contents",onClick:t[11]||(t[11]=a=>e.copyContent())},[(l(),d("svg",Q9,[n("use",{href:e.contentCopied?"#ui-icon-check":"#project-icon-copy"},null,8,J9)]))],8,X9)):f("v-if",!0),e.type=="html"&&e.readmeToc().length>=3?(l(),d("div",Z9,[n("button",{type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost tb-toc-btn",{"is-on":e.tocOpen}]),"aria-label":"On this page",title:"On this page","aria-haspopup":"true","aria-expanded":e.tocOpen?"true":"false",onClick:t[12]||(t[12]=de(a=>{e.tocOpe Line truncated
`).length))+" lines",1)],64)):f("v-if",!0)])):f("v-if",!0),e.options?.publishedAt||e.options?.sourceCommitDate||e.options?.anonymizedAt||e.options?.lastUpdateDate?(l(),d("div",rB)):f("v-if",!0),e.type=="html"?(l(),d("button",{key:3,type:"button",role:"menuitem",onClick:t[16]||(t[16]=a=>e.toggleMdFind())},[...t[65]||(t[65]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),v("Find in file",-1)])])):f("v-if",!0),e.type=="html"?(l(),d("div",aB)):f("v-if",!0),e.type!="html"?(l(),d("button",{key:5,type:"button",role:"menuitem",onClick:t[17]||(t[17]=a=>e.findInFile())},[...t[66]||(t[66]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-search"})],-1),v("Find in file",-1)])])):f("v-if",!0),e.type!="html"?(l(),d("button",{key:6,type:"button",role:"menuitem",onClick:t[18]||(t[18]=a=>e.gotoLine())},[...t[67]||(t[67]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-goto"})],-1),v("Go to line",-1)])])):f("v-if",!0),e.type!="html"?(l(),d("button",{key:7,type:"button",role:"menuitemcheckbox","aria-checked":e.wrapLines?"true":"false",onClick:t[19]||(t[19]=a=>e.toggleWrap())},[t[68]||(t[68]=n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-wrap"})],-1)),t[69]||(t[69]=v("Wrap lines",-1)),e.wrapLines?(l(),d("span",dB,"\u2713")):f("v-if",!0)],8,lB)):f("v-if",!0),e.isCsv()?(l(),d("button",{key:8,type:"button",role:"menuitem",class:"tb-csv-view",onClick:t[20]||(t[20]=a=>{e.csvView=e.csvView==="table"?"raw":"table",e.moreOpen=!1})},[(l(),d("svg",uB,[n("use",{href:e.csvView==="table"?"#ui-icon-code":"#ui-icon-list"},null,8,cB)])),v(c(e.csvView==="table"?"Show as text":"Show as table"),1)])):f("v-if",!0),e.type!="html"?(l(),d("div",pB)):f("v-if",!0),e.type=="html"?(l(),d("a",{key:10,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[70]||(t[70]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),v("View raw",-1)])],8,fB)):f("v-if",!0),e.type!="html"?(l(),d("a",{key:11,role:"menuitem",target:"_self",href:e.safeUrl(e.url)},[...t[71]||(t[71]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-code"})],-1),v("View raw",-1)])],8,hB)):f("v-if",!0),n("a",{role:"menuitem",target:"_self",href:e.safeUrl(e.url+"&download=true")},[...t[72]||(t[72]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-download"})],-1),v("Download file",-1)])],8,mB),e.options?.hasWebsite?(l(),d("a",{key:12,role:"menuitem",target:"_self",href:e.safeUrl("/w/"+e.repoId+"/")},[...t[73]||(t[73]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-globe"})],-1),v("Open website",-1)])],8,gB)):f("v-if",!0),e.options?.isAdmin||e.options?.isOwner?(l(),d("a",{key:13,role:"menuitem",href:e.safeUrl("/anonymize/"+e.repoId)},[...t[74]||(t[74]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-edit"})],-1),v("Edit anonymization",-1)])],8,vB)):f("v-if",!0),e.options?.download?(l(),d("a",{key:14,role:"menuitem",target:"_self",href:e.safeUrl("/api/repo/"+e.repoId+"/zip")},[...t[75]||(t[75]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-archive"})],-1),v("Download ZIP",-1)])],8,yB)):f("v-if",!0),n("button",{type:"button",role:"menuitem",onClick:t[21]||(t[21]=a=>e.copyPath())},[...t[76]||(t[76]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-link"})],-1),v("Copy file path",-1)])]),t[77]||(t[77]=n("div",{class:"tb-menu-sep"},null,-1)),t[78]||(t[78]=n("a",{role:"menuitem",href:"/faq"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-help"})]),v("FAQ")],-1)),t[79]||(t[79]=n("a",{role:"menuitem",href:"https://github.com/tdurieux/anonymous_github/issues/new?template=issue_report.yml",target:"_blank",rel:"noopener"},[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-bug"})]),v("Report a bug")],-1))])):f("v-if",!0)])]),e.gotoOpen&&e.type!="html"?(l(),d("form",{key:2,class:"goto-pop",role:"dialog","aria-label":"Go to line",onSubmit:t[25]||(t[25]=de(a=>e.submitGoto(),["prevent"]))},[t[80]||(t[80]=n("label",{class:"goto-label",for:"goto-input"},"Go to line",-1)),O(n("input",{id:"goto-input",class:"goto-input",type:"text",inputmode:"numeric",autocomplete:"off",spellcheck:"false",placeholder:"1\u2013"+e.fmt?.number(typeof e.content=="string"?e.content.split(`
`).length:1),"aria-invalid":e.gotoError?"true":"false","onUpdate:modelValue":t[23]||(t[23]=a=>e.gotoValue=a),onKeydown:t[24]||(t[24]=ut(de(a=>e.closeGoto(),["prevent","stop"]),["esc"]))},null,40,bB),[[lt,e.gotoValue]]),n("span",{class:T(["goto-hint",{"is-error":e.gotoError}])},c(e.gotoError||"Line, or line:column"),3)],32)):f("v-if",!0)]),e.isCsv()&&e.csvView==="table"?(l(),d("div",{key:0,class:"csv-table-wrap",tabindex:"0",role:"region","aria-label":"Table view of "+(e.paths?.[e.paths.length-1]||"file")},[n("table",kB,[n("thead",null,[n("tr",null,[t[81]||(t[81]=n("th",{class:"csv-rownum",scope:"col"},[n("span",{class:"sr-only"},"Row")],-1)),(l(!0),d(L,null,ie(e.csvRows()[0]||[],(a,u)=>(l(),d("th",{scope:"col",key:u,class:T({"is-num":e.csvNumCol(u)})},[(l(!0),d(L,null,ie(e.redactParts(a),(p,y)=>(l(),d(L,{key:y},[p.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+p.n},[n("i",null,c(p.n),1)],8,CB)):(l(),d(L,{key:1},[v(c(p.t),1)],64))],64))),128))],2))),128))])]),n("tbody",null,[(l(!0),d(L,null,ie(e.csvRows().slice(1),(a,u)=>(l(),d("tr",{key:u},[n("td",EB,c(u+1),1),(l(!0),d(L,null,ie(a,(p,y)=>(l(),d("td",{key:y,class:T({"is-num":e.csvNumCol(y)})},[(l(!0),d(L,null,ie(e.redactParts(p),(h,b)=>(l(),d(L,{key:b},[h.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+h.n},[n("i",null,c(h.n),1)],8,SB)):(l(),d(L,{key:1},[v(c(h.t),1)],64))],64))),128))],2))),128))]))),128))])])],8,wB)):f("v-if",!0),e.type!="html"&&!(e.isCsv()&&e.csvView==="table")?O((l(),d("div",NB,null,512)),[[r,{content:e.content,options:e.aceOption}]]):f("v-if",!0),e.type=="html"&&e.mdFindOpen?(l(),d("div",RB,[n("input",{type:"search",class:"md-find-input",placeholder:"Find on this page","aria-label":"Find on this page",value:e.mdFindQuery,onInput:t[26]||(t[26]=a=>{e.mdFindQuery=a.target.value,e.runMdFind()}),onKeydown:[t[27]||(t[27]=ut(de(a=>a.shiftKey?e.stepMdFind(-1):e.stepMdFind(1),["prevent"]),["enter"])),t[28]||(t[28]=ut(de(a=>e.toggleMdFind(!1),["prevent"]),["esc"]))]},null,40,DB),n("span",AB,[n("button",{type:"button","aria-label":"Previous match",onClick:t[29]||(t[29]=a=>e.stepMdFind(-1)),disabled:!e.mdFindTotal},[...t[82]||(t[82]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-left"})],-1)])],8,TB),n("button",{type:"button","aria-label":"Next match",onClick:t[30]||(t[30]=a=>e.stepMdFind(1)),disabled:!e.mdFindTotal},[...t[83]||(t[83]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-chevron-right"})],-1)])],8,PB)]),n("span",OB,c(e.mdFindQuery?e.mdFindTotal?e.mdFindIndex+1+" of "+e.mdFindTotal:"No results":""),1),n("button",{type:"button",class:T(["md-find-opt",{"is-on":e.mdFindCase}]),"aria-pressed":e.mdFindCase?"true":"false",title:"Match case","aria-label":"Match case",onClick:t[31]||(t[31]=a=>{e.mdFindCase=!e.mdFindCase,e.runMdFind()})},"Aa",10,IB),n("button",{type:"button",class:"md-find-close","aria-label":"Close find",onClick:t[32]||(t[32]=a=>e.toggleMdFind(!1))},"\xD7")])):f("v-if",!0),e.type=="html"?(l(),d("div",MB,[n("div",{class:"file-content markdown-body",innerHTML:e.renderReadme(e.sanitize(e.content))},null,8,_B),e.readmeToc().length>=3?(l(),d("aside",VB,[t[84]||(t[84]=n("div",{class:"readme-toc-head"},"On this page",-1)),n("nav",qB,[n("a",{href:"#",class:T(["lvl-2 toc-top",{"is-active":!e.activeHeading}]),onClick:t[33]||(t[33]=de(a=>e.scrollToHeading(null),["prevent"]))},"Introduction",2),(l(!0),d(L,null,ie(e.readmeToc(),(a,u)=>(l(),d("a",{key:a.id,href:"#"+a.id,class:T(["lvl-"+a.level,{"is-active":e.activeHeading===a.id}]),onClick:de(p=>e.scrollToHeading(a.id),["prevent"])},c(a.text),11,$B))),128))])])):f("v-if",!0)])):f("v-if",!0)],2)):f("v-if",!0),e.type=="html-doc"&&!e.showSource&&e.content!=null?(l(),dn(o,{key:2,content:e.content,"base-url":e.fileBaseUrl,"allow-scripts":e.allowScripts},null,8,["content","base-url","allow-scripts"])):f("v-if",!0),e.fileFrame()?(l(),d("section",{key:3,class:T(["file-card file-card-media","view-"+e.type])},[n("header",LB,[n("div",UB,[n("button",{type:"button",class:T(["btn btn-sm btn-icon-only btn-ghost card-files-btn",{"is-needed":e.sidebarHidden}]),title:"Show file tree",onClick:t[34]||(t[34]=a=>e.sidebarHidden?e.sidebarHidden=!1:e.sidebarCollapsed=!1)},[...t[85]||(t[85]=[n("svg",{class:"ui-icon","aria-hidden":"true"},[n("use",{href:"#ui-icon-sidebar"})],-1),n("span",{class:"card-files-label"},"Files",-1)])],2),n("ol",FB,[n("li",BB,[n("a",{href:e.safeUrl("/r/"+e.repoId+"/"),title:e.repoId,textContent:c(/^[0-9a-f]{8}-[0-9a-f]{4}-/i.test(e.repoId||"")?"repository":e.repoId)},null,8,zB)]),(l(!0),d(L,null,ie(e.paths,(a,u)=>(l(),d("li",{class:"breadcrumb-item","aria-current":u===e.paths.length-1?"page":null},[(l(!0),d(L,null,ie(e.redactParts(a),(p,y)=>(l(),d(L,{key:y},[p.n?(l(),d("span",{key:0,class:"redact-slot",role:"img","aria-label":"Redacted term "+p.n},[n("i",null,c(p.n),1)],8,jB)):(l(),d(L,{key:1},[v(c(p.t),1)],64))],64))),128))],8,HB))),256))]),n("span",GB,[e.type== Line truncated
`).length+1)),placeholder:`Jane Smith
MIT CSAIL
jane.smith@example.org`},null,8,jH),[[i,{state:e.viewState,set:r=>{e.terms=r},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),n("details",GH,[t[25]||(t[25]=n("summary",null,"Regex & replacement syntax",-1)),n("p",null,[t[21]||(t[21]=g("Matches become ",-1)),n("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[22]||(t[22]=g(". Use ",-1)),t[23]||(t[23]=n("code",null,"term=>replacement",-1)),t[24]||(t[24]=g(" for a custom replacement. Regex is supported.",-1))])]),P(n("div",WH,"Terms are in an invalid format.",512),[[ee,e.defaultsForm?.terms?.errors?.format]])])]),n("section",KH,[t[35]||(t[35]=n("h2",null,"Reviewer display",-1)),n("div",null,[n("div",YH,[n("label",XH,[P(n("input",JH,null,512),[[i,{state:e.viewState,set:r=>{e.options.link=r},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=g("Keep links",-1))]),n("label",QH,[P(n("input",ZH,null,512),[[i,{state:e.viewState,set:r=>{e.options.image=r},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[28]||(t[28]=g("Display images",-1))]),n("label",xH,[P(n("input",ej,null,512),[[i,{state:e.viewState,set:r=>{e.options.pdf=r},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=g("Display PDFs",-1))]),n("label",tj,[P(n("input",nj,null,512),[[i,{state:e.viewState,set:r=>{e.options.notebook=r},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[30]||(t[30]=g("Display notebooks",-1))]),n("label",oj,[P(n("input",sj,null,512),[[i,{state:e.viewState,set:r=>{e.options.loc=r},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[31]||(t[31]=g("Show line counts",-1))]),n("label",ij,[P(n("input",rj,null,512),[[i,{state:e.viewState,set:r=>{e.options.page=r},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[32]||(t[32]=g("GitHub Pages",-1))])]),t[33]||(t[33]=n("p",{class:"settings-help"},"Images and PDFs are not anonymized.",-1)),t[34]||(t[34]=n("p",{class:"settings-help"},"GitHub Pages must use the anonymized branch.",-1))])]),n("section",aj,[t[38]||(t[38]=n("h2",null,"Source updates",-1)),n("div",null,[n("label",lj,[P(n("input",dj,null,512),[[i,{state:e.viewState,set:r=>{e.options.update=r},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[36]||(t[36]=g("Auto-update from GitHub",-1))]),t[37]||(t[37]=n("p",{class:"settings-help"},"Latest commit, at most once an hour.",-1))])]),n("section",uj,[t[40]||(t[40]=n("label",{class:"settings-label",for:"expiration"},"On expiration",-1)),n("div",null,[P((l(),d("select",cj,[...t[39]||(t[39]=[n("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),n("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[i,{state:e.viewState,set:r=>{e.options.expirationMode=r},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),n("p",pj,c(e.options.expirationMode==="redirect"?"Redirecting reveals the original repository. Choose the date per anonymization.":"Set the expiration date for each repository."),1)])]),n("footer",fj,[n("div",hj,[e.draftRestored?(l(),d("span",mj,"Your unsaved draft was restored.")):e.unsavedChanges?(l(),d("span",gj,"Unsaved changes"+c(e.draftSaved?" \xB7 Draft saved in this tab":""),1)):(l(),d("span",vj,c(e.message?"Defaults saved":"No unsaved changes"),1))]),e.draftRestored||e.unsavedChanges?(l(),d("button",{key:0,type:"button",class:"draft-discard",onClick:t[0]||(t[0]=r=>e.discardDraft())},"Discard changes")):f("v-if",!0),n("button",{id:"save",type:"submit",class:T(["btn btn-ink",{"is-saving":e.saving}]),disabled:e.saving||!(e.unsavedChanges||e.draftRestored)},c(e.saving?"Saving\u2026":"Save defaults"),11,yj),e.error?(l(),d("div",bj,c(e.error),1)):f("v-if",!0)])],32)),[[s,e.viewState]])],512),[[ee,e.settingsTab==="defaults"]]),P(n("section",{id:"settings-billing","aria-busy":e.billingLoading||e.billingBusy},[t[95]||(t[95]=n("p",{class:"settings-scope"},"Your plan and usage. Reviewer access is always free.",-1)),e.billingLoading?(l(),d("p",kj,"Loading billing\u2026")):f("v-if",!0),e.billingError?(l(),d("div",Cj,[g(c(e.billingError)+" ",1),n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=r=>e.loadBilling()),disabled:e.billingBusy},"Try again",8,Ej)])):f("v-if",!0),e.billingNotice?(l(),d("p",Sj,c(e.billingNotice),1)):f("v-if",!0),e.billingPending?(l(),d("div",Nj,[t[42]||(t[42]=n("strong",null,"Confirming your payment",-1)),t[43]||(t[43]=n("p",null,"Your allowance will update after confirmation. Please do not pay again.",-1)),n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[4]||(t[4]=r=>e.refreshBilling()),disabled:e.billingBusy},"Check payment status",8,Rj)])):f("v-if",!0),n("section",Dj,[n("div",Aj,[n("div",null,[t[44]||(t[44]=n("p",{class:"billing-eyebrow"},"Current plan",-1)),n("h2",Tj,c(e.profileAuthorGrant()?e.profileGrantName(e.profileAuthorGrant()):e.billing?.enabled?"Free":"Account allowance"),1),e.profileAuthorGrant()?(l(),d("p",Pj,[g(c(e.profileAuthorGrant().cancelAtPeriodEnd?"Renewal cancelled \xB7 access Line truncated
jane.smith@example.org`},null,8,ej),[[i,{state:e.viewState,set:r=>{e.terms=r},value:e.terms,form:"defaultsForm",options:{debounce:250}}]]),n("details",tj,[t[25]||(t[25]=n("summary",null,"Regex & replacement syntax",-1)),n("p",null,[t[21]||(t[21]=v("Matches become ",-1)),n("code",null,c(e.site_options?.ANONYMIZATION_MASK||"XXX")+"-[N]",1),t[22]||(t[22]=v(". Use ",-1)),t[23]||(t[23]=n("code",null,"term=>replacement",-1)),t[24]||(t[24]=v(" for a custom replacement. Regex is supported.",-1))])]),O(n("div",nj,"Terms are in an invalid format.",512),[[ee,e.defaultsForm?.terms?.errors?.format]])])]),n("section",oj,[t[35]||(t[35]=n("h2",null,"Reviewer display",-1)),n("div",null,[n("div",sj,[n("label",ij,[O(n("input",rj,null,512),[[i,{state:e.viewState,set:r=>{e.options.link=r},value:e.options?.link,form:"defaultsForm",options:{}}]]),t[27]||(t[27]=v("Keep links",-1))]),n("label",aj,[O(n("input",lj,null,512),[[i,{state:e.viewState,set:r=>{e.options.image=r},value:e.options?.image,form:"defaultsForm",options:{}}]]),t[28]||(t[28]=v("Display images",-1))]),n("label",dj,[O(n("input",uj,null,512),[[i,{state:e.viewState,set:r=>{e.options.pdf=r},value:e.options?.pdf,form:"defaultsForm",options:{}}]]),t[29]||(t[29]=v("Display PDFs",-1))]),n("label",cj,[O(n("input",pj,null,512),[[i,{state:e.viewState,set:r=>{e.options.notebook=r},value:e.options?.notebook,form:"defaultsForm",options:{}}]]),t[30]||(t[30]=v("Display notebooks",-1))]),n("label",fj,[O(n("input",hj,null,512),[[i,{state:e.viewState,set:r=>{e.options.loc=r},value:e.options?.loc,form:"defaultsForm",options:{}}]]),t[31]||(t[31]=v("Show line counts",-1))]),n("label",mj,[O(n("input",gj,null,512),[[i,{state:e.viewState,set:r=>{e.options.page=r},value:e.options?.page,form:"defaultsForm",options:{}}]]),t[32]||(t[32]=v("GitHub Pages",-1))])]),t[33]||(t[33]=n("p",{class:"settings-help"},"Images and PDFs are not anonymized.",-1)),t[34]||(t[34]=n("p",{class:"settings-help"},"GitHub Pages must use the anonymized branch.",-1))])]),n("section",vj,[t[38]||(t[38]=n("h2",null,"Source updates",-1)),n("div",null,[n("label",yj,[O(n("input",bj,null,512),[[i,{state:e.viewState,set:r=>{e.options.update=r},value:e.options?.update,form:"defaultsForm",options:{}}]]),t[36]||(t[36]=v("Auto-update from GitHub",-1))]),t[37]||(t[37]=n("p",{class:"settings-help"},"Latest commit, at most once an hour.",-1))])]),n("section",wj,[t[40]||(t[40]=n("label",{class:"settings-label",for:"expiration"},"On expiration",-1)),n("div",null,[O((l(),d("select",kj,[...t[39]||(t[39]=[n("option",{value:"redirect"},"Redirect visitors to the GitHub repository",-1),n("option",{value:"remove",selected:""},"Remove the anonymized repository",-1)])])),[[i,{state:e.viewState,set:r=>{e.options.expirationMode=r},value:e.options?.expirationMode,form:"defaultsForm",options:{}}]]),n("p",Cj,c(e.options.expirationMode==="redirect"?"Redirecting reveals the original repository. Choose the date per anonymization.":"Set the expiration date for each repository."),1)])]),n("footer",Ej,[n("div",Sj,[e.draftRestored?(l(),d("span",Nj,"Your unsaved draft was restored.")):e.unsavedChanges?(l(),d("span",Rj,"Unsaved changes"+c(e.draftSaved?" \xB7 Draft saved in this tab":""),1)):(l(),d("span",Dj,c(e.message?"Defaults saved":"No unsaved changes"),1))]),e.draftRestored||e.unsavedChanges?(l(),d("button",{key:0,type:"button",class:"draft-discard",onClick:t[0]||(t[0]=r=>e.discardDraft())},"Discard changes")):f("v-if",!0),n("button",{id:"save",type:"submit",class:T(["btn btn-ink",{"is-saving":e.saving}]),disabled:e.saving||!(e.unsavedChanges||e.draftRestored)},c(e.saving?"Saving\u2026":"Save defaults"),11,Aj),e.error?(l(),d("div",Tj,c(e.error),1)):f("v-if",!0)])],32)),[[s,e.viewState]])],512),[[ee,e.settingsTab==="defaults"]]),O(n("section",{id:"settings-billing","aria-busy":e.billingLoading||e.billingBusy},[t[95]||(t[95]=n("p",{class:"settings-scope"},"Your plan and usage. Reviewer access is always free.",-1)),e.billingLoading?(l(),d("p",Oj,"Loading billing\u2026")):f("v-if",!0),e.billingError?(l(),d("div",Ij,[v(c(e.billingError)+" ",1),n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[3]||(t[3]=r=>e.loadBilling()),disabled:e.billingBusy},"Try again",8,Mj)])):f("v-if",!0),e.billingNotice?(l(),d("p",_j,c(e.billingNotice),1)):f("v-if",!0),e.billingPending?(l(),d("div",Vj,[t[42]||(t[42]=n("strong",null,"Confirming your payment",-1)),t[43]||(t[43]=n("p",null,"Your allowance will update after confirmation. Please do not pay again.",-1)),n("button",{type:"button",class:"btn btn-outline-ink",onClick:t[4]||(t[4]=r=>e.refreshBilling()),disabled:e.billingBusy},"Check payment status",8,qj)])):f("v-if",!0),n("section",$j,[n("div",Lj,[n("div",null,[t[44]||(t[44]=n("p",{class:"billing-eyebrow"},"Current plan",-1)),n("h2",Uj,c(e.profileAuthorGrant()?e.profileGrantName(e.profileAuthorGrant()):e.billing?.enabled?"Free":"Account allowance"),1),e.profileAuthorGrant()?(l(),d("p",Fj,[v(c(e.profileAuthorGrant().cancelAtPeriodEnd?"Renewal cancelled \xB7 access Line truncated
/*! Bundled license information:
@vue/shared/dist/shared.esm-bundler.js: