This is a prototype of a project that intends to analyze the lagged relationship between human capital and GDP per capita. I have found that the human capital levels of a given cohort are most linked to GDP during childhood and their 20s to 40s. This suggests the relationship is bidirectional – children are not working in most societies, so the association at that time is likely due to GDP affecting human capital. The stronger relationship in the 20s to 40s is likely not due to GDP causing the formation of human capital, as the formation of personality/intelligence/working skills is happening more in the teenage and young adult years than in older years. ______________________________________________________________________________

setwd('~')
Warning: The working directory was changed to /home/asuka inside a notebook chunk. The working directory will be reset when the chunk is finished running. Use the knitr root.dir option in the setup chunk to change the working directory for notebook chunks.
setwd('Documents/rstuff/hloalt')

GNIdata1 <- read.csv('data/GNInPPPIMF.csv')
hlo <- read.csv("data/hlopostharm.csv")

The HLO file – a combination of several data sources (harmonized learning outcomes, NIQ V1.3.5, PIAAC, and a few others I collected along the way). Contains 4,000 different test scores. To be updated with a more formal meta-analytic search strategy and the short-term memory data.

hlo

Unfortunately the GNI per capita data suffers from some missing values in earlier years.

gnilong1 <- GNIdata1 %>%
  pivot_longer(cols = starts_with('X'), names_to = "Year", values_to = "GNI") %>%
  mutate(Year = as.numeric(sub("X", "", Year))) 

merged_data <- gnilong1

merged_data$alpha3 <- merged_data$Country.Code

merged_data <- merged_data %>% filter(alpha3 %in% unique(hlo$alpha3))
merged_data$ismiss <- 0
merged_data$ismiss[is.na(merged_data$GNI)] <- 1
temp <- merged_data %>% group_by(Year) %>% summarise(mean(ismiss, na.rm=T))
print(temp, n=100)

Design that uses no fixed country effects. Shows an effect of an increase of 1/15th of an SD causing an increase in GNI per capita of ~8% regardless of the lag.

range <- -100:100
daf <- data.frame(lag = range)
merged_data$logGNI <- log(merged_data$GNI + 1)
it=1
for(i in range) {
  temp1 <- merged_data %>%
    mutate(Lag_Year = Year + i)
  
  merged_datatemp2 <- hlo %>%
    left_join(temp1, by = c("alpha3" = "alpha3", "cohort" = "Lag_Year"))
  
  see <- merged_datatemp2 %>% select(alpha3, harmscore2, logGNI, cohort)
  
  nomiss <- see %>% filter(!is.na(logGNI) & !is.na(harmscore2))
  
  if(nrow(nomiss) > 5) {
    lr <- lm(data=nomiss, logGNI ~ harmscore2)
    daf$b[it] <- lr$coefficients[2]
    daf$bname[it] <- names(lr$coefficients[2])
    daf$p[it] <- summary(lr)$coefficients[2,  'Pr(>|t|)']
    daf$ucunt[it] <- length(unique(nomiss$alpha3))
    daf$nobs[it] <- nrow(nomiss)
  }
  else {
    daf$b[it] <- NA
    daf$bname[it] <- NA
    daf$p[it] <- NA
    daf$ucunt[it] <- NA
    daf$nobs[it] <- NA
  }
  it = it + 1
  #print(it)
}

plot(daf$lag, daf$b)

Now, I use country and cohort fixed effects, which is a more appropriate model. To be clear: the chart shows the association between the GNI of a country and the human capital of a cohort is strongest when the cohort is in its development years (0-12 years old) and when it is working (20-50 years of age).

range <- -100:100
daf <- data.frame(lag = range)

it=1
for(i in range) {
  temp1 <- merged_data %>%
    mutate(Lag_Year = Year + i)
  
  merged_datatemp2 <- hlo %>%
    left_join(temp1, by = c("alpha3" = "alpha3", "cohort" = "Lag_Year"))
  
  see <- merged_datatemp2 %>% select(alpha3, harmscore2, logGNI, cohort)
  
  nomiss <- see %>% filter(!is.na(logGNI) & !is.na(harmscore2))
  
  if(nrow(nomiss) > 5) {
    lr <- lm(data=nomiss, logGNI ~ harmscore2 + alpha3 + cohort)
    daf$b[it] <- lr$coefficients[2]
    daf$ciu[it] <- lr$coefficients[2] + summary(lr)$coefficients[2,  'Std. Error']*2
    daf$cil[it] <- lr$coefficients[2] - summary(lr)$coefficients[2,  'Std. Error']*2
    daf$bname[it] <- names(lr$coefficients[2])
    daf$p[it] <- summary(lr)$coefficients[2,  'Pr(>|t|)']
    daf$ucunt[it] <- length(unique(nomiss$alpha3))
    daf$nobs[it] <- nrow(nomiss)
  }
  else {
    daf$b[it] <- NA
    daf$ciu[it] <- NA
    daf$cil[it] <- NA
    daf$bname[it] <- NA
    daf$p[it] <- NA
    daf$ucunt[it] <- NA
    daf$nobs[it] <- NA
  }
  it = it + 1
  #print(it)
}
Warning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliableWarning: essentially perfect fit: summary may be unreliable
daf

A better looking plot. The p-values for the working and childhood years are < .0001. Effect of human capital is scaled to 1/15th of an SD. I wouldn’t pay attention to the results before -20 and after 40 due to sample size issues.

################################
daf$b100 <- daf$b*100
daf$ciu100 <- daf$ciu*100
daf$cil100 <- daf$cil*100
daf$yrs <- -daf$lag

ggplot(daf, aes(x = yrs, y = b100)) +
  geom_point() + 
  geom_errorbar(aes(ymin = cil100, ymax = ciu100), width = 0.1) +
  theme_minimal() + 
  labs(x = "Years after the cohort is born", y = "Effect of human capital on % increase in GNI per capita", title = "") +
  theme_bw() +
  xlim(-50, 50) +
  theme(
    axis.text.x = element_text(size = 12),
    axis.text.y = element_text(size = 12),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 12),
    legend.position = "right",
    plot.background = element_rect(fill = "white")
  )

NA
NA
NA
NA
daf
LS0tCnRpdGxlOiAiR0RQIH4gaHVtYW4gY2FwaXRhbCBsYWdnZWQgYW5hbHlzaXMgcHJvdG90eXBlIgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCgpUaGlzIGlzIGEgcHJvdG90eXBlIG9mIGEgcHJvamVjdCB0aGF0IGludGVuZHMgdG8gYW5hbHl6ZSB0aGUgbGFnZ2VkIHJlbGF0aW9uc2hpcApiZXR3ZWVuIGh1bWFuIGNhcGl0YWwgYW5kIEdEUCBwZXIgY2FwaXRhLiBJIGhhdmUgZm91bmQgdGhhdCB0aGUgaHVtYW4gY2FwaXRhbCBsZXZlbHMKb2YgYSBnaXZlbiBjb2hvcnQgYXJlIG1vc3QgbGlua2VkIHRvIEdEUCBkdXJpbmcgY2hpbGRob29kCmFuZCB0aGVpciAyMHMgdG8gNDBzLiBUaGlzIHN1Z2dlc3RzIHRoZSByZWxhdGlvbnNoaXAKaXMgYmlkaXJlY3Rpb25hbCAtLSBjaGlsZHJlbiBhcmUgbm90IHdvcmtpbmcgaW4gbW9zdCBzb2NpZXRpZXMsIHNvIHRoZSBhc3NvY2lhdGlvbgphdCB0aGF0IHRpbWUgaXMgbGlrZWx5IGR1ZSB0byBHRFAgYWZmZWN0aW5nIGh1bWFuIGNhcGl0YWwuIFRoZSBzdHJvbmdlciByZWxhdGlvbnNoaXAKaW4gdGhlIDIwcyB0byA0MHMgaXMgbGlrZWx5IG5vdCBkdWUgdG8gR0RQIGNhdXNpbmcgdGhlIGZvcm1hdGlvbiBvZiBodW1hbiBjYXBpdGFsLCBhcwp0aGUgZm9ybWF0aW9uIG9mIHBlcnNvbmFsaXR5L2ludGVsbGlnZW5jZS93b3JraW5nIHNraWxscyBpcyBoYXBwZW5pbmcgbW9yZSAKaW4gdGhlIHRlZW5hZ2UgYW5kIHlvdW5nIGFkdWx0IHllYXJzIHRoYW4gaW4gb2xkZXIgeWVhcnMuCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwoKCmBgYHtyfQpzZXR3ZCgnficpCnNldHdkKCdEb2N1bWVudHMvcnN0dWZmL2hsb2FsdCcpCgpHTklkYXRhMSA8LSByZWFkLmNzdignZGF0YS9HTkluUFBQSU1GLmNzdicpCmhsbyA8LSByZWFkLmNzdigiZGF0YS9obG9wb3N0aGFybS5jc3YiKQpgYGAKClRoZSBITE8gZmlsZSAtLSBhIGNvbWJpbmF0aW9uIG9mIHNldmVyYWwgZGF0YSBzb3VyY2VzIChoYXJtb25pemVkIGxlYXJuaW5nIG91dGNvbWVzLApOSVEgVjEuMy41LCBQSUFBQywgYW5kIGEgZmV3IG90aGVycyBJIGNvbGxlY3RlZCBhbG9uZyB0aGUgd2F5KS4gQ29udGFpbnMgNCwwMDAgZGlmZmVyZW50IHRlc3Qgc2NvcmVzLgpUbyBiZSB1cGRhdGVkIHdpdGggYSBtb3JlIGZvcm1hbCBtZXRhLWFuYWx5dGljIHNlYXJjaCBzdHJhdGVneSBhbmQgdGhlIHNob3J0LXRlcm0gbWVtb3J5IGRhdGEuCgpgYGB7cn0KaGxvCmBgYAoKVW5mb3J0dW5hdGVseSB0aGUgR05JIHBlciBjYXBpdGEgZGF0YSBzdWZmZXJzIGZyb20gc29tZSBtaXNzaW5nIHZhbHVlcyBpbiBlYXJsaWVyIHllYXJzLgpgYGB7cn0KZ25pbG9uZzEgPC0gR05JZGF0YTEgJT4lCiAgcGl2b3RfbG9uZ2VyKGNvbHMgPSBzdGFydHNfd2l0aCgnWCcpLCBuYW1lc190byA9ICJZZWFyIiwgdmFsdWVzX3RvID0gIkdOSSIpICU+JQogIG11dGF0ZShZZWFyID0gYXMubnVtZXJpYyhzdWIoIlgiLCAiIiwgWWVhcikpKSAKCm1lcmdlZF9kYXRhIDwtIGduaWxvbmcxCgptZXJnZWRfZGF0YSRhbHBoYTMgPC0gbWVyZ2VkX2RhdGEkQ291bnRyeS5Db2RlCgptZXJnZWRfZGF0YSA8LSBtZXJnZWRfZGF0YSAlPiUgZmlsdGVyKGFscGhhMyAlaW4lIHVuaXF1ZShobG8kYWxwaGEzKSkKbWVyZ2VkX2RhdGEkaXNtaXNzIDwtIDAKbWVyZ2VkX2RhdGEkaXNtaXNzW2lzLm5hKG1lcmdlZF9kYXRhJEdOSSldIDwtIDEKdGVtcCA8LSBtZXJnZWRfZGF0YSAlPiUgZ3JvdXBfYnkoWWVhcikgJT4lIHN1bW1hcmlzZShtZWFuKGlzbWlzcywgbmEucm09VCkpCnByaW50KHRlbXAsIG49MTAwKQpgYGAKCkRlc2lnbiB0aGF0IHVzZXMgbm8gZml4ZWQgY291bnRyeSBlZmZlY3RzLiBTaG93cyBhbiBlZmZlY3Qgb2YgYW4gaW5jcmVhc2Ugb2YgMS8xNXRoIG9mIAphbiBTRCBjYXVzaW5nIGFuIGluY3JlYXNlIGluIEdOSSBwZXIgY2FwaXRhIG9mIH44JSByZWdhcmRsZXNzIG9mIHRoZSBsYWcuIAoKYGBge3J9CnJhbmdlIDwtIC0xMDA6MTAwCmRhZiA8LSBkYXRhLmZyYW1lKGxhZyA9IHJhbmdlKQptZXJnZWRfZGF0YSRsb2dHTkkgPC0gbG9nKG1lcmdlZF9kYXRhJEdOSSArIDEpCml0PTEKZm9yKGkgaW4gcmFuZ2UpIHsKICB0ZW1wMSA8LSBtZXJnZWRfZGF0YSAlPiUKICAgIG11dGF0ZShMYWdfWWVhciA9IFllYXIgKyBpKQogIAogIG1lcmdlZF9kYXRhdGVtcDIgPC0gaGxvICU+JQogICAgbGVmdF9qb2luKHRlbXAxLCBieSA9IGMoImFscGhhMyIgPSAiYWxwaGEzIiwgImNvaG9ydCIgPSAiTGFnX1llYXIiKSkKICAKICBzZWUgPC0gbWVyZ2VkX2RhdGF0ZW1wMiAlPiUgc2VsZWN0KGFscGhhMywgaGFybXNjb3JlMiwgbG9nR05JLCBjb2hvcnQpCiAgCiAgbm9taXNzIDwtIHNlZSAlPiUgZmlsdGVyKCFpcy5uYShsb2dHTkkpICYgIWlzLm5hKGhhcm1zY29yZTIpKQogIAogIGlmKG5yb3cobm9taXNzKSA+IDUpIHsKICAgIGxyIDwtIGxtKGRhdGE9bm9taXNzLCBsb2dHTkkgfiBoYXJtc2NvcmUyKQogICAgZGFmJGJbaXRdIDwtIGxyJGNvZWZmaWNpZW50c1syXQogICAgZGFmJGJuYW1lW2l0XSA8LSBuYW1lcyhsciRjb2VmZmljaWVudHNbMl0pCiAgICBkYWYkcFtpdF0gPC0gc3VtbWFyeShscikkY29lZmZpY2llbnRzWzIsICAnUHIoPnx0fCknXQogICAgZGFmJHVjdW50W2l0XSA8LSBsZW5ndGgodW5pcXVlKG5vbWlzcyRhbHBoYTMpKQogICAgZGFmJG5vYnNbaXRdIDwtIG5yb3cobm9taXNzKQogIH0KICBlbHNlIHsKICAgIGRhZiRiW2l0XSA8LSBOQQogICAgZGFmJGJuYW1lW2l0XSA8LSBOQQogICAgZGFmJHBbaXRdIDwtIE5BCiAgICBkYWYkdWN1bnRbaXRdIDwtIE5BCiAgICBkYWYkbm9ic1tpdF0gPC0gTkEKICB9CiAgaXQgPSBpdCArIDEKICAjcHJpbnQoaXQpCn0KCnBsb3QoZGFmJGxhZywgZGFmJGIpCgpgYGAKCk5vdywgSSB1c2UgY291bnRyeSBhbmQgY29ob3J0IGZpeGVkIGVmZmVjdHMsIHdoaWNoIGlzIGEgbW9yZSBhcHByb3ByaWF0ZSBtb2RlbC4KVG8gYmUgY2xlYXI6IHRoZSBjaGFydCBzaG93cyB0aGUgYXNzb2NpYXRpb24gYmV0d2VlbiB0aGUgR05JIG9mIGEgY291bnRyeSBhbmQKdGhlIGh1bWFuIGNhcGl0YWwgb2YgYSBjb2hvcnQgaXMgc3Ryb25nZXN0IHdoZW4gdGhlIGNvaG9ydCBpcyBpbiBpdHMgZGV2ZWxvcG1lbnQgeWVhcnMgKDAtMTIgeWVhcnMgb2xkKQphbmQgd2hlbiBpdCBpcyB3b3JraW5nICgyMC01MCB5ZWFycyBvZiBhZ2UpLgpgYGB7cn0KcmFuZ2UgPC0gLTEwMDoxMDAKZGFmIDwtIGRhdGEuZnJhbWUobGFnID0gcmFuZ2UpCgppdD0xCmZvcihpIGluIHJhbmdlKSB7CiAgdGVtcDEgPC0gbWVyZ2VkX2RhdGEgJT4lCiAgICBtdXRhdGUoTGFnX1llYXIgPSBZZWFyICsgaSkKICAKICBtZXJnZWRfZGF0YXRlbXAyIDwtIGhsbyAlPiUKICAgIGxlZnRfam9pbih0ZW1wMSwgYnkgPSBjKCJhbHBoYTMiID0gImFscGhhMyIsICJjb2hvcnQiID0gIkxhZ19ZZWFyIikpCiAgCiAgc2VlIDwtIG1lcmdlZF9kYXRhdGVtcDIgJT4lIHNlbGVjdChhbHBoYTMsIGhhcm1zY29yZTIsIGxvZ0dOSSwgY29ob3J0KQogIAogIG5vbWlzcyA8LSBzZWUgJT4lIGZpbHRlcighaXMubmEobG9nR05JKSAmICFpcy5uYShoYXJtc2NvcmUyKSkKICAKICBpZihucm93KG5vbWlzcykgPiA1KSB7CiAgICBsciA8LSBsbShkYXRhPW5vbWlzcywgbG9nR05JIH4gaGFybXNjb3JlMiArIGFscGhhMyArIGNvaG9ydCkKICAgIGRhZiRiW2l0XSA8LSBsciRjb2VmZmljaWVudHNbMl0KICAgIGRhZiRjaXVbaXRdIDwtIGxyJGNvZWZmaWNpZW50c1syXSArIHN1bW1hcnkobHIpJGNvZWZmaWNpZW50c1syLCAgJ1N0ZC4gRXJyb3InXSoyCiAgICBkYWYkY2lsW2l0XSA8LSBsciRjb2VmZmljaWVudHNbMl0gLSBzdW1tYXJ5KGxyKSRjb2VmZmljaWVudHNbMiwgICdTdGQuIEVycm9yJ10qMgogICAgZGFmJGJuYW1lW2l0XSA8LSBuYW1lcyhsciRjb2VmZmljaWVudHNbMl0pCiAgICBkYWYkcFtpdF0gPC0gc3VtbWFyeShscikkY29lZmZpY2llbnRzWzIsICAnUHIoPnx0fCknXQogICAgZGFmJHVjdW50W2l0XSA8LSBsZW5ndGgodW5pcXVlKG5vbWlzcyRhbHBoYTMpKQogICAgZGFmJG5vYnNbaXRdIDwtIG5yb3cobm9taXNzKQogIH0KICBlbHNlIHsKICAgIGRhZiRiW2l0XSA8LSBOQQogICAgZGFmJGNpdVtpdF0gPC0gTkEKICAgIGRhZiRjaWxbaXRdIDwtIE5BCiAgICBkYWYkYm5hbWVbaXRdIDwtIE5BCiAgICBkYWYkcFtpdF0gPC0gTkEKICAgIGRhZiR1Y3VudFtpdF0gPC0gTkEKICAgIGRhZiRub2JzW2l0XSA8LSBOQQogIH0KICBpdCA9IGl0ICsgMQogICNwcmludChpdCkKfQoKZGFmCmBgYAoKQSBiZXR0ZXIgbG9va2luZyBwbG90LiBUaGUgcC12YWx1ZXMgZm9yIHRoZSB3b3JraW5nIGFuZCBjaGlsZGhvb2QgeWVhcnMgYXJlIDwgLjAwMDEuCkVmZmVjdCBvZiBodW1hbiBjYXBpdGFsIGlzIHNjYWxlZCB0byAxLzE1dGggb2YgYW4gU0QuIEkgd291bGRuJ3QgcGF5IAphdHRlbnRpb24gdG8gdGhlIHJlc3VsdHMgYmVmb3JlIC0yMCBhbmQgYWZ0ZXIgNDAgZHVlIHRvIHNhbXBsZSBzaXplIGlzc3Vlcy4KYGBge3J9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRhZiRiMTAwIDwtIGRhZiRiKjEwMApkYWYkY2l1MTAwIDwtIGRhZiRjaXUqMTAwCmRhZiRjaWwxMDAgPC0gZGFmJGNpbCoxMDAKZGFmJHlycyA8LSAtZGFmJGxhZwoKZ2dwbG90KGRhZiwgYWVzKHggPSB5cnMsIHkgPSBiMTAwKSkgKwogIGdlb21fcG9pbnQoKSArIAogIGdlb21fZXJyb3JiYXIoYWVzKHltaW4gPSBjaWwxMDAsIHltYXggPSBjaXUxMDApLCB3aWR0aCA9IDAuMSkgKwogIHRoZW1lX21pbmltYWwoKSArIAogIGxhYnMoeCA9ICJZZWFycyBhZnRlciB0aGUgY29ob3J0IGlzIGJvcm4iLCB5ID0gIkVmZmVjdCBvZiBodW1hbiBjYXBpdGFsIG9uICUgaW5jcmVhc2UgaW4gR05JIHBlciBjYXBpdGEiLCB0aXRsZSA9ICIiKSArCiAgdGhlbWVfYncoKSArCiAgeGxpbSgtNTAsIDUwKSArCiAgdGhlbWUoCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTQpLAogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksCiAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiLAogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiKQogICkKCgoKCmBgYAoKYGBge3J9CmRhZgpgYGA=