Helpers (Run and Delete)

Here are some helper functions that you can use to flesh out your document. Run these once in your session then knit as normal. Delete this entire section when you are finished.

Code Result
RocheTemplates::build_navbar() Creates a helpful navigation bar if you are on BEE
RocheTemplates::build_bib() Writes a bibliography.bib file to the working directory with some common .tex citations. Make sure to uncomment bibliography: bibliography.bib in your YAML to access the file

1 Status: DEVELOPMENT

This document is currently under development and may contain both minor and major errors – Do NOT make any major decisions on the basis of the following results without first consulting the main author(s) to discuss potential errors and limitations.

2 Scratch Pad

This section is solely for the developer to jot down notes.

4 Objectives

The objectives for this study were as follows:

  1. Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada.
  2. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem.
  3. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

5 Data

# Load packages --------------------------------------

library(tidyverse)
library(RWDSverse)

# DB Connections -------------------------------------


# Data Loading ---------------------------------------


# Cleaning and Wrangling -----------------------------


# Analyses -------------------------------------------

5.1 Data Sources

Data come from…

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

5.2 Cohort Definition(s)

The study cohort was defined as follows…

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

6 Primary Analyses

6.1 P1

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

6.2 P2

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

6.3 P3

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

7 Secondary Analyses

7.1 S1

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

7.2 S2

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

7.3 S3

# CODE

Lorem ipsum dolor sit amet, ut hac ut vel, amet at et nunc morbi in in sapien potenti. Accumsan vel himenaeos sed vestibulum malesuada. Vel erat, ac ligula ad blandit ut in, mauris. Pharetra ultricies est non. Egestas class at adipiscing blandit aliquam in nam lorem. Per risus ut at vel sed id fames. Vitae in leo, a sed ornare, eget. Sociis sem viverra vitae porttitor et porta. Dictum sed mollis pellentesque ante vulputate dis amet.

8 Addendum

The following tables describe the author’s R environment at the time this document was created

8.1 Environment

RocheTemplates::show_environment(what = 'environment')
Platform information
Variable Value
Kernal Linux
OS version
version R version 3.6.3 (2020-02-29)
os Red Hat Enterprise Linux
system x86_64, linux-gnu
ui X11
language (EN)
collate en_US.UTF-8
ctype en_US.UTF-8
tz Europe/Zurich
date 2020-11-23

8.2 Packages

RocheTemplates::show_environment(what = 'packages')
Packages used
package loadedversion
assertthat 0.2.1
backports 1.1.6
base64enc 0.1-3
broom 0.5.6
callr 3.4.3
cellranger 1.1.0
cli 2.1.0
colorspace 1.4-1
crayon 1.3.4
DBI 1.1.0
dbplyr 1.4.3
desc 1.2.0
devtools 2.3.0
digest 0.6.27
dplyr 1.0.2
ellipsis 0.3.1
evaluate 0.14
fansi 0.4.1
forcats 0.5.0
fs 1.4.1
generics 0.1.0
ggplot2 3.3.0
glue 1.4.2
gtable 0.3.0
haven 2.3.1
highr 0.8
hms 0.5.3
htmltools 0.5.0
httr 1.4.2
jsonlite 1.7.1
knitr 1.28
lattice 0.20-41
lifecycle 0.2.0
lubridate 1.7.8
magrittr 1.5
memoise 1.1.0
modelr 0.1.6
munsell 0.5.0
nlme 3.1-148
pillar 1.4.6
pkgbuild 1.0.7
pkgconfig 2.0.3
pkgload 1.0.2
prettyunits 1.1.1
processx 3.4.2
ps 1.3.2
purrr 0.3.4
R6 2.5.0
Rcpp 1.0.5
readr 1.4.0
readxl 1.3.1
remotes 2.1.1
reprex 0.3.0
rlang 0.4.8
rmarkdown 2.1
RocheTemplates 1.2.6
rprojroot 1.3-2
rstudioapi 0.11
rvest 0.3.5
RWDSverse 0.5.1
scales 1.1.0
sessioninfo 1.1.1
stringi 1.5.3
stringr 1.4.0
testthat 2.3.2
tibble 3.0.4
tidyr 1.1.2
tidyselect 1.1.0
tidyverse 1.3.0
usethis 1.6.0
vctrs 0.3.4
withr 2.3.0
xfun 0.13
xml2 1.3.2
yaml 2.2.1
LS0tCnRpdGxlOiAiVGl0bGUiCmF1dGhvcjogIiIKZGF0ZTogIkxhc3QgY29tcGlsZWQgYHIgU3lzLkRhdGUoKWAgYnkgYHIgU3lzLmluZm8oKVtbJ3VzZXInXV1gIG9uIGByIFN5cy5pbmZvKClbJ25vZGVuYW1lJ11gIgpvdXRwdXQ6CiAgUm9jaGVUZW1wbGF0ZXM6OmJvbmVzX1NpbmdsZVNjcmlwdDogCiAgICB0b2NfZmxvYXQ6IFRSVUUKICAgIG51bWJlcl9zZWN0aW9uczogVFJVRSAKa25pdDogUm9jaGVUZW1wbGF0ZXM6OnJlbmRlcl8yX291dHB1dAojIGJpYmxpb2dyYXBoeTogYmlibGlvZ3JhcGh5LmJpYgotLS0KCmBgYHtyIHNldHVwLCBpbmNsdWRlID0gRkFMU0V9CiMgU2V0IGNodW5rIGRlZmF1bHQgb3B0aW9ucwoKa25pdHI6Om9wdHNfY2h1bmskc2V0KGV2YWwgPSBUUlVFLCAgICAgICAgICMgRXZhbHVhdGUgY29kZQogICAgICAgICAgICAgICAgICAgICAgZWNobyA9IFRSVUUsICAgICAgICAgIyBlY2hvIGNvZGU/CiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsICAgICAjIFNob3cgbWVzc2FnZXMKICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgICAgICMgU2hvdyB3YXJuaW5ncwogICAgICAgICAgICAgICAgICAgICAgZmlnLndpZHRoID0gOCwgICAgICAgIyBEZWZhdWx0IHBsb3Qgd2lkdGgKICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQgPSA2LCAgICAgICMgLi4uLiBoZWlnaHQKICAgICAgICAgICAgICAgICAgICAgIGRwaSA9IDIwMCwgICAgICAgICAgICMgUGxvdCByZXNvbHV0aW9uCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYWxpZ24gPSAibGVmdCIpICAjIEZpZ3VyZSBhbGlnbm1lbnQgICAgICAgIApgYGAKCiMgSGVscGVycyAoUnVuIGFuZCBEZWxldGUpIHstfQoKSGVyZSBhcmUgc29tZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgeW91IGNhbiB1c2UgdG8gZmxlc2ggb3V0IHlvdXIgZG9jdW1lbnQuIFJ1biB0aGVzZSBvbmNlIGluIHlvdXIgc2Vzc2lvbiB0aGVuIGtuaXQgYXMgbm9ybWFsLiBEZWxldGUgdGhpcyBlbnRpcmUgc2VjdGlvbiB3aGVuIHlvdSBhcmUgZmluaXNoZWQuCgp8Q29kZSB8IFJlc3VsdCB8Cnw6LS0tLS0tfDotLS0tLS18CnxgUm9jaGVUZW1wbGF0ZXM6OmJ1aWxkX25hdmJhcigpYHwgQ3JlYXRlcyBhIGhlbHBmdWwgbmF2aWdhdGlvbiBiYXIgaWYgeW91IGFyZSBvbiBCRUV8CnxgUm9jaGVUZW1wbGF0ZXM6OmJ1aWxkX2JpYigpYHwgV3JpdGVzIGEgYGJpYmxpb2dyYXBoeS5iaWJgIGZpbGUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5IHdpdGggc29tZSBjb21tb24gLnRleCBjaXRhdGlvbnMuIE1ha2Ugc3VyZSB0byB1bmNvbW1lbnQgYGJpYmxpb2dyYXBoeTogYmlibGlvZ3JhcGh5LmJpYmAgaW4geW91ciBZQU1MIHRvIGFjY2VzcyB0aGUgZmlsZXwKCiMgU3RhdHVzOiBERVZFTE9QTUVOVAoKPGZvbnQgY29sb3IgPSAncmVkJz5UaGlzIGRvY3VtZW50IGlzIGN1cnJlbnRseSB1bmRlciBkZXZlbG9wbWVudCBhbmQgbWF5IGNvbnRhaW4gYm90aCBtaW5vciBhbmQgbWFqb3IgZXJyb3JzIC0tIERvIE5PVCBtYWtlIGFueSBtYWpvciBkZWNpc2lvbnMgb24gdGhlIGJhc2lzIG9mIHRoZSBmb2xsb3dpbmcgcmVzdWx0cyB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgdGhlIG1haW4gYXV0aG9yKHMpIHRvIGRpc2N1c3MgcG90ZW50aWFsIGVycm9ycyBhbmQgbGltaXRhdGlvbnMuPC9mb250PgoKPCEtLSA8aDE+U3RhdHVzOiA8Zm9udCBjb2xvciA9ICdvcmFuZ2UnPlVuZGVyIFJldmlldzwvZm9udD48L2gxPiAtLT4KCjwhLS0gVGhpcyBkb2N1bWVudCBpcyBjdXJyZW50bHkgdW5kZXIgcmV2aWV3IGFuZCBtYXkgY29udGFpbiBib3RoIG1pbm9yIGFuZCBtYWpvciBlcnJvcnMuIERvICpOT1QqIG1ha2UgYW55IG1ham9yIGRlY2lzaW9ucyBvbiB0aGUgYmFzaXMgb2YgdGhpcyBkb2N1bWVudCB3aXRob3V0IGZpcnN0IGNvbnN1bHRpbmcgdGhlIG1haW4gYXV0aG9yKHMpIC0tPgoKPCEtLSA8aDE+U3RhdHVzOiA8Zm9udCBjb2xvciA9ICdncmVlbic+UUMgUGFzc2VkPC9mb250PjwvaDE+IC0tPgoKPCEtLSBUaGlzIGRvY3VtZW50IGhhcyBjb21wbGV0ZWQgYW4gaW50ZXJuYWwgcXVhbGl0eSByZXZpZXcgYW5kIGlzIGNvbnNpZGVyZWQgdXAtdG8tZGF0ZSBhbmQgY29tcGxldGUuIC0tPgoKIyBTY3JhdGNoIFBhZAoKKlRoaXMgc2VjdGlvbiBpcyBzb2xlbHkgZm9yIHRoZSBkZXZlbG9wZXIgdG8gam90IGRvd24gbm90ZXMuKgoKCgojIExpbmtzIGFuZCBHbG9zc2FyeQoKIyMgTGlua3MKCnxUaXRsZSB8IExpbmsgfCAKfDotLS0tLS0tfDotLS0tLS18CnxTQVAgfCBbd3d3Lmdvb2dsZS5jb21dKCl8IAp8R2l0SHViICB8IFt3d3cuZ29vZ2xlLmNvbV0oKSB8CnxKSVJBIHwgW3d3dy5nb29nbGUuY29tXSgpIHwgCnxnRHJpdmUgfCBbd3d3Lmdvb2dsZS5jb21dKCl8IAp8T3RoZXIgKGUuZy47IENvbmZsdWVuY2UpIHwgW3d3dy5nb29nbGUuY29tXSgpfCAKCiMjIEdsb3NzYXJ5Cgp8VGVybSB8IERlc2NyaXB0aW9uIHwgCnw6LS0tLS0tLXw6LS0tLS0tfAp8WFhYIHwgWFhYfCAKfFlZWSAgfFlZWXwKfFpaWiB8IFpaWnwKCgojIE9iamVjdGl2ZXMKClRoZSBvYmplY3RpdmVzIGZvciB0aGlzIHN0dWR5IHdlcmUgYXMgZm9sbG93czoKCjEuIExvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLgoyLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiAKMy4gUGVyIHJpc3VzIHV0IGF0IHZlbCBzZWQgaWQgZmFtZXMuIFZpdGFlIGluIGxlbywgYSBzZWQgb3JuYXJlLCBlZ2V0LiBTb2NpaXMgc2VtIHZpdmVycmEgdml0YWUgcG9ydHRpdG9yIGV0IHBvcnRhLiBEaWN0dW0gc2VkIG1vbGxpcyBwZWxsZW50ZXNxdWUgYW50ZSB2dWxwdXRhdGUgZGlzIGFtZXQuCgojIERhdGEKCmBgYHtyfQojIExvYWQgcGFja2FnZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KFJXRFN2ZXJzZSkKCiMgREIgQ29ubmVjdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMgRGF0YSBMb2FkaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMgQ2xlYW5pbmcgYW5kIFdyYW5nbGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCiMgQW5hbHlzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCmBgYAoKIyMgRGF0YSBTb3VyY2VzCgpEYXRhIGNvbWUgZnJvbS4uLiAKCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiBQZXIgcmlzdXMgdXQgYXQgdmVsIHNlZCBpZCBmYW1lcy4gVml0YWUgaW4gbGVvLCBhIHNlZCBvcm5hcmUsIGVnZXQuIFNvY2lpcyBzZW0gdml2ZXJyYSB2aXRhZSBwb3J0dGl0b3IgZXQgcG9ydGEuIERpY3R1bSBzZWQgbW9sbGlzIHBlbGxlbnRlc3F1ZSBhbnRlIHZ1bHB1dGF0ZSBkaXMgYW1ldC4KCiMjIENvaG9ydCBEZWZpbml0aW9uKHMpCgpUaGUgc3R1ZHkgY29ob3J0IHdhcyBkZWZpbmVkIGFzIGZvbGxvd3MuLi4KCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiBQZXIgcmlzdXMgdXQgYXQgdmVsIHNlZCBpZCBmYW1lcy4gVml0YWUgaW4gbGVvLCBhIHNlZCBvcm5hcmUsIGVnZXQuIFNvY2lpcyBzZW0gdml2ZXJyYSB2aXRhZSBwb3J0dGl0b3IgZXQgcG9ydGEuIERpY3R1bSBzZWQgbW9sbGlzIHBlbGxlbnRlc3F1ZSBhbnRlIHZ1bHB1dGF0ZSBkaXMgYW1ldC4KCiMgUHJpbWFyeSBBbmFseXNlcwoKIyMgUDEKCmBgYHtyIFAxfQojIENPREUKYGBgCgoKTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIHV0IGhhYyB1dCB2ZWwsIGFtZXQgYXQgZXQgbnVuYyBtb3JiaSBpbiBpbiBzYXBpZW4gcG90ZW50aS4gQWNjdW1zYW4gdmVsIGhpbWVuYWVvcyBzZWQgdmVzdGlidWx1bSBtYWxlc3VhZGEuIFZlbCBlcmF0LCBhYyBsaWd1bGEgYWQgYmxhbmRpdCB1dCBpbiwgbWF1cmlzLiBQaGFyZXRyYSB1bHRyaWNpZXMgZXN0IG5vbi4gRWdlc3RhcyBjbGFzcyBhdCBhZGlwaXNjaW5nIGJsYW5kaXQgYWxpcXVhbSBpbiBuYW0gbG9yZW0uIFBlciByaXN1cyB1dCBhdCB2ZWwgc2VkIGlkIGZhbWVzLiBWaXRhZSBpbiBsZW8sIGEgc2VkIG9ybmFyZSwgZWdldC4gU29jaWlzIHNlbSB2aXZlcnJhIHZpdGFlIHBvcnR0aXRvciBldCBwb3J0YS4gRGljdHVtIHNlZCBtb2xsaXMgcGVsbGVudGVzcXVlIGFudGUgdnVscHV0YXRlIGRpcyBhbWV0LgoKIyMgUDIKCmBgYHtyIFAyfQojIENPREUKYGBgCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgdXQgaGFjIHV0IHZlbCwgYW1ldCBhdCBldCBudW5jIG1vcmJpIGluIGluIHNhcGllbiBwb3RlbnRpLiBBY2N1bXNhbiB2ZWwgaGltZW5hZW9zIHNlZCB2ZXN0aWJ1bHVtIG1hbGVzdWFkYS4gVmVsIGVyYXQsIGFjIGxpZ3VsYSBhZCBibGFuZGl0IHV0IGluLCBtYXVyaXMuIFBoYXJldHJhIHVsdHJpY2llcyBlc3Qgbm9uLiBFZ2VzdGFzIGNsYXNzIGF0IGFkaXBpc2NpbmcgYmxhbmRpdCBhbGlxdWFtIGluIG5hbSBsb3JlbS4gUGVyIHJpc3VzIHV0IGF0IHZlbCBzZWQgaWQgZmFtZXMuIFZpdGFlIGluIGxlbywgYSBzZWQgb3JuYXJlLCBlZ2V0LiBTb2NpaXMgc2VtIHZpdmVycmEgdml0YWUgcG9ydHRpdG9yIGV0IHBvcnRhLiBEaWN0dW0gc2VkIG1vbGxpcyBwZWxsZW50ZXNxdWUgYW50ZSB2dWxwdXRhdGUgZGlzIGFtZXQuCgojIyBQMwoKYGBge3IgUDN9CiMgQ09ERQpgYGAKCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiBQZXIgcmlzdXMgdXQgYXQgdmVsIHNlZCBpZCBmYW1lcy4gVml0YWUgaW4gbGVvLCBhIHNlZCBvcm5hcmUsIGVnZXQuIFNvY2lpcyBzZW0gdml2ZXJyYSB2aXRhZSBwb3J0dGl0b3IgZXQgcG9ydGEuIERpY3R1bSBzZWQgbW9sbGlzIHBlbGxlbnRlc3F1ZSBhbnRlIHZ1bHB1dGF0ZSBkaXMgYW1ldC4KCiMgU2Vjb25kYXJ5IEFuYWx5c2VzCgoKIyMgUzEKCmBgYHtyIFMxX2FiY30KIyBDT0RFCmBgYAoKCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiBQZXIgcmlzdXMgdXQgYXQgdmVsIHNlZCBpZCBmYW1lcy4gVml0YWUgaW4gbGVvLCBhIHNlZCBvcm5hcmUsIGVnZXQuIFNvY2lpcyBzZW0gdml2ZXJyYSB2aXRhZSBwb3J0dGl0b3IgZXQgcG9ydGEuIERpY3R1bSBzZWQgbW9sbGlzIHBlbGxlbnRlc3F1ZSBhbnRlIHZ1bHB1dGF0ZSBkaXMgYW1ldC4KCiMjIFMyCgpgYGB7ciBTMl9hYmN9CiMgQ09ERQpgYGAKCkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCB1dCBoYWMgdXQgdmVsLCBhbWV0IGF0IGV0IG51bmMgbW9yYmkgaW4gaW4gc2FwaWVuIHBvdGVudGkuIEFjY3Vtc2FuIHZlbCBoaW1lbmFlb3Mgc2VkIHZlc3RpYnVsdW0gbWFsZXN1YWRhLiBWZWwgZXJhdCwgYWMgbGlndWxhIGFkIGJsYW5kaXQgdXQgaW4sIG1hdXJpcy4gUGhhcmV0cmEgdWx0cmljaWVzIGVzdCBub24uIEVnZXN0YXMgY2xhc3MgYXQgYWRpcGlzY2luZyBibGFuZGl0IGFsaXF1YW0gaW4gbmFtIGxvcmVtLiBQZXIgcmlzdXMgdXQgYXQgdmVsIHNlZCBpZCBmYW1lcy4gVml0YWUgaW4gbGVvLCBhIHNlZCBvcm5hcmUsIGVnZXQuIFNvY2lpcyBzZW0gdml2ZXJyYSB2aXRhZSBwb3J0dGl0b3IgZXQgcG9ydGEuIERpY3R1bSBzZWQgbW9sbGlzIHBlbGxlbnRlc3F1ZSBhbnRlIHZ1bHB1dGF0ZSBkaXMgYW1ldC4KCiMjIFMzCgpgYGB7ciBTM19hYmN9CiMgQ09ERQpgYGAKCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgdXQgaGFjIHV0IHZlbCwgYW1ldCBhdCBldCBudW5jIG1vcmJpIGluIGluIHNhcGllbiBwb3RlbnRpLiBBY2N1bXNhbiB2ZWwgaGltZW5hZW9zIHNlZCB2ZXN0aWJ1bHVtIG1hbGVzdWFkYS4gVmVsIGVyYXQsIGFjIGxpZ3VsYSBhZCBibGFuZGl0IHV0IGluLCBtYXVyaXMuIFBoYXJldHJhIHVsdHJpY2llcyBlc3Qgbm9uLiBFZ2VzdGFzIGNsYXNzIGF0IGFkaXBpc2NpbmcgYmxhbmRpdCBhbGlxdWFtIGluIG5hbSBsb3JlbS4gUGVyIHJpc3VzIHV0IGF0IHZlbCBzZWQgaWQgZmFtZXMuIFZpdGFlIGluIGxlbywgYSBzZWQgb3JuYXJlLCBlZ2V0LiBTb2NpaXMgc2VtIHZpdmVycmEgdml0YWUgcG9ydHRpdG9yIGV0IHBvcnRhLiBEaWN0dW0gc2VkIG1vbGxpcyBwZWxsZW50ZXNxdWUgYW50ZSB2dWxwdXRhdGUgZGlzIGFtZXQuCgoKIyBBZGRlbmR1bSB7LnRhYnNldH0KClRoZSBmb2xsb3dpbmcgdGFibGVzIGRlc2NyaWJlIHRoZSBhdXRob3IncyBSIGVudmlyb25tZW50IGF0IHRoZSB0aW1lIHRoaXMgZG9jdW1lbnQgd2FzIGNyZWF0ZWQKCiMjIEVudmlyb25tZW50CgpgYGB7ciwgcmVzdWx0cyA9ICdhc2lzJ30KUm9jaGVUZW1wbGF0ZXM6OnNob3dfZW52aXJvbm1lbnQod2hhdCA9ICdlbnZpcm9ubWVudCcpCmBgYAoKIyMgUGFja2FnZXMKCmBgYHtyLCByZXN1bHRzID0gJ2FzaXMnfQpSb2NoZVRlbXBsYXRlczo6c2hvd19lbnZpcm9ubWVudCh3aGF0ID0gJ3BhY2thZ2VzJykKYGBgCgo=