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.
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 |
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.
Scratch Pad
This section is solely for the developer to jot down notes.
Objectives
The objectives for this study were 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.
Data
# Load packages --------------------------------------
library(tidyverse)
library(RWDSverse)
# DB Connections -------------------------------------
# Data Loading ---------------------------------------
# Cleaning and Wrangling -----------------------------
# Analyses -------------------------------------------
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.
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.
Primary Analyses
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.
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.
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.
Secondary Analyses
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.
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.
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.
Addendum
The following tables describe the author’s R environment at the time this document was created
Environment
RocheTemplates::show_environment(what = 'environment')
Platform information
| 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 |
Packages
RocheTemplates::show_environment(what = 'packages')
Packages used
| 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=