• Introducing the Test-Specific Biological Markers and the Rhesus Indian-Derived Macaque
    • Presenting Data Visualization and Regression Models
    • Creatinine, Fadiga
    • Lactic Dehydrogenase, Nowicki
    • Glucose, Sciscent
  • Conclusion
  • Works Referenced
library(tidyverse)
library(openintro)
library(car)
pad<-read.csv("pad-CVD-short2.csv")
head(pad)
##   X  subject  birthdate  deathdate age_at_death                       species
## 1 1 Cf-Rh-30 1971-03-03 1991-03-18        20.04 Rhesus Indian-derived macaque
## 2 2 Cf-Rh-34 1971-05-25 2004-02-25        32.75 Rhesus Indian-derived macaque
## 3 3 Cf-Rh-41 1973-04-07 1996-06-28        23.22 Rhesus Indian-derived macaque
## 4 4  Il-Rh-1 1980-06-01                      NA Rhesus Indian-derived macaque
## 5 5  Il-Rh-2 1983-08-04                      NA Rhesus Indian-derived macaque
## 6 6  Il-Rh-3 1982-06-01                      NA Rhesus Indian-derived macaque
##      sex social_environment housing diet measurements age BodyWeight Creatinine
## 1 Female             Social Outside Chow            1  18         NA        0.9
## 2   Male              Mixed  Inside Chow            1  24         NA        1.1
## 3 Female              Mixed  Inside Chow            1  20         NA        1.1
## 4 Female             Social  Inside Chow            2  23        5.2        0.5
## 5 Female             Social  Inside Chow            5  20        9.5        0.9
## 6 Female         Individual  Inside Chow            2  21         NA        0.6
##   Glucose LacticDehydrogenase
## 1      52                  NA
## 2      72                  NA
## 3      57                  NA
## 4      44                  NA
## 5      85                  NA
## 6      65                  NA

Introducing the Test-Specific Biological Markers and the Rhesus Indian-Derived Macaque

Are there associations between sex and age and biological markers associated with Cardiovascular Disease (CVD)? Following a decrease of 9.8 percent from 2010-2019, the United States saw heart disease related deaths in humans increase by 4.1 percent in 2020. Variables including age, sex, and ethnicity groups were all included in the evaluation, and overall, the increase in 2020 is statistically significant. There were approximately five years of progress lost countrywide, with the percentage being even higher for minority groups (AHA, 2022).

For the purposes of this project, our variables of focus are sex and age, and their effect on heart disease or risk thereof. According to CME: Your SA Journal of CPD, heart disease accounts for a third of all female deaths worldwide, although the common perception is that it occurs primarily in males. According to the journal, both men and women are at equal risk of developing heart disease by age 60 (Bateman, 2012). However, risk is evaluated on a case by case basis, pending predispositions to higher or lower percentages of biomarkers associated with heart disease and possible sex or age related levels of each biomarker.

Using a random sample from the Primate Aging Database, we will be evaluating levels of these biomarkers based on sex and age in Rhesus Indian Derived Macaques. It is important to acknowledge that the genome of the Rhesus species has been decoded by scientists and has revealed 93 percent similarity between chimpanzees and humans. If there are any statistically significant findings from our hypothesis testing, there is a reasonable possibility that they would be applicable to humans (Arbanas, 2007). The biomarkers we will be researching in the Rhesus Indian-Derived Macaque are creatinine, lactic dehydrogenase, and glucose as they are significant biomarkers of heart disease development in humans, and therefore possible biomarkers in the study population.

The first biomarker we will be testing is creatinine. Creatinine is a chemical waste product of Creatine. Creatine is a chemical made by the body and is used to supply energy mainly to the muscles. An increase in serum creatinine, also termed worsening renal function, commonly occurs in patients with heart failure, especially during acute heart failure episodes (Damman, 2020). Though increased levels of creatinine is not a direct cause of heart failure, there appears to be a correlation.

The second biomarker we will be testing is Lactic Dehydrogenase (LD). LD is an enzyme that plays an integral role in the anaerobic metabolic pathway, and is often used to diagnose myocardial infarction, more commonly known as a heart attack. According to a retrospective, cross-sectional and observational study based on data collected by the Health Management Center of the First Affiliated Hospital of Nanjing Medical University, half of the sample population with high levels of LD showed a significantly increased risk of CVD based on the Framingham Risk Prediction Model (Zhu, Wenfang, et. al, 2022).

The third biomarker we will be testing is glucose. The development of CVD has a myriad of risk factors, however there has been shown to be a strong link between diabetes and CVD in particular (Poznyak, 2022). Diabetes is a disorder in which the body does not produce enough insulin and inadvertently elevates blood glucose levels. High blood glucose levels can have detrimental effects such as damaging blood vessels and nerves in turn leading to higher risk of developing CVD. The PAD database has a significant amount of data on glucose level averages in the species we are measuring for both sexes.

We will be running a regression model for each of these three biomarkers in Rhesus Indian-Derived Macaques to answer three key questions regarding the species: Are sex and age reliable predictors of Creatinine levels? Are sex and age reliable predictors of Lactic Dehydrogenase levels? Are sex and age reliable predictors of Glucose levels?

Presenting Data Visualization and Regression Models

Creatinine, Fadiga

padfem<-filter(pad,sex=="Female")
padmale<-filter(pad,sex=="Male")
sum(!is.na(padmale$Creatinine))
## [1] 176
sum(!is.na(padfem$Creatinine))
## [1] 318
summary(padfem$Creatinine,na.rm=TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##  0.3750  0.7000  0.8000  0.8268  0.9000  2.4000      75
summary(padmale$Creatinine,na.rm=TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   0.400   0.900   1.000   1.001   1.116   1.600      66
sd(padfem$Creatinine,na.rm=TRUE)
## [1] 0.2181239
var(padfem$Creatinine,na.rm=TRUE)
## [1] 0.04757805
sd(padmale$Creatinine,na.rm=TRUE)
## [1] 0.2036863
var(padmale$Creatinine,na.rm=TRUE)
## [1] 0.0414881

Are sex and age reliable predictors of creatinine levels? The null hypothesis that was made with Creatinine in mind, is sex and age are not reliable predictors in Creatinine levels in Rhesus Indian-Derived Macaques.The alternate hypothesis is sex and age are reliable predictors of Creatinine levels in Rhesus Indian-Derived Macaques.The sample size for males with recorded Creatinine levels is 176 compared to the overall data size of 242.Their mean Creatinine levels were 1.00 mg/dL and also had a median of 1.00 mg/dL. The measure of dispersion was a standard deviation of 0.20 mg/dL and a variance of 0.04.The female population sample size was 318 compared to the overall data size of 393. Their mean Creatinine levels were 0.83 mg/dL and the median was 0.80 mg/dL.The measure of dispersion was a standard deviation of 0.22 mg/dL and a variance of 0.05.

Assumptions

Observations

The first assumption that is reviewed is Independence of observations. The variable age and sex are independent of each other, and as a result meets the assumption.

The second assumption is a linear relationship between x and y. The data meets that assumption.

ggplot(padfem,aes(x=age,y=Creatinine))+
  labs(title="Sex and Age compared to Creatinine levels in females")+
  geom_point(col="yellow2",size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 75 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 75 rows containing missing values (`geom_point()`).

ggplot(padmale,aes(x=age,y=Creatinine))+
   labs(title="Sex and Age compared to Creatinine levels in males")+
  geom_point(color="red3",size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 66 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 66 rows containing missing values (`geom_point()`).

ggplot(pad,aes(x=age,y=Creatinine,col=sex))+
  labs(title="Sex and Age compared to Creatinine levels")+
  geom_point(size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 141 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 141 rows containing missing values (`geom_point()`).

reg1<-lm(Creatinine~sex+age,data=pad)

Normality of Residuals

The assumption is met for normality of residuals.

qqPlot(reg1)

## [1] 563 601

Homoscedasticity

It violates the assumption.

plot(reg1,1)

Test

summary(reg1)
## 
## Call:
## lm(formula = Creatinine ~ sex + age, data = pad)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.59099 -0.12725 -0.02351  0.09781  1.57081 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  0.8357564  0.0215027  38.867   <2e-16 ***
## sexMale      0.1749396  0.0201525   8.681   <2e-16 ***
## age         -0.0005973  0.0011949  -0.500    0.617    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2133 on 491 degrees of freedom
##   (141 observations deleted due to missingness)
## Multiple R-squared:  0.1333, Adjusted R-squared:  0.1298 
## F-statistic: 37.77 on 2 and 491 DF,  p-value: 5.513e-16
reg1$coefficients
##   (Intercept)       sexMale           age 
##  0.8357563636  0.1749395817 -0.0005972506

Sex has a p value of <0.05. Age has a p value of >0.05. Given the confidence level of 0.05 I reject the original null hypothesis as it stated both age and sex as a reliable predictor of creatinine levels when only sex is proven to be correlated with Creatinine levels. The assumption for homoscedasticity was not met however. Holding all else equal,Male Rhesus Indian-Derived Macaques have creatinine levels that are 0.18 mg/dL higher than female Macaques. My testing of Creatinine levels has the possibility of informing research in risk levels of cardiovascular disease in humans by comparing the male Macaques levels of creatinine to the levels of human males. Studies have shown that these primates can be quite similar to humans, and since a higher level of creatinine is associated with cardiovascular disease in humans, the comparisons made in this hypothesis test may prove useful.

Lactic Dehydrogenase, Nowicki

sum(!is.na(padmale$LacticDehydrogenase))
## [1] 133
sum(!is.na(padfem$LacticDehydrogenase))
## [1] 245
summary(padfem$LacticDehydrogenase,na.rm=TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   136.0   218.0   283.5   333.5   387.0  1081.0     148
summary(padmale$LacticDehydrogenase,na.rm=TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   114.0   250.0   329.0   378.3   479.0   891.5     109
sd(padfem$LacticDehydrogenase,na.rm=TRUE)
## [1] 167.0755
var(padfem$LacticDehydrogenase,na.rm=TRUE)
## [1] 27914.22
sd(padmale$LacticDehydrogenase,na.rm=TRUE)
## [1] 180.0706
var(padmale$LacticDehydrogenase,na.rm=TRUE)
## [1] 32425.42

Are sex and age reliable predictors of Lactic Dehydrogenase levels in Rhesus Indian-Derived Macaques? The null hypothesis for this regression model asserts that there is no significant association between sex and age of the Rhesus Indian-Derived Macaque and levels of lactic dehydrogenase. By contrast, the alternate hypothesis states that there is a significant association between sex and age of the Rhesus Indian-Derived Macaque and levels of lactic dehydrogenase. In our random sample, there are 133 males with recorded levels of Lactic Dehydrogenase. They have a mean of 378.3 international units per liter (IU/L) and a median of 329 IU/L. The measures of dispersion provide a standard deviation of 180.07 IU/L and a variance of 32425.42. There are 245 females with recorded levels of Lactic Dehydrogenase in our random sample with a mean of 333.5 IU/L and a median of 283.5 IU/L. The measures of dispersion provide a standard deviation of 167.08 IU/L and a variance of 27914.22.

Assumptions

Observations

To perform linear regression, several assumptions had to be met. First, the variables had to be independent of each other. The variables age and sex are independent of each other so the data meets this assumption. Second, there had to be a linear relationship between sex and age, the independent variables, and LD levels, the dependent variable. The graphs below demonstrates this relationship.

ggplot(padfem,aes(x=age,y=LacticDehydrogenase))+
   labs(title="Sex and Age compared to Lactic Dehydrogenase levels in females")+
  geom_point(col="purple",size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 148 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 148 rows containing missing values (`geom_point()`).

ggplot(padmale,aes(x=age,y=LacticDehydrogenase))+
   labs(title="Sex and Age compared to Lactic Dehydrogenase levels in males")+
  geom_point(col="magenta",size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 109 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 109 rows containing missing values (`geom_point()`).

ggplot(pad,aes(x=age,y=LacticDehydrogenase,col=sex))+
   labs(title="Sex and Age compared to Lactic Dehydrogenase levels")+
  geom_point(size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 257 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 257 rows containing missing values (`geom_point()`).

reg2<-lm(LacticDehydrogenase~sex+age,data=pad)

Normality of residuals

The third assumption is a normality of residuals. The graph below demonstrates that the residuals are not normally distributed.

qqPlot(reg2)

## [1] 420 569

Homoscedasticity

The fitted plot also shows a violation of the fourth assumption of homoscedasticity. However, testing will still be carried out to assess any relationship between the dependent and independent variables.

plot(reg2,1)

Test

summary(reg2)
## 
## Call:
## lm(formula = LacticDehydrogenase ~ sex + age, data = pad)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -284.14 -118.82  -47.10   80.05  723.13 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  376.259     18.243  20.625  < 2e-16 ***
## sexMale       49.466     18.387   2.690  0.00746 ** 
## age           -3.065      1.050  -2.918  0.00373 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 170.1 on 375 degrees of freedom
##   (257 observations deleted due to missingness)
## Multiple R-squared:  0.0372, Adjusted R-squared:  0.03207 
## F-statistic: 7.245 on 2 and 375 DF,  p-value: 0.0008178
reg2$coefficients
## (Intercept)     sexMale         age 
##  376.259240   49.466064   -3.064789

Both age and sex have a P value of <0.05. Given a confidence interval of 0.05, the null hypothesis is rejected. Age and sex are possible reliable predictors of LD levels in Rhesus Indian-Derived Macaques, however the assumptions were not met for the linear regression model. The baseline category the test provided was Female. Given the baseline category and holding all else equal, male Rhesus Indian-Derived Macaques have LD levels of 49.66 IU/L higher than females. Holding all else equal, a decrease of 3 years of age is associated with an increase of 1 IU/L. Since LD is a recorded biomarker of CVD in humans and given the close DNA similarity of Rhesus Indian-Derived Macaques and humans, this may be somewhat informative for biomedical researchers comparing risk levels of Cardiovascular disease in human males and females of different ages.

Glucose, Sciscent

sum(!is.na(padmale$Glucose))
## [1] 182
sum(!is.na(padfem$Glucose))
## [1] 326
summary(padfem$Glucose, na.rm = TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   27.00   57.00   67.00   70.69   78.00  271.00      67
summary(padmale$Glucose, na.rm = TRUE)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   27.00   60.00   67.00   70.74   76.88  224.50      60
sd(padfem$Glucose, na.rm = TRUE)
## [1] 23.6434
var(padfem$Glucose, na.rm = TRUE)
## [1] 559.0104
sd(padmale$Glucose, na.rm = TRUE)
## [1] 20.16354
var(padmale$Glucose, na.rm = TRUE)
## [1] 406.5682

Are sex and age reliable predictors of Glucose levels in Rhesus Indian-Derived Macaques? To test our question, I will be utilizing a regression model that exemplifies the relationship between sex and age in regards to glucose levels.The null hypothesis asserts that there is no significant correlation between sex and age of the Rhesus Indian-Derived Macaques and levels of glucose. The alternate hypothesis asserts that there is a significant correlation between sex and age of the Rhesus Indian-Derived Macaques and levels of glucose. In our random sample, there are 182 male Rhesus Indian-Derived Macaques with a recorded mean of 70.74 milligrams per decilitre (mg/dL) and a median of 67.00 mg/dL. The measures of dispersion provide a standard deviation of 20.16354 mg/dL and a variance of 406.5682. On the other hand, there are 326 female Rhesus Indian-Derived Macaques with a recorded mean of 70.69 mg/dL and a median of 67.00 mg/dL. The measures of dispersion provide a standard deviation of 23. 6434 mg/dL and a variance of 559.0104.

Assumptions

Observations

To perform linear regression, several assumptions must be met. First, the variables we are testing have to be independent of each other. The variables age and sex are independent so the data meets this assumption. Second, there has to be a linear relationship between sex and age, the independent variables and glucose levels, the dependent variable. The graph below demonstrates this relationship.

ggplot(padfem, aes(x=age,y=Glucose))+
   labs(title="Sex and Age Compared to Glucose Levels in Females")+
  geom_point(size=3,alpha=0.8, color = 'lightblue')+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 67 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 67 rows containing missing values (`geom_point()`).

ggplot(padmale, aes(x=age,y=Glucose))+
   labs(title="Sex and Age Compared to Glucose Levels in Males")+
  geom_point(size=3,alpha=0.8, color = 'pink')+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 60 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 60 rows containing missing values (`geom_point()`).

ggplot(pad, aes(x=age,y=Glucose,col=sex))+
   labs(title="Sex and Age Compared to Glucose Levels")+
  geom_point(size=3,alpha=0.8)+
  geom_smooth(method="lm",lty="dashed")+
  theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## Warning: Removed 127 rows containing non-finite values (`stat_smooth()`).
## Warning: Removed 127 rows containing missing values (`geom_point()`).

reg3 <- lm(Glucose ~ age + sex, data = pad)

Normality of residuals

The third assumption is normality of residuals. The first graph below demonstrates that the residuals are somewhat normally distributed as the points do seem to be pretty close to the best fit line, however they curve off towards the end signifying that our data does have more extreme values than expected.

qqPlot(reg3)

## [1] 541 570

Homoscedasticity

The fourth assumption is homoscedasticity. The second graph demonstrates a violation of this assumption because as the x-value increases, the residuals become further apart. However, testing can still be done to assess any relationship between our dependent and independent variables.

plot(reg3, 1)

summary(reg3)
## 
## Call:
## lm(formula = Glucose ~ age + sex, data = pad)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -44.010 -12.477  -3.782   6.144 199.549 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 69.61450    2.25037  30.935   <2e-16 ***
## age          0.07345    0.12746   0.576    0.565    
## sexMale     -0.10510    2.09576  -0.050    0.960    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 22.48 on 505 degrees of freedom
##   (127 observations deleted due to missingness)
## Multiple R-squared:  0.000658,   Adjusted R-squared:  -0.0033 
## F-statistic: 0.1662 on 2 and 505 DF,  p-value: 0.8469
reg3$coefficients
## (Intercept)         age     sexMale 
## 69.61450058  0.07344584 -0.10510212

Both age and sex have a P value that is >0.05. Given a confidence interval of 0.05, my regression model fails to reject the null. From this regression model, age and sex do not seem to be reliable predictors of glucose levels in Rhesus Indian-Derived Macaques, however, keep in mind the assumption for homoscedasticity was not met and the normality of residuals assumptions was only partially met. The baseline category the test provided and compared to our other variables (age and glucose) was the categorical value ‘Female’ within the variable sex. Given the baseline category and holding all else equal, male Rhesus Indian-Derived Macaques have glucose levels of 0.11 less than female Rhesus Indian-Derived Macaques. Holding all else equal, an increase in 0.07 years of age is associated with an increase of 1 mg/dL. Glucose levels/blood sugar levels play a crucial role in identifying CVD in humans. This is because high blood sugar can damage blood vessels and nerves leading to serious and life-threatening heart problems. Blood sugar levels can help us indicate diabetes within patients and in turn help us prevent CVD from impacting their lives. Given the close DNA similarity of Rhesus Indian-Derived Macaques and humans, this may be somewhat informative for biomedical researchers comparing risk levels of cardiovascular disease in human males and females respectively. However, within Rhesus Indian Derived Macaques, sex and age do not seem to play a significant role in glucose levels meaning that we should look elsewhere and other biomarkers for possible solutions.

Conclusion

In response to climbing heart disease rates in the United States, we focused our hypothesis testing on the association between sex, age and biological markers in regards to cardiovascular disease. Forgoing the assumption of homoscedasticity, hypothesis testing revealed that sex of the Rhesus Indian-Derived Macaque was a reliable predictor of levels of Creatinine within the primate, and that age was not. Forgoing assumptions of normality of residuals and homoscedasticity, it also showed that age and sex are reliable predictors of levels of Lactic Dehydrogenase in the Rhesus species. Lastly, forgoing assumptions of normality of residuals and homoscedasticity, hypothesis testing revealed that sex and age were not reliable predictors of glucose levels in the Rhesus species. No regression models in this study included additional and relevant covariates such as height and weight.

Even though the Rhesus Indian-Derived Macaque and humans share approximately 93% similarity in DNA (Arbanas, 2007) it is unlikely that testing these biomarkers against sex and age of humans would result in any significant findings regarding risk levels of Cardiovascular Disease.

Works Referenced

“AHA: Heart Disease Death Rates in US Spiked in 2020.” Renal & Urology News, 18 Nov. 2022, p. NA. Gale Academic OneFile, link.gale.com/apps/doc/A726995188/AONE?u=bingul&sid=bookmark-AONE&xid=31c52573. Accessed 1 Apr. 2023.

Arbanas, Caroline. “Rhesus Monkey Genome Reveals DNA Similarities with Chimps and Humans - the Source - Washington University in St. Louis.” The Source, 9 Feb. 2021, source.wustl.edu/2007/04/rhesus-monkey-genome-reveals-dna-similarities-with-chimps-and-humans/.

Bateman, Chris. “SA women at significant risk of developing heart disease.” CME: Your SA Journal of CPD, vol. 30, no. 8, Aug. 2012, pp. 301+. Gale Academic OneFile, link.gale.com/apps/doc/A301872171/AONE?u=bingul&sid=bookmark-AONE&xid=fa88ebcd. Accessed 1 Apr. 2023.

Cox, Laura A et al. “Nonhuman Primates and Translational Research-Cardiovascular Disease.” ILAR journal vol. 58,2 (2017): 235-250. doi:10.1093/ilar/ilx025

Mullens, W., Damman, K., Testani, J.M., Martens, P., Mueller, C., Lassus, J., Tang, W.H.W., Skouri, H., Verbrugge, F.H., Orso, F., Hill, L., Ural, D., Lainscak, M., Rossignol, P., Metra, M., Mebazaa, A., Seferovic, P., Ruschitzka, F. and Coats, A. (2020), Evaluation of kidney function throughout the heart failure trajectory – a position statement from the Heart Failure Association of the European Society of Cardiology. Eur J Heart Fail, 22: 584-603. https://doi.org/10.1002/ejhf.1697

Poznyak, Anastasia V et al. “Effect of Glucose Levels on Cardiovascular Risk.” Cells vol. 11,19 3034. 28 Sep. 2022, doi:10.3390/cells11193034

Raubertas, R., Beech, J., Watson, W. et al. Decreased complexity of glucose dynamics in diabetes in rhesus monkeys. Sci Rep 9, 1438 (2019). https://doi.org/10.1038/s41598-018-36776-4

“Creatinine Blood Test.” Mount Sinai Health System, https://www.mountsinai.org/health-library/tests/creatinine-blood test#:~:text=Creatinine%20is%20a%20chemical%20waste,body%20entirely%20by%20the%20kidneys.

Zhu, Wenfang et al. “Serum Level of Lactate Dehydrogenase is Associated with Cardiovascular Disease Risk as Determined by the Framingham Risk Score and Arterial Stiffness in a Health-Examined Population in China.” International journal of general medicine vol. 15 11-17. 4 Jan. 2022, doi:10.2147/IJGM.S337517

LS0tCnRpdGxlOiAiQmlvbWFya2VycyBvZiBDYXJkaW92YXNjdWxhciBEaXNlYXNlIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyIKYXV0aG9yOiAiQW1pbmF0YSBGYWRpZ2EsIEJlY2sgTm93aWNraSwgQW5oIFNjaXNjZW50IgpkYXRlOiAiMiBNYXkgMjAyMyIKb3V0cHV0OiBvcGVuaW50cm86OmxhYl9yZXBvcnQKLS0tCgpgYGB7ciBsb2FkLXBhY2thZ2VzLCBtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShvcGVuaW50cm8pCmxpYnJhcnkoY2FyKQpgYGAKCmBgYHtyIGNvZGUtY2h1bmstbGFiZWx9CnBhZDwtcmVhZC5jc3YoInBhZC1DVkQtc2hvcnQyLmNzdiIpCmhlYWQocGFkKQpgYGAKCiMjIEludHJvZHVjaW5nIHRoZSBUZXN0LVNwZWNpZmljIEJpb2xvZ2ljYWwgTWFya2VycyBhbmQgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlCgpBcmUgdGhlcmUgYXNzb2NpYXRpb25zIGJldHdlZW4gc2V4IGFuZCBhZ2UgYW5kIGJpb2xvZ2ljYWwgbWFya2VycyBhc3NvY2lhdGVkIHdpdGggQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZSAoQ1ZEKT8gRm9sbG93aW5nIGEgZGVjcmVhc2Ugb2YgOS44IHBlcmNlbnQgZnJvbSAyMDEwLTIwMTksIHRoZSBVbml0ZWQgU3RhdGVzIHNhdyBoZWFydCBkaXNlYXNlIHJlbGF0ZWQgZGVhdGhzIGluIGh1bWFucyBpbmNyZWFzZSBieSA0LjEgcGVyY2VudCBpbiAyMDIwLiBWYXJpYWJsZXMgaW5jbHVkaW5nIGFnZSwgc2V4LCBhbmQgZXRobmljaXR5IGdyb3VwcyB3ZXJlIGFsbCBpbmNsdWRlZCBpbiB0aGUgZXZhbHVhdGlvbiwgYW5kIG92ZXJhbGwsIHRoZSBpbmNyZWFzZSBpbiAyMDIwIGlzIHN0YXRpc3RpY2FsbHkgc2lnbmlmaWNhbnQuIFRoZXJlIHdlcmUgYXBwcm94aW1hdGVseSBmaXZlIHllYXJzIG9mIHByb2dyZXNzIGxvc3QgY291bnRyeXdpZGUsIHdpdGggdGhlIHBlcmNlbnRhZ2UgYmVpbmcgZXZlbiBoaWdoZXIgZm9yIG1pbm9yaXR5IGdyb3VwcyAoQUhBLCAyMDIyKS4KCkZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBwcm9qZWN0LCBvdXIgdmFyaWFibGVzIG9mIGZvY3VzIGFyZSBzZXggYW5kIGFnZSwgYW5kIHRoZWlyIGVmZmVjdCBvbiBoZWFydCBkaXNlYXNlIG9yIHJpc2sgdGhlcmVvZi4gQWNjb3JkaW5nIHRvIENNRTogWW91ciBTQSBKb3VybmFsIG9mIENQRCwgaGVhcnQgZGlzZWFzZSBhY2NvdW50cyBmb3IgYSB0aGlyZCBvZiBhbGwgZmVtYWxlIGRlYXRocyB3b3JsZHdpZGUsIGFsdGhvdWdoIHRoZSBjb21tb24gcGVyY2VwdGlvbiBpcyB0aGF0IGl0IG9jY3VycyBwcmltYXJpbHkgaW4gbWFsZXMuIEFjY29yZGluZyB0byB0aGUgam91cm5hbCwgYm90aCBtZW4gYW5kIHdvbWVuIGFyZSBhdCBlcXVhbCByaXNrIG9mIGRldmVsb3BpbmcgaGVhcnQgZGlzZWFzZSBieSBhZ2UgNjAgKEJhdGVtYW4sIDIwMTIpLiBIb3dldmVyLCByaXNrIGlzIGV2YWx1YXRlZCBvbiBhIGNhc2UgYnkgY2FzZSBiYXNpcywgcGVuZGluZyBwcmVkaXNwb3NpdGlvbnMgdG8gaGlnaGVyIG9yIGxvd2VyIHBlcmNlbnRhZ2VzIG9mIGJpb21hcmtlcnMgYXNzb2NpYXRlZCB3aXRoIGhlYXJ0IGRpc2Vhc2UgYW5kIHBvc3NpYmxlIHNleCBvciBhZ2UgcmVsYXRlZCBsZXZlbHMgb2YgZWFjaCBiaW9tYXJrZXIuCgpVc2luZyBhIHJhbmRvbSBzYW1wbGUgZnJvbSB0aGUgUHJpbWF0ZSBBZ2luZyBEYXRhYmFzZSwgd2Ugd2lsbCBiZSBldmFsdWF0aW5nIGxldmVscyBvZiB0aGVzZSBiaW9tYXJrZXJzIGJhc2VkIG9uIHNleCBhbmQgYWdlIGluIFJoZXN1cyBJbmRpYW4gRGVyaXZlZCBNYWNhcXVlcy4gSXQgaXMgaW1wb3J0YW50IHRvIGFja25vd2xlZGdlIHRoYXQgdGhlIGdlbm9tZSBvZiB0aGUgUmhlc3VzIHNwZWNpZXMgaGFzIGJlZW4gZGVjb2RlZCBieSBzY2llbnRpc3RzIGFuZCBoYXMgcmV2ZWFsZWQgOTMgcGVyY2VudCBzaW1pbGFyaXR5IGJldHdlZW4gY2hpbXBhbnplZXMgYW5kIGh1bWFucy4gSWYgdGhlcmUgYXJlIGFueSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGZpbmRpbmdzIGZyb20gb3VyIGh5cG90aGVzaXMgdGVzdGluZywgdGhlcmUgaXMgYSByZWFzb25hYmxlIHBvc3NpYmlsaXR5IHRoYXQgdGhleSB3b3VsZCBiZSBhcHBsaWNhYmxlIHRvIGh1bWFucyAoQXJiYW5hcywgMjAwNykuIFRoZSBiaW9tYXJrZXJzIHdlIHdpbGwgYmUgcmVzZWFyY2hpbmcgaW4gdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlIGFyZSBjcmVhdGluaW5lLCBsYWN0aWMgZGVoeWRyb2dlbmFzZSwgYW5kIGdsdWNvc2UgYXMgdGhleSBhcmUgc2lnbmlmaWNhbnQgYmlvbWFya2VycyBvZiBoZWFydCBkaXNlYXNlIGRldmVsb3BtZW50IGluIGh1bWFucywgYW5kIHRoZXJlZm9yZSBwb3NzaWJsZSBiaW9tYXJrZXJzIGluIHRoZSBzdHVkeSBwb3B1bGF0aW9uLgoKVGhlIGZpcnN0IGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgY3JlYXRpbmluZS4gQ3JlYXRpbmluZSBpcyBhIGNoZW1pY2FsIHdhc3RlIHByb2R1Y3Qgb2YgQ3JlYXRpbmUuIENyZWF0aW5lIGlzIGEgY2hlbWljYWwgbWFkZSBieSB0aGUgYm9keSBhbmQgaXMgdXNlZCB0byBzdXBwbHkgZW5lcmd5IG1haW5seSB0byB0aGUgbXVzY2xlcy4gQW4gaW5jcmVhc2UgaW4gc2VydW0gY3JlYXRpbmluZSwgYWxzbyB0ZXJtZWQgd29yc2VuaW5nIHJlbmFsIGZ1bmN0aW9uLCBjb21tb25seSBvY2N1cnMgaW4gcGF0aWVudHMgd2l0aCBoZWFydCBmYWlsdXJlLCBlc3BlY2lhbGx5IGR1cmluZyBhY3V0ZSBoZWFydCBmYWlsdXJlIGVwaXNvZGVzIChEYW1tYW4sIDIwMjApLiBUaG91Z2ggaW5jcmVhc2VkIGxldmVscyBvZiBjcmVhdGluaW5lIGlzIG5vdCBhIGRpcmVjdCBjYXVzZSBvZiBoZWFydCBmYWlsdXJlLCB0aGVyZSBhcHBlYXJzIHRvIGJlIGEgY29ycmVsYXRpb24uCgpUaGUgc2Vjb25kIGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgTGFjdGljIERlaHlkcm9nZW5hc2UgKExEKS4gTEQgaXMgYW4gZW56eW1lIHRoYXQgcGxheXMgYW4gaW50ZWdyYWwgcm9sZSBpbiB0aGUgYW5hZXJvYmljIG1ldGFib2xpYyBwYXRod2F5LCBhbmQgaXMgb2Z0ZW4gdXNlZCB0byBkaWFnbm9zZSBteW9jYXJkaWFsIGluZmFyY3Rpb24sIG1vcmUgY29tbW9ubHkga25vd24gYXMgYSBoZWFydCBhdHRhY2suIEFjY29yZGluZyB0byBhIHJldHJvc3BlY3RpdmUsIGNyb3NzLXNlY3Rpb25hbCBhbmQgb2JzZXJ2YXRpb25hbCBzdHVkeSBiYXNlZCBvbiBkYXRhIGNvbGxlY3RlZCBieSB0aGUgSGVhbHRoIE1hbmFnZW1lbnQgQ2VudGVyIG9mIHRoZSBGaXJzdCBBZmZpbGlhdGVkIEhvc3BpdGFsIG9mIE5hbmppbmcgTWVkaWNhbCBVbml2ZXJzaXR5LCBoYWxmIG9mIHRoZSBzYW1wbGUgcG9wdWxhdGlvbiB3aXRoIGhpZ2ggbGV2ZWxzIG9mIExEIHNob3dlZCBhIHNpZ25pZmljYW50bHkgaW5jcmVhc2VkIHJpc2sgb2YgQ1ZEIGJhc2VkIG9uIHRoZSBGcmFtaW5naGFtIFJpc2sgUHJlZGljdGlvbiBNb2RlbCAoWmh1LCBXZW5mYW5nLCBldC4gYWwsIDIwMjIpLgoKVGhlIHRoaXJkIGJpb21hcmtlciB3ZSB3aWxsIGJlIHRlc3RpbmcgaXMgZ2x1Y29zZS4gVGhlIGRldmVsb3BtZW50IG9mIENWRCBoYXMgYSBteXJpYWQgb2YgcmlzayBmYWN0b3JzLCBob3dldmVyIHRoZXJlIGhhcyBiZWVuIHNob3duIHRvIGJlIGEgc3Ryb25nIGxpbmsgYmV0d2VlbiBkaWFiZXRlcyBhbmQgQ1ZEIGluIHBhcnRpY3VsYXIgKFBvem55YWssIDIwMjIpLiBEaWFiZXRlcyBpcyBhIGRpc29yZGVyIGluIHdoaWNoIHRoZSBib2R5IGRvZXMgbm90IHByb2R1Y2UgZW5vdWdoIGluc3VsaW4gYW5kIGluYWR2ZXJ0ZW50bHkgZWxldmF0ZXMgYmxvb2QgZ2x1Y29zZSBsZXZlbHMuIEhpZ2ggYmxvb2QgZ2x1Y29zZSBsZXZlbHMgY2FuIGhhdmUgZGV0cmltZW50YWwgZWZmZWN0cyBzdWNoIGFzIGRhbWFnaW5nIGJsb29kIHZlc3NlbHMgYW5kIG5lcnZlcyBpbiB0dXJuIGxlYWRpbmcgdG8gaGlnaGVyIHJpc2sgb2YgZGV2ZWxvcGluZyBDVkQuIFRoZSBQQUQgZGF0YWJhc2UgaGFzIGEgc2lnbmlmaWNhbnQgYW1vdW50IG9mIGRhdGEgb24gZ2x1Y29zZSBsZXZlbCBhdmVyYWdlcyBpbiB0aGUgc3BlY2llcyB3ZSBhcmUgbWVhc3VyaW5nIGZvciBib3RoIHNleGVzLgoKV2Ugd2lsbCBiZSBydW5uaW5nIGEgcmVncmVzc2lvbiBtb2RlbCBmb3IgZWFjaCBvZiB0aGVzZSB0aHJlZSBiaW9tYXJrZXJzIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyB0byBhbnN3ZXIgdGhyZWUga2V5IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIHNwZWNpZXM6IEFyZSBzZXggYW5kIGFnZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIENyZWF0aW5pbmUgbGV2ZWxzPyBBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBMYWN0aWMgRGVoeWRyb2dlbmFzZSBsZXZlbHM/IEFyZSBzZXggYW5kIGFnZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIEdsdWNvc2UgbGV2ZWxzPwoKIyMjIFByZXNlbnRpbmcgRGF0YSBWaXN1YWxpemF0aW9uIGFuZCBSZWdyZXNzaW9uIE1vZGVscwoKIyMjIENyZWF0aW5pbmUsIEZhZGlnYQoKYGBge3J9CnBhZGZlbTwtZmlsdGVyKHBhZCxzZXg9PSJGZW1hbGUiKQpwYWRtYWxlPC1maWx0ZXIocGFkLHNleD09Ik1hbGUiKQpzdW0oIWlzLm5hKHBhZG1hbGUkQ3JlYXRpbmluZSkpCnN1bSghaXMubmEocGFkZmVtJENyZWF0aW5pbmUpKQoKc3VtbWFyeShwYWRmZW0kQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQpzdW1tYXJ5KHBhZG1hbGUkQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQpzZChwYWRmZW0kQ3JlYXRpbmluZSxuYS5ybT1UUlVFKQp2YXIocGFkZmVtJENyZWF0aW5pbmUsbmEucm09VFJVRSkKc2QocGFkbWFsZSRDcmVhdGluaW5lLG5hLnJtPVRSVUUpCnZhcihwYWRtYWxlJENyZWF0aW5pbmUsbmEucm09VFJVRSkKYGBgCgpBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBjcmVhdGluaW5lIGxldmVscz8gVGhlIG51bGwgaHlwb3RoZXNpcyB0aGF0IHdhcyBtYWRlIHdpdGggQ3JlYXRpbmluZSBpbiBtaW5kLCBpcyBzZXggYW5kIGFnZSBhcmUgbm90IHJlbGlhYmxlIHByZWRpY3RvcnMgaW4gQ3JlYXRpbmluZSBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLlRoZSBhbHRlcm5hdGUgaHlwb3RoZXNpcyBpcyBzZXggYW5kIGFnZSBhcmUgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBDcmVhdGluaW5lIGxldmVscyBpbiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMuVGhlIHNhbXBsZSBzaXplIGZvciBtYWxlcyB3aXRoIHJlY29yZGVkIENyZWF0aW5pbmUgbGV2ZWxzIGlzIDE3NiBjb21wYXJlZCB0byB0aGUgb3ZlcmFsbCBkYXRhIHNpemUgb2YgMjQyLlRoZWlyIG1lYW4gQ3JlYXRpbmluZSBsZXZlbHMgd2VyZSAxLjAwIG1nL2RMIGFuZCBhbHNvIGhhZCBhIG1lZGlhbiBvZiAxLjAwIG1nL2RMLiBUaGUgbWVhc3VyZSBvZiBkaXNwZXJzaW9uIHdhcyBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAwLjIwIG1nL2RMIGFuZCBhIHZhcmlhbmNlIG9mIDAuMDQuVGhlIGZlbWFsZSBwb3B1bGF0aW9uIHNhbXBsZSBzaXplIHdhcyAzMTggY29tcGFyZWQgdG8gdGhlIG92ZXJhbGwgZGF0YSBzaXplIG9mIDM5My4gVGhlaXIgbWVhbiBDcmVhdGluaW5lIGxldmVscyB3ZXJlIDAuODMgbWcvZEwgYW5kIHRoZSBtZWRpYW4gd2FzIDAuODAgbWcvZEwuVGhlIG1lYXN1cmUgb2YgZGlzcGVyc2lvbiB3YXMgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMC4yMiBtZy9kTCBhbmQgYSB2YXJpYW5jZSBvZiAwLjA1LgoKIyMjIyBBc3N1bXB0aW9ucwoKIyMjIyBPYnNlcnZhdGlvbnMKClRoZSBmaXJzdCBhc3N1bXB0aW9uIHRoYXQgaXMgcmV2aWV3ZWQgaXMgSW5kZXBlbmRlbmNlIG9mIG9ic2VydmF0aW9ucy4gVGhlIHZhcmlhYmxlIGFnZSBhbmQgc2V4IGFyZSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCBhbmQgYXMgYSByZXN1bHQgbWVldHMgdGhlIGFzc3VtcHRpb24uCgpUaGUgc2Vjb25kIGFzc3VtcHRpb24gaXMgYSBsaW5lYXIgcmVsYXRpb25zaGlwIGJldHdlZW4geCBhbmQgeS4gVGhlIGRhdGEgbWVldHMgdGhhdCBhc3N1bXB0aW9uLgoKYGBge3J9CmdncGxvdChwYWRmZW0sYWVzKHg9YWdlLHk9Q3JlYXRpbmluZSkpKwogIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIGluIGZlbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0ieWVsbG93MiIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCgpgYGAKCmBgYHtyfQpnZ3Bsb3QocGFkbWFsZSxhZXMoeD1hZ2UseT1DcmVhdGluaW5lKSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIGluIG1hbGVzIikrCiAgZ2VvbV9wb2ludChjb2xvcj0icmVkMyIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCgpgYGAKCmBgYHtyfQpnZ3Bsb3QocGFkLGFlcyh4PWFnZSx5PUNyZWF0aW5pbmUsY29sPXNleCkpKwogIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIENyZWF0aW5pbmUgbGV2ZWxzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KcmVnMTwtbG0oQ3JlYXRpbmluZX5zZXgrYWdlLGRhdGE9cGFkKQpgYGAKCiMjIyMgTm9ybWFsaXR5IG9mIFJlc2lkdWFscwoKVGhlIGFzc3VtcHRpb24gaXMgbWV0IGZvciBub3JtYWxpdHkgb2YgcmVzaWR1YWxzLgoKYGBge3J9CnFxUGxvdChyZWcxKQpgYGAKCiMjIyMgSG9tb3NjZWRhc3RpY2l0eQoKSXQgdmlvbGF0ZXMgdGhlIGFzc3VtcHRpb24uCgpgYGB7cn0KcGxvdChyZWcxLDEpCmBgYAoKIyMjIyBUZXN0CgpgYGB7cn0Kc3VtbWFyeShyZWcxKQpyZWcxJGNvZWZmaWNpZW50cwpgYGAKClNleCBoYXMgYSBwIHZhbHVlIG9mIDwwLjA1LiBBZ2UgaGFzIGEgcCB2YWx1ZSBvZiA+MC4wNS4gR2l2ZW4gdGhlIGNvbmZpZGVuY2UgbGV2ZWwgb2YgMC4wNSBJIHJlamVjdCB0aGUgb3JpZ2luYWwgbnVsbCBoeXBvdGhlc2lzIGFzIGl0IHN0YXRlZCBib3RoIGFnZSBhbmQgc2V4IGFzIGEgcmVsaWFibGUgcHJlZGljdG9yIG9mIGNyZWF0aW5pbmUgbGV2ZWxzIHdoZW4gb25seSBzZXggaXMgcHJvdmVuIHRvIGJlIGNvcnJlbGF0ZWQgd2l0aCBDcmVhdGluaW5lIGxldmVscy4gVGhlIGFzc3VtcHRpb24gZm9yIGhvbW9zY2VkYXN0aWNpdHkgd2FzIG5vdCBtZXQgaG93ZXZlci4gSG9sZGluZyBhbGwgZWxzZSBlcXVhbCxNYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyBoYXZlIGNyZWF0aW5pbmUgbGV2ZWxzIHRoYXQgYXJlIDAuMTggbWcvZEwgaGlnaGVyIHRoYW4gZmVtYWxlIE1hY2FxdWVzLiBNeSB0ZXN0aW5nIG9mIENyZWF0aW5pbmUgbGV2ZWxzIGhhcyB0aGUgcG9zc2liaWxpdHkgb2YgaW5mb3JtaW5nIHJlc2VhcmNoIGluIHJpc2sgbGV2ZWxzIG9mIGNhcmRpb3Zhc2N1bGFyIGRpc2Vhc2UgaW4gaHVtYW5zIGJ5IGNvbXBhcmluZyB0aGUgbWFsZSBNYWNhcXVlcyBsZXZlbHMgb2YgY3JlYXRpbmluZSB0byB0aGUgbGV2ZWxzIG9mIGh1bWFuIG1hbGVzLiBTdHVkaWVzIGhhdmUgc2hvd24gdGhhdCB0aGVzZSBwcmltYXRlcyBjYW4gYmUgcXVpdGUgc2ltaWxhciB0byBodW1hbnMsIGFuZCBzaW5jZSBhIGhpZ2hlciBsZXZlbCBvZiBjcmVhdGluaW5lIGlzIGFzc29jaWF0ZWQgd2l0aCBjYXJkaW92YXNjdWxhciBkaXNlYXNlIGluIGh1bWFucywgdGhlIGNvbXBhcmlzb25zIG1hZGUgaW4gdGhpcyBoeXBvdGhlc2lzIHRlc3QgbWF5IHByb3ZlIHVzZWZ1bC4KCiMjIyBMYWN0aWMgRGVoeWRyb2dlbmFzZSwgTm93aWNraQoKYGBge3J9CnN1bSghaXMubmEocGFkbWFsZSRMYWN0aWNEZWh5ZHJvZ2VuYXNlKSkKc3VtKCFpcy5uYShwYWRmZW0kTGFjdGljRGVoeWRyb2dlbmFzZSkpCnN1bW1hcnkocGFkZmVtJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKc3VtbWFyeShwYWRtYWxlJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKc2QocGFkZmVtJExhY3RpY0RlaHlkcm9nZW5hc2UsbmEucm09VFJVRSkKdmFyKHBhZGZlbSRMYWN0aWNEZWh5ZHJvZ2VuYXNlLG5hLnJtPVRSVUUpCnNkKHBhZG1hbGUkTGFjdGljRGVoeWRyb2dlbmFzZSxuYS5ybT1UUlVFKQp2YXIocGFkbWFsZSRMYWN0aWNEZWh5ZHJvZ2VuYXNlLG5hLnJtPVRSVUUpCmBgYAoKQXJlIHNleCBhbmQgYWdlIHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgTGFjdGljIERlaHlkcm9nZW5hc2UgbGV2ZWxzIGluIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcz8gVGhlIG51bGwgaHlwb3RoZXNpcyBmb3IgdGhpcyByZWdyZXNzaW9uIG1vZGVsIGFzc2VydHMgdGhhdCB0aGVyZSBpcyBubyBzaWduaWZpY2FudCBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNleCBhbmQgYWdlIG9mIHRoZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZSBhbmQgbGV2ZWxzIG9mIGxhY3RpYyBkZWh5ZHJvZ2VuYXNlLiBCeSBjb250cmFzdCwgdGhlIGFsdGVybmF0ZSBoeXBvdGhlc2lzIHN0YXRlcyB0aGF0IHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgYXNzb2NpYXRpb24gYmV0d2VlbiBzZXggYW5kIGFnZSBvZiB0aGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWUgYW5kIGxldmVscyBvZiBsYWN0aWMgZGVoeWRyb2dlbmFzZS4gSW4gb3VyIHJhbmRvbSBzYW1wbGUsIHRoZXJlIGFyZSAxMzMgbWFsZXMgd2l0aCByZWNvcmRlZCBsZXZlbHMgb2YgTGFjdGljIERlaHlkcm9nZW5hc2UuIFRoZXkgaGF2ZSBhIG1lYW4gb2YgMzc4LjMgaW50ZXJuYXRpb25hbCB1bml0cyBwZXIgbGl0ZXIgKElVL0wpIGFuZCBhIG1lZGlhbiBvZiAzMjkgSVUvTC4gVGhlIG1lYXN1cmVzIG9mIGRpc3BlcnNpb24gcHJvdmlkZSBhIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAxODAuMDcgSVUvTCBhbmQgYSB2YXJpYW5jZSBvZiAzMjQyNS40Mi4gVGhlcmUgYXJlIDI0NSBmZW1hbGVzIHdpdGggcmVjb3JkZWQgbGV2ZWxzIG9mIExhY3RpYyBEZWh5ZHJvZ2VuYXNlIGluIG91ciByYW5kb20gc2FtcGxlIHdpdGggYSBtZWFuIG9mIDMzMy41IElVL0wgYW5kIGEgbWVkaWFuIG9mIDI4My41IElVL0wuIFRoZSBtZWFzdXJlcyBvZiBkaXNwZXJzaW9uIHByb3ZpZGUgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMTY3LjA4IElVL0wgYW5kIGEgdmFyaWFuY2Ugb2YgMjc5MTQuMjIuCgojIyMjIEFzc3VtcHRpb25zCgojIyMjIE9ic2VydmF0aW9ucwoKVG8gcGVyZm9ybSBsaW5lYXIgcmVncmVzc2lvbiwgc2V2ZXJhbCBhc3N1bXB0aW9ucyBoYWQgdG8gYmUgbWV0LiBGaXJzdCwgdGhlIHZhcmlhYmxlcyBoYWQgdG8gYmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4gVGhlIHZhcmlhYmxlcyBhZ2UgYW5kIHNleCBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciBzbyB0aGUgZGF0YSBtZWV0cyB0aGlzIGFzc3VtcHRpb24uIFNlY29uZCwgdGhlcmUgaGFkIHRvIGJlIGEgbGluZWFyIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHNleCBhbmQgYWdlLCB0aGUgaW5kZXBlbmRlbnQgdmFyaWFibGVzLCBhbmQgTEQgbGV2ZWxzLCB0aGUgZGVwZW5kZW50IHZhcmlhYmxlLiBUaGUgZ3JhcGhzIGJlbG93IGRlbW9uc3RyYXRlcyB0aGlzIHJlbGF0aW9uc2hpcC4KCmBgYHtyfQpnZ3Bsb3QocGFkZmVtLGFlcyh4PWFnZSx5PUxhY3RpY0RlaHlkcm9nZW5hc2UpKSsKICAgbGFicyh0aXRsZT0iU2V4IGFuZCBBZ2UgY29tcGFyZWQgdG8gTGFjdGljIERlaHlkcm9nZW5hc2UgbGV2ZWxzIGluIGZlbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0icHVycGxlIixzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZG1hbGUsYWVzKHg9YWdlLHk9TGFjdGljRGVoeWRyb2dlbmFzZSkpKwogICBsYWJzKHRpdGxlPSJTZXggYW5kIEFnZSBjb21wYXJlZCB0byBMYWN0aWMgRGVoeWRyb2dlbmFzZSBsZXZlbHMgaW4gbWFsZXMiKSsKICBnZW9tX3BvaW50KGNvbD0ibWFnZW50YSIsc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCmBgYAoKYGBge3J9CmdncGxvdChwYWQsYWVzKHg9YWdlLHk9TGFjdGljRGVoeWRyb2dlbmFzZSxjb2w9c2V4KSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIGNvbXBhcmVkIHRvIExhY3RpYyBEZWh5ZHJvZ2VuYXNlIGxldmVscyIpKwogIGdlb21fcG9pbnQoc2l6ZT0zLGFscGhhPTAuOCkrCiAgZ2VvbV9zbW9vdGgobWV0aG9kPSJsbSIsbHR5PSJkYXNoZWQiKSsKICB0aGVtZV9idygpCmBgYAoKYGBge3J9CnJlZzI8LWxtKExhY3RpY0RlaHlkcm9nZW5hc2V+c2V4K2FnZSxkYXRhPXBhZCkKYGBgCgojIyMjIE5vcm1hbGl0eSBvZiByZXNpZHVhbHMKClRoZSB0aGlyZCBhc3N1bXB0aW9uIGlzIGEgbm9ybWFsaXR5IG9mIHJlc2lkdWFscy4gVGhlIGdyYXBoIGJlbG93IGRlbW9uc3RyYXRlcyB0aGF0IHRoZSByZXNpZHVhbHMgYXJlIG5vdCBub3JtYWxseSBkaXN0cmlidXRlZC4KCmBgYHtyfQpxcVBsb3QocmVnMikKYGBgCgojIyMjIEhvbW9zY2VkYXN0aWNpdHkKClRoZSBmaXR0ZWQgcGxvdCBhbHNvIHNob3dzIGEgdmlvbGF0aW9uIG9mIHRoZSBmb3VydGggYXNzdW1wdGlvbiBvZiBob21vc2NlZGFzdGljaXR5LiBIb3dldmVyLCB0ZXN0aW5nIHdpbGwgc3RpbGwgYmUgY2FycmllZCBvdXQgdG8gYXNzZXNzIGFueSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgZGVwZW5kZW50IGFuZCBpbmRlcGVuZGVudCB2YXJpYWJsZXMuCgpgYGB7cn0KcGxvdChyZWcyLDEpCmBgYAoKIyMjIyBUZXN0CgpgYGB7cn0Kc3VtbWFyeShyZWcyKQpyZWcyJGNvZWZmaWNpZW50cwpgYGAKCkJvdGggYWdlIGFuZCBzZXggaGF2ZSBhIFAgdmFsdWUgb2YgPDAuMDUuIEdpdmVuIGEgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiAwLjA1LCB0aGUgbnVsbCBoeXBvdGhlc2lzIGlzIHJlamVjdGVkLiBBZ2UgYW5kIHNleCBhcmUgcG9zc2libGUgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBMRCBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLCBob3dldmVyIHRoZSBhc3N1bXB0aW9ucyB3ZXJlIG5vdCBtZXQgZm9yIHRoZSBsaW5lYXIgcmVncmVzc2lvbiBtb2RlbC4gVGhlIGJhc2VsaW5lIGNhdGVnb3J5IHRoZSB0ZXN0IHByb3ZpZGVkIHdhcyBGZW1hbGUuIEdpdmVuIHRoZSBiYXNlbGluZSBjYXRlZ29yeSBhbmQgaG9sZGluZyBhbGwgZWxzZSBlcXVhbCwgbWFsZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgaGF2ZSBMRCBsZXZlbHMgb2YgNDkuNjYgSVUvTCBoaWdoZXIgdGhhbiBmZW1hbGVzLiBIb2xkaW5nIGFsbCBlbHNlIGVxdWFsLCBhIGRlY3JlYXNlIG9mIDMgeWVhcnMgb2YgYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmNyZWFzZSBvZiAxIElVL0wuIFNpbmNlIExEIGlzIGEgcmVjb3JkZWQgYmlvbWFya2VyIG9mIENWRCBpbiBodW1hbnMgYW5kIGdpdmVuIHRoZSBjbG9zZSBETkEgc2ltaWxhcml0eSBvZiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgYW5kIGh1bWFucywgdGhpcyBtYXkgYmUgc29tZXdoYXQgaW5mb3JtYXRpdmUgZm9yIGJpb21lZGljYWwgcmVzZWFyY2hlcnMgY29tcGFyaW5nIHJpc2sgbGV2ZWxzIG9mIENhcmRpb3Zhc2N1bGFyIGRpc2Vhc2UgaW4gaHVtYW4gbWFsZXMgYW5kIGZlbWFsZXMgb2YgZGlmZmVyZW50IGFnZXMuCgojIyMgR2x1Y29zZSwgU2Npc2NlbnQKCmBgYHtyfQpzdW0oIWlzLm5hKHBhZG1hbGUkR2x1Y29zZSkpCnN1bSghaXMubmEocGFkZmVtJEdsdWNvc2UpKQpzdW1tYXJ5KHBhZGZlbSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnN1bW1hcnkocGFkbWFsZSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnNkKHBhZGZlbSRHbHVjb3NlLCBuYS5ybSA9IFRSVUUpCnZhcihwYWRmZW0kR2x1Y29zZSwgbmEucm0gPSBUUlVFKQpzZChwYWRtYWxlJEdsdWNvc2UsIG5hLnJtID0gVFJVRSkKdmFyKHBhZG1hbGUkR2x1Y29zZSwgbmEucm0gPSBUUlVFKQoKYGBgCgpBcmUgc2V4IGFuZCBhZ2UgcmVsaWFibGUgcHJlZGljdG9ycyBvZiBHbHVjb3NlIGxldmVscyBpbiBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXM/IFRvIHRlc3Qgb3VyIHF1ZXN0aW9uLCBJIHdpbGwgYmUgdXRpbGl6aW5nIGEgcmVncmVzc2lvbiBtb2RlbCB0aGF0IGV4ZW1wbGlmaWVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBzZXggYW5kIGFnZSBpbiByZWdhcmRzIHRvIGdsdWNvc2UgbGV2ZWxzLlRoZSBudWxsIGh5cG90aGVzaXMgYXNzZXJ0cyB0aGF0IHRoZXJlIGlzIG5vIHNpZ25pZmljYW50IGNvcnJlbGF0aW9uIGJldHdlZW4gc2V4IGFuZCBhZ2Ugb2YgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyBhbmQgbGV2ZWxzIG9mIGdsdWNvc2UuIFRoZSBhbHRlcm5hdGUgaHlwb3RoZXNpcyBhc3NlcnRzIHRoYXQgdGhlcmUgaXMgYSBzaWduaWZpY2FudCBjb3JyZWxhdGlvbiBiZXR3ZWVuIHNleCBhbmQgYWdlIG9mIHRoZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgYW5kIGxldmVscyBvZiBnbHVjb3NlLiBJbiBvdXIgcmFuZG9tIHNhbXBsZSwgdGhlcmUgYXJlIDE4MiBtYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcyB3aXRoIGEgcmVjb3JkZWQgbWVhbiBvZiA3MC43NCBtaWxsaWdyYW1zIHBlciBkZWNpbGl0cmUgKG1nL2RMKSBhbmQgYSBtZWRpYW4gb2YgNjcuMDAgbWcvZEwuIFRoZSBtZWFzdXJlcyBvZiBkaXNwZXJzaW9uIHByb3ZpZGUgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMjAuMTYzNTQgbWcvZEwgYW5kIGEgdmFyaWFuY2Ugb2YgNDA2LjU2ODIuIE9uIHRoZSBvdGhlciBoYW5kLCB0aGVyZSBhcmUgMzI2IGZlbWFsZSBSaGVzdXMgSW5kaWFuLURlcml2ZWQgTWFjYXF1ZXMgd2l0aCBhIHJlY29yZGVkIG1lYW4gb2YgNzAuNjkgbWcvZEwgYW5kIGEgbWVkaWFuIG9mIDY3LjAwIG1nL2RMLiBUaGUgbWVhc3VyZXMgb2YgZGlzcGVyc2lvbiBwcm92aWRlIGEgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIDIzLiA2NDM0IG1nL2RMIGFuZCBhIHZhcmlhbmNlIG9mIDU1OS4wMTA0LgoKIyMjIyBBc3N1bXB0aW9ucwoKIyMjIyBPYnNlcnZhdGlvbnMKClRvIHBlcmZvcm0gbGluZWFyIHJlZ3Jlc3Npb24sIHNldmVyYWwgYXNzdW1wdGlvbnMgbXVzdCBiZSBtZXQuIEZpcnN0LCB0aGUgdmFyaWFibGVzIHdlIGFyZSB0ZXN0aW5nIGhhdmUgdG8gYmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlci4gVGhlIHZhcmlhYmxlcyBhZ2UgYW5kIHNleCBhcmUgaW5kZXBlbmRlbnQgc28gdGhlIGRhdGEgbWVldHMgdGhpcyBhc3N1bXB0aW9uLiBTZWNvbmQsIHRoZXJlIGhhcyB0byBiZSBhIGxpbmVhciByZWxhdGlvbnNoaXAgYmV0d2VlbiBzZXggYW5kIGFnZSwgdGhlIGluZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgZ2x1Y29zZSBsZXZlbHMsIHRoZSBkZXBlbmRlbnQgdmFyaWFibGUuIFRoZSBncmFwaCBiZWxvdyBkZW1vbnN0cmF0ZXMgdGhpcyByZWxhdGlvbnNoaXAuCgpgYGB7cn0KZ2dwbG90KHBhZGZlbSwgYWVzKHg9YWdlLHk9R2x1Y29zZSkpKwogICBsYWJzKHRpdGxlPSJTZXggYW5kIEFnZSBDb21wYXJlZCB0byBHbHVjb3NlIExldmVscyBpbiBGZW1hbGVzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44LCBjb2xvciA9ICdsaWdodGJsdWUnKSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZG1hbGUsIGFlcyh4PWFnZSx5PUdsdWNvc2UpKSsKICAgbGFicyh0aXRsZT0iU2V4IGFuZCBBZ2UgQ29tcGFyZWQgdG8gR2x1Y29zZSBMZXZlbHMgaW4gTWFsZXMiKSsKICBnZW9tX3BvaW50KHNpemU9MyxhbHBoYT0wLjgsIGNvbG9yID0gJ3BpbmsnKSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KZ2dwbG90KHBhZCwgYWVzKHg9YWdlLHk9R2x1Y29zZSxjb2w9c2V4KSkrCiAgIGxhYnModGl0bGU9IlNleCBhbmQgQWdlIENvbXBhcmVkIHRvIEdsdWNvc2UgTGV2ZWxzIikrCiAgZ2VvbV9wb2ludChzaXplPTMsYWxwaGE9MC44KSsKICBnZW9tX3Ntb290aChtZXRob2Q9ImxtIixsdHk9ImRhc2hlZCIpKwogIHRoZW1lX2J3KCkKYGBgCgpgYGB7cn0KcmVnMyA8LSBsbShHbHVjb3NlIH4gYWdlICsgc2V4LCBkYXRhID0gcGFkKQpgYGAKCiMjIyMgTm9ybWFsaXR5IG9mIHJlc2lkdWFscwoKVGhlIHRoaXJkIGFzc3VtcHRpb24gaXMgbm9ybWFsaXR5IG9mIHJlc2lkdWFscy4gVGhlIGZpcnN0IGdyYXBoIGJlbG93IGRlbW9uc3RyYXRlcyB0aGF0IHRoZSByZXNpZHVhbHMgYXJlIHNvbWV3aGF0IG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFzIHRoZSBwb2ludHMgZG8gc2VlbSB0byBiZSBwcmV0dHkgY2xvc2UgdG8gdGhlIGJlc3QgZml0IGxpbmUsIGhvd2V2ZXIgdGhleSBjdXJ2ZSBvZmYgdG93YXJkcyB0aGUgZW5kIHNpZ25pZnlpbmcgdGhhdCBvdXIgZGF0YSBkb2VzIGhhdmUgbW9yZSBleHRyZW1lIHZhbHVlcyB0aGFuIGV4cGVjdGVkLgoKYGBge3J9CnFxUGxvdChyZWczKQpgYGAKCiMjIyMgSG9tb3NjZWRhc3RpY2l0eQoKVGhlIGZvdXJ0aCBhc3N1bXB0aW9uIGlzIGhvbW9zY2VkYXN0aWNpdHkuIFRoZSBzZWNvbmQgZ3JhcGggZGVtb25zdHJhdGVzIGEgdmlvbGF0aW9uIG9mIHRoaXMgYXNzdW1wdGlvbiBiZWNhdXNlIGFzIHRoZSB4LXZhbHVlIGluY3JlYXNlcywgdGhlIHJlc2lkdWFscyBiZWNvbWUgZnVydGhlciBhcGFydC4gSG93ZXZlciwgdGVzdGluZyBjYW4gc3RpbGwgYmUgZG9uZSB0byBhc3Nlc3MgYW55IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG91ciBkZXBlbmRlbnQgYW5kIGluZGVwZW5kZW50IHZhcmlhYmxlcy4KCmBgYHtyfQpwbG90KHJlZzMsIDEpCmBgYAoKYGBge3J9CnN1bW1hcnkocmVnMykKcmVnMyRjb2VmZmljaWVudHMKYGBgCgpCb3RoIGFnZSBhbmQgc2V4IGhhdmUgYSBQIHZhbHVlIHRoYXQgaXMgPjAuMDUuIEdpdmVuIGEgY29uZmlkZW5jZSBpbnRlcnZhbCBvZiAwLjA1LCBteSByZWdyZXNzaW9uIG1vZGVsIGZhaWxzIHRvIHJlamVjdCB0aGUgbnVsbC4gRnJvbSB0aGlzIHJlZ3Jlc3Npb24gbW9kZWwsIGFnZSBhbmQgc2V4IGRvIG5vdCBzZWVtIHRvIGJlIHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgZ2x1Y29zZSBsZXZlbHMgaW4gUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzLCBob3dldmVyLCBrZWVwIGluIG1pbmQgdGhlIGFzc3VtcHRpb24gZm9yIGhvbW9zY2VkYXN0aWNpdHkgd2FzIG5vdCBtZXQgYW5kIHRoZSBub3JtYWxpdHkgb2YgcmVzaWR1YWxzIGFzc3VtcHRpb25zIHdhcyBvbmx5IHBhcnRpYWxseSBtZXQuIFRoZSBiYXNlbGluZSBjYXRlZ29yeSB0aGUgdGVzdCBwcm92aWRlZCBhbmQgY29tcGFyZWQgdG8gb3VyIG90aGVyIHZhcmlhYmxlcyAoYWdlIGFuZCBnbHVjb3NlKSB3YXMgdGhlIGNhdGVnb3JpY2FsIHZhbHVlICdGZW1hbGUnIHdpdGhpbiB0aGUgdmFyaWFibGUgc2V4LiBHaXZlbiB0aGUgYmFzZWxpbmUgY2F0ZWdvcnkgYW5kIGhvbGRpbmcgYWxsIGVsc2UgZXF1YWwsIG1hbGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzIGhhdmUgZ2x1Y29zZSBsZXZlbHMgb2YgMC4xMSBsZXNzIHRoYW4gZmVtYWxlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlcy4gSG9sZGluZyBhbGwgZWxzZSBlcXVhbCwgYW4gaW5jcmVhc2UgaW4gMC4wNyB5ZWFycyBvZiBhZ2UgaXMgYXNzb2NpYXRlZCB3aXRoIGFuIGluY3JlYXNlIG9mIDEgbWcvZEwuIEdsdWNvc2UgbGV2ZWxzL2Jsb29kIHN1Z2FyIGxldmVscyBwbGF5IGEgY3J1Y2lhbCByb2xlIGluIGlkZW50aWZ5aW5nIENWRCBpbiBodW1hbnMuIFRoaXMgaXMgYmVjYXVzZSBoaWdoIGJsb29kIHN1Z2FyIGNhbiBkYW1hZ2UgYmxvb2QgdmVzc2VscyBhbmQgbmVydmVzIGxlYWRpbmcgdG8gc2VyaW91cyBhbmQgbGlmZS10aHJlYXRlbmluZyBoZWFydCBwcm9ibGVtcy4gQmxvb2Qgc3VnYXIgbGV2ZWxzIGNhbiBoZWxwIHVzIGluZGljYXRlIGRpYWJldGVzIHdpdGhpbiBwYXRpZW50cyBhbmQgaW4gdHVybiBoZWxwIHVzIHByZXZlbnQgQ1ZEIGZyb20gaW1wYWN0aW5nIHRoZWlyIGxpdmVzLiBHaXZlbiB0aGUgY2xvc2UgRE5BIHNpbWlsYXJpdHkgb2YgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWVzIGFuZCBodW1hbnMsIHRoaXMgbWF5IGJlIHNvbWV3aGF0IGluZm9ybWF0aXZlIGZvciBiaW9tZWRpY2FsIHJlc2VhcmNoZXJzIGNvbXBhcmluZyByaXNrIGxldmVscyBvZiBjYXJkaW92YXNjdWxhciBkaXNlYXNlIGluIGh1bWFuIG1hbGVzIGFuZCBmZW1hbGVzIHJlc3BlY3RpdmVseS4gSG93ZXZlciwgd2l0aGluIFJoZXN1cyBJbmRpYW4gRGVyaXZlZCBNYWNhcXVlcywgc2V4IGFuZCBhZ2UgZG8gbm90IHNlZW0gdG8gcGxheSBhIHNpZ25pZmljYW50IHJvbGUgaW4gZ2x1Y29zZSBsZXZlbHMgbWVhbmluZyB0aGF0IHdlIHNob3VsZCBsb29rIGVsc2V3aGVyZSBhbmQgb3RoZXIgYmlvbWFya2VycyBmb3IgcG9zc2libGUgc29sdXRpb25zLgoKIyMgQ29uY2x1c2lvbgoKSW4gcmVzcG9uc2UgdG8gY2xpbWJpbmcgaGVhcnQgZGlzZWFzZSByYXRlcyBpbiB0aGUgVW5pdGVkIFN0YXRlcywgd2UgZm9jdXNlZCBvdXIgaHlwb3RoZXNpcyB0ZXN0aW5nIG9uIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHNleCwgYWdlIGFuZCBiaW9sb2dpY2FsIG1hcmtlcnMgaW4gcmVnYXJkcyB0byBjYXJkaW92YXNjdWxhciBkaXNlYXNlLiBGb3Jnb2luZyB0aGUgYXNzdW1wdGlvbiBvZiBob21vc2NlZGFzdGljaXR5LCBoeXBvdGhlc2lzIHRlc3RpbmcgcmV2ZWFsZWQgdGhhdCBzZXggb2YgdGhlIFJoZXN1cyBJbmRpYW4tRGVyaXZlZCBNYWNhcXVlIHdhcyBhIHJlbGlhYmxlIHByZWRpY3RvciBvZiBsZXZlbHMgb2YgQ3JlYXRpbmluZSB3aXRoaW4gdGhlIHByaW1hdGUsIGFuZCB0aGF0IGFnZSB3YXMgbm90LiBGb3Jnb2luZyBhc3N1bXB0aW9ucyBvZiBub3JtYWxpdHkgb2YgcmVzaWR1YWxzIGFuZCBob21vc2NlZGFzdGljaXR5LCBpdCBhbHNvIHNob3dlZCB0aGF0IGFnZSBhbmQgc2V4IGFyZSByZWxpYWJsZSBwcmVkaWN0b3JzIG9mIGxldmVscyBvZiBMYWN0aWMgRGVoeWRyb2dlbmFzZSBpbiB0aGUgUmhlc3VzIHNwZWNpZXMuICBMYXN0bHksIGZvcmdvaW5nIGFzc3VtcHRpb25zIG9mIG5vcm1hbGl0eSBvZiByZXNpZHVhbHMgYW5kIGhvbW9zY2VkYXN0aWNpdHksIGh5cG90aGVzaXMgdGVzdGluZyByZXZlYWxlZCB0aGF0IHNleCBhbmQgYWdlIHdlcmUgbm90IHJlbGlhYmxlIHByZWRpY3RvcnMgb2YgZ2x1Y29zZSBsZXZlbHMgaW4gdGhlIFJoZXN1cyBzcGVjaWVzLiBObyByZWdyZXNzaW9uIG1vZGVscyBpbiB0aGlzIHN0dWR5IGluY2x1ZGVkIGFkZGl0aW9uYWwgYW5kIHJlbGV2YW50IGNvdmFyaWF0ZXMgc3VjaCBhcyBoZWlnaHQgYW5kIHdlaWdodC4gCgpFdmVuIHRob3VnaCB0aGUgUmhlc3VzIEluZGlhbi1EZXJpdmVkIE1hY2FxdWUgYW5kIGh1bWFucyBzaGFyZSBhcHByb3hpbWF0ZWx5IDkzJSBzaW1pbGFyaXR5IGluIEROQSAgKEFyYmFuYXMsIDIwMDcpICBpdCBpcyB1bmxpa2VseSB0aGF0IHRlc3RpbmcgdGhlc2UgYmlvbWFya2VycyBhZ2FpbnN0IHNleCBhbmQgYWdlIG9mIGh1bWFucyB3b3VsZCByZXN1bHQgaW4gYW55IHNpZ25pZmljYW50IGZpbmRpbmdzIHJlZ2FyZGluZyByaXNrIGxldmVscyBvZiBDYXJkaW92YXNjdWxhciBEaXNlYXNlLiAKCiMjIFdvcmtzIFJlZmVyZW5jZWQKCiJBSEE6IEhlYXJ0IERpc2Vhc2UgRGVhdGggUmF0ZXMgaW4gVVMgU3Bpa2VkIGluIDIwMjAuIiBSZW5hbCAmIFVyb2xvZ3kgTmV3cywgMTggTm92LiAyMDIyLCBwLiBOQS4gR2FsZSBBY2FkZW1pYyBPbmVGaWxlLCBsaW5rLmdhbGUuY29tL2FwcHMvZG9jL0E3MjY5OTUxODgvQU9ORT91PWJpbmd1bCZzaWQ9Ym9va21hcmstQU9ORSZ4aWQ9MzFjNTI1NzMuIEFjY2Vzc2VkIDEgQXByLiAyMDIzLgoKQXJiYW5hcywgQ2Fyb2xpbmUuICJSaGVzdXMgTW9ua2V5IEdlbm9tZSBSZXZlYWxzIEROQSBTaW1pbGFyaXRpZXMgd2l0aCBDaGltcHMgYW5kIEh1bWFucyAtIHRoZSBTb3VyY2UgLSBXYXNoaW5ndG9uIFVuaXZlcnNpdHkgaW4gU3QuIExvdWlzLiIgVGhlIFNvdXJjZSwgOSBGZWIuIDIwMjEsIHNvdXJjZS53dXN0bC5lZHUvMjAwNy8wNC9yaGVzdXMtbW9ua2V5LWdlbm9tZS1yZXZlYWxzLWRuYS1zaW1pbGFyaXRpZXMtd2l0aC1jaGltcHMtYW5kLWh1bWFucy8uCgpCYXRlbWFuLCBDaHJpcy4gIlNBIHdvbWVuIGF0IHNpZ25pZmljYW50IHJpc2sgb2YgZGV2ZWxvcGluZyBoZWFydCBkaXNlYXNlLiIgQ01FOiBZb3VyIFNBIEpvdXJuYWwgb2YgQ1BELCB2b2wuIDMwLCBuby4gOCwgQXVnLiAyMDEyLCBwcC4gMzAxKy4gR2FsZSBBY2FkZW1pYyBPbmVGaWxlLCBsaW5rLmdhbGUuY29tL2FwcHMvZG9jL0EzMDE4NzIxNzEvQU9ORT91PWJpbmd1bCZzaWQ9Ym9va21hcmstQU9ORSZ4aWQ9ZmE4OGViY2QuIEFjY2Vzc2VkIDEgQXByLiAyMDIzLgoKQ294LCBMYXVyYSBBIGV0IGFsLiAiTm9uaHVtYW4gUHJpbWF0ZXMgYW5kIFRyYW5zbGF0aW9uYWwgUmVzZWFyY2gtQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZS4iIElMQVIgam91cm5hbCB2b2wuIDU4LDIgKDIwMTcpOiAyMzUtMjUwLiA8ZG9pOjEwLjEwOTMvaWxhci9pbHgwMjU+CgpNdWxsZW5zLCBXLiwgRGFtbWFuLCBLLiwgVGVzdGFuaSwgSi5NLiwgTWFydGVucywgUC4sIE11ZWxsZXIsIEMuLCBMYXNzdXMsIEouLCBUYW5nLCBXLkguVy4sIFNrb3VyaSwgSC4sIFZlcmJydWdnZSwgRi5ILiwgT3JzbywgRi4sIEhpbGwsIEwuLCBVcmFsLCBELiwgTGFpbnNjYWssIE0uLCBSb3NzaWdub2wsIFAuLCBNZXRyYSwgTS4sIE1lYmF6YWEsIEEuLCBTZWZlcm92aWMsIFAuLCBSdXNjaGl0emthLCBGLiBhbmQgQ29hdHMsIEEuICgyMDIwKSwgRXZhbHVhdGlvbiBvZiBraWRuZXkgZnVuY3Rpb24gdGhyb3VnaG91dCB0aGUgaGVhcnQgZmFpbHVyZSB0cmFqZWN0b3J5IC0tIGEgcG9zaXRpb24gc3RhdGVtZW50IGZyb20gdGhlIEhlYXJ0IEZhaWx1cmUgQXNzb2NpYXRpb24gb2YgdGhlIEV1cm9wZWFuIFNvY2lldHkgb2YgQ2FyZGlvbG9neS4gRXVyIEogSGVhcnQgRmFpbCwgMjI6IDU4NC02MDMuIDxodHRwczovL2RvaS5vcmcvMTAuMTAwMi9lamhmLjE2OTc+CgpQb3pueWFrLCBBbmFzdGFzaWEgViBldCBhbC4gIkVmZmVjdCBvZiBHbHVjb3NlIExldmVscyBvbiBDYXJkaW92YXNjdWxhciBSaXNrLiIgQ2VsbHMgdm9sLiAxMSwxOSAzMDM0LiAyOCBTZXAuIDIwMjIsIDxkb2k6MTAuMzM5MC9jZWxsczExMTkzMDM0PgoKUmF1YmVydGFzLCBSLiwgQmVlY2gsIEouLCBXYXRzb24sIFcuIGV0IGFsLiBEZWNyZWFzZWQgY29tcGxleGl0eSBvZiBnbHVjb3NlIGR5bmFtaWNzIGluIGRpYWJldGVzIGluIHJoZXN1cyBtb25rZXlzLiBTY2kgUmVwIDksIDE0MzggKDIwMTkpLiA8aHR0cHM6Ly9kb2kub3JnLzEwLjEwMzgvczQxNTk4LTAxOC0zNjc3Ni00PgoKIkNyZWF0aW5pbmUgQmxvb2QgVGVzdC4iIE1vdW50IFNpbmFpIEhlYWx0aCBTeXN0ZW0sIDxodHRwczovL3d3dy5tb3VudHNpbmFpLm9yZy9oZWFsdGgtbGlicmFyeS90ZXN0cy9jcmVhdGluaW5lLWJsb29kPiB0ZXN0Izpcfjp0ZXh0PUNyZWF0aW5pbmUlMjBpcyUyMGElMjBjaGVtaWNhbCUyMHdhc3RlLGJvZHklMjBlbnRpcmVseSUyMGJ5JTIwdGhlJTIwa2lkbmV5cy4KClpodSwgV2VuZmFuZyBldCBhbC4gIlNlcnVtIExldmVsIG9mIExhY3RhdGUgRGVoeWRyb2dlbmFzZSBpcyBBc3NvY2lhdGVkIHdpdGggQ2FyZGlvdmFzY3VsYXIgRGlzZWFzZSBSaXNrIGFzIERldGVybWluZWQgYnkgdGhlIEZyYW1pbmdoYW0gUmlzayBTY29yZSBhbmQgQXJ0ZXJpYWwgU3RpZmZuZXNzIGluIGEgSGVhbHRoLUV4YW1pbmVkIFBvcHVsYXRpb24gaW4gQ2hpbmEuIiBJbnRlcm5hdGlvbmFsIGpvdXJuYWwgb2YgZ2VuZXJhbCBtZWRpY2luZSB2b2wuIDE1IDExLTE3LiA0IEphbi4gMjAyMiwgPGRvaToxMC4yMTQ3L0lKR00uUzMzNzUxNz4K