── Attaching core tidyverse packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors

Attaching package: ‘modelr’

The following object is masked from ‘package:broom’:

    bootstrap

Dados da CAPES sobre avaliação da pós-graduação

A CAPES é um órgão do MEC que tem a atribuição de acompanhar a pós-graduação na universidade brasileira. Uma das formas que ela encontrou de fazer isso e pela qual ela é bastante criticada é através de uma avaliação quantitativa a cada x anos (era 3, mudou para 4).

Usaremos dados da penúltima avaliação da CAPES:

cacc_tudo = read_projectdata()

glimpse(cacc_tudo)
Rows: 73
Columns: 31
$ Instituição                  <chr> "UNIVERSIDADE FEDERAL DO AMAZONAS", "UNIVERSIDADE FEDERAL DO PARÁ", "UNIVERSIDADE FEDERAL DO MARANHÃO", "UNIVERSIDADE ESTADUAL DO MARANHÃO", "FUNDAÇÃO UNI…
$ Programa                     <chr> "INFORMÁTICA (12001015012P2)", "CIÊNCIA DA COMPUTAÇÃO (15001016047P9)", "CIÊNCIA DA COMPUTAÇÃO (20001010022P0)", "ENGENHARIA DE COMPUTAÇÃO E SISTEMAS (200…
$ Nível                        <int> 5, 4, 3, 3, 3, 5, 4, 3, 3, 3, 5, 3, 3, 3, 4, 6, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 7, 4, 5, 7, 3, 4, 7, 3, 3, 3, 3, 4, 4, 4, 4, 3, 6, 3, 6, 7, 4, 3, 3, 3, 4…
$ Sigla                        <chr> "UFAM", "UFPA", "UFMA", "UEMA", "FUFPI", "UFC", "UNIFOR", "UECE/Prof", "UECE", "IFCE", "UFRN", "UFRN/Prof", "UERN/UFERSA", "UFPB/J.P", "UFCG", "UFPE", "UF…
$ `Tem doutorado`              <chr> "Sim", "Sim", "Não", "Não", "Não", "Sim", "Sim", "Não", "Não", "Não", "Sim", "Não", "Não", "Não", "Sim", "Sim", "Não", "Não", "Não", "Não", "Não", "Não", …
$ `Docentes colaboradores`     <dbl> 0.25, 5.50, 3.00, 6.25, 1.75, 2.00, 1.00, 6.25, 2.75, 0.75, 2.25, 2.00, 4.25, 5.00, 9.25, 22.25, 8.50, 3.50, 6.50, 13.75, 5.75, 3.75, 3.00, 0.50, 3.75, 1.…
$ `Docentes permanentes`       <dbl> 24.75, 14.00, 10.00, 14.00, 9.50, 20.75, 16.00, 15.75, 8.50, 9.00, 26.25, 8.50, 13.50, 20.00, 31.00, 58.50, 32.00, 14.00, 10.75, 12.50, 14.00, 17.25, 19.0…
$ `Docentes visitantes`        <dbl> 0.00, 0.00, 0.00, 0.00, 0.00, 0.75, 0.50, 1.00, 0.50, 0.00, 0.00, 0.00, 0.50, 0.00, 0.00, 0.00, 0.00, 0.50, 0.75, 4.00, 0.00, 0.50, 0.00, 0.00, 0.00, 0.00…
$ `Resumos em conf`            <int> 20, 23, 15, 5, 4, 10, 6, 136, 0, 24, 27, 4, 30, 20, 5, 14, 49, 63, 33, 3, 8, 3, 17, 14, 19, 6, 23, 69, 46, 33, 29, 5, 9, 29, 0, 1, 47, 21, 10, 7, 2, 17, 1…
$ `Resumos expandidos em conf` <int> 25, 24, 7, 10, 1, 68, 9, 13, 4, 6, 16, 5, 25, 29, 28, 81, 65, 38, 14, 6, 18, 101, 58, 26, 27, 6, 22, 75, 44, 48, 67, 10, 24, 100, 10, 3, 9, 9, 14, 22, 7, …
$ `Artigos em conf`            <int> 390, 284, 115, 73, 150, 269, 179, 0, 120, 92, 389, 60, 127, 322, 338, 763, 585, 132, 255, 79, 185, 124, 277, 255, 230, 130, 336, 359, 288, 504, 367, 36, 2…
$ Dissertacoes                 <int> 108, 77, 50, 25, 31, 75, 60, 129, 45, 3, 108, 12, 94, 108, 104, 433, 92, 26, 71, 93, 23, 54, 0, 41, 8, 41, 110, 154, 101, 110, 146, 55, 89, 213, 73, 39, 3…
$ Teses                        <int> 14, 0, 0, 0, 0, 24, 5, 0, 0, 0, 29, 0, 0, 0, 40, 144, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 5, 87, 16, 56, 68, 0, 0, 49, 0, 0, 0, 0, 4, 0, 0, 34, 0, 57, 0, 152, …
$ periodicos_A1                <int> 15, 19, 5, 1, 7, 21, 21, 0, 3, 8, 44, 0, 6, 21, 20, 93, 70, 16, 16, 0, 22, 8, 7, 11, 17, 2, 23, 46, 21, 52, 30, 3, 8, 90, 11, 5, 1, 8, 17, 20, 11, 24, 1, …
$ periodicos_A2                <int> 19, 21, 11, 1, 4, 32, 13, 0, 9, 2, 23, 2, 6, 20, 15, 43, 23, 5, 5, 1, 12, 4, 25, 18, 17, 2, 14, 89, 46, 52, 47, 3, 9, 95, 5, 2, 3, 3, 12, 11, 8, 24, 2, 49…
$ periodicos_B1                <int> 19, 38, 7, 3, 6, 26, 16, 2, 6, 4, 32, 4, 2, 11, 29, 51, 29, 11, 8, 1, 14, 6, 18, 16, 17, 4, 6, 59, 34, 34, 29, 2, 10, 46, 13, 2, 6, 8, 19, 8, 7, 19, 5, 52…
$ periodicos_B2                <int> 1, 12, 2, 6, 0, 0, 11, 0, 0, 2, 1, 0, 0, 4, 1, 10, 6, 1, 2, 0, 1, 3, 2, 1, 1, 0, 2, 11, 7, 10, 3, 1, 2, 11, 0, 7, 1, 3, 8, 1, 0, 5, 1, 15, 12, 33, 14, 7, …
$ periodicos_B3                <int> 3, 16, 2, 2, 3, 16, 15, 0, 4, 6, 9, 0, 2, 6, 16, 20, 13, 9, 2, 0, 12, 0, 6, 5, 6, 3, 1, 19, 10, 21, 11, 4, 12, 26, 1, 7, 0, 0, 13, 8, 4, 24, 5, 24, 20, 80…
$ periodicos_B4                <int> 0, 4, 0, 3, 3, 0, 1, 3, 1, 6, 0, 0, 4, 5, 1, 3, 3, 5, 3, 0, 4, 2, 2, 2, 2, 0, 0, 4, 4, 3, 0, 3, 0, 3, 1, 3, 2, 5, 7, 0, 0, 5, 0, 6, 6, 22, 8, 2, 2, 1, 0, …
$ periodicos_B5                <int> 10, 16, 8, 4, 12, 4, 16, 2, 6, 2, 11, 0, 4, 16, 9, 29, 18, 16, 18, 0, 3, 15, 6, 6, 4, 5, 2, 29, 20, 11, 7, 2, 8, 19, 10, 5, 7, 2, 3, 1, 6, 15, 4, 19, 7, 4…
$ periodicos_C                 <int> 9, 34, 12, 5, 2, 3, 11, 9, 5, 10, 16, 1, 14, 28, 8, 19, 24, 23, 9, 0, 7, 26, 10, 2, 2, 16, 6, 10, 16, 5, 14, 2, 15, 6, 3, 5, 4, 19, 22, 6, 1, 9, 2, 9, 7, …
$ periodicos_NA                <int> 7, 15, 8, 11, 12, 6, 19, 31, 7, 14, 19, 0, 27, 26, 18, 29, 19, 21, 25, 0, 7, 43, 18, 4, 14, 6, 15, 24, 32, 16, 15, 15, 25, 22, 11, 6, 9, 17, 3, 10, 11, 7,…
$ per_comaluno_A1              <int> 4, 1, 0, 0, 1, 7, 5, 0, 1, 0, 10, 0, 0, 2, 8, 63, 1, 1, 3, 0, 5, 0, 3, 1, 1, 0, 12, 12, 9, 13, 10, 2, 2, 40, 2, 0, 0, 4, 0, 9, 5, 11, 1, 12, 3, 96, 35, 8,…
$ per_comaluno_A2              <int> 5, 5, 5, 0, 2, 15, 3, 0, 3, 0, 3, 0, 0, 1, 11, 22, 0, 0, 0, 0, 2, 0, 13, 2, 3, 1, 6, 39, 9, 23, 21, 0, 1, 42, 2, 0, 1, 3, 3, 5, 2, 11, 1, 10, 4, 41, 44, 0…
$ per_comaluno_B1              <int> 4, 2, 5, 2, 2, 14, 6, 0, 2, 0, 17, 0, 1, 5, 18, 37, 0, 1, 1, 0, 2, 0, 9, 0, 1, 0, 2, 21, 10, 15, 14, 2, 1, 25, 6, 0, 1, 2, 7, 4, 2, 8, 2, 18, 7, 56, 37, 5…
$ per_comaluno_B2              <int> 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 2, 1, 0, 0, 5, 0, 0, 1, 3, 1, 1, 0, 1, 1, 1, 3, 9, 9, 1, 0, 0, 1, 1…
$ per_comaluno_B3              <int> 2, 2, 0, 1, 0, 7, 9, 0, 2, 0, 4, 0, 0, 1, 10, 12, 0, 0, 0, 0, 2, 0, 6, 4, 0, 0, 1, 8, 4, 10, 7, 1, 6, 16, 1, 1, 0, 0, 3, 4, 4, 14, 4, 2, 8, 37, 13, 1, 1, …
$ per_comaluno_B4              <int> 0, 0, 0, 0, 2, 0, 1, 0, 1, 3, 0, 0, 2, 0, 0, 2, 0, 2, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 3, 2, 0, 1, 0, 2, 0, 0, 0, 4, 0, 0, 0, 1, 0, 2, 1, 9, 7, 2, 0, 0, 0, 2…
$ per_comaluno_B5              <int> 5, 0, 4, 0, 8, 3, 6, 0, 4, 0, 4, 0, 2, 5, 3, 17, 1, 4, 5, 0, 0, 5, 2, 0, 1, 0, 2, 12, 7, 5, 4, 0, 4, 9, 5, 2, 4, 2, 0, 0, 4, 6, 2, 2, 5, 27, 11, 3, 0, 1, …
$ per_comaluno_C               <int> 6, 5, 3, 1, 2, 3, 7, 1, 2, 4, 8, 0, 11, 3, 8, 13, 4, 5, 2, 0, 0, 13, 6, 1, 0, 7, 5, 5, 8, 1, 9, 2, 8, 1, 3, 3, 0, 2, 2, 2, 1, 8, 1, 0, 2, 24, 9, 24, 1, 2,…
$ per_comaluno_NA              <int> 6, 14, 2, 2, 9, 3, 6, 4, 5, 1, 10, 0, 17, 6, 7, 17, 0, 3, 5, 0, 1, 8, 6, 1, 2, 1, 5, 12, 14, 4, 4, 8, 11, 14, 6, 2, 4, 5, 1, 6, 9, 4, 4, 3, 18, 29, 27, 17…

Produção e produtividade de artigos

Uma das maneiras de avaliar a produção dos docentes que a CAPES utiliza é quantificando a produção de artigos pelos docentes. Os artigos são categorizados em extratos ordenados (A1 é o mais alto), e separados entre artigos em conferências e periódicos. Usaremos para esse lab a produção em periódicos avaliados com A1, A2 e B1.

cacc = cacc_tudo %>%
  transmute(
    docentes = `Docentes permanentes`,
    producao = (periodicos_A1 + periodicos_A2 + periodicos_B1),
    produtividade = producao / docentes,
    mestrados = Dissertacoes,
    doutorados = Teses,
    tem_doutorado = tolower(`Tem doutorado`) == "sim",
    mestrados_pprof = mestrados / docentes,
    doutorados_pprof = doutorados / docentes
  )

cacc_md = cacc %>% 
  filter(tem_doutorado)

EDA

skimr::skim(cacc)
── Data Summary ────────────────────────
                           Values
Name                       cacc  
Number of rows             73    
Number of columns          8     
_______________________          
Column type frequency:           
  logical                  1     
  numeric                  7     
________________________         
Group variables            None  
cacc %>% 
  ggplot(aes(x = docentes)) + 
  geom_histogram(bins = 15, fill = paleta[1])


cacc %>% 
  ggplot(aes(x = producao)) + 
  geom_histogram(bins = 15, fill = paleta[2])


cacc %>% 
  ggplot(aes(x = produtividade)) + 
  geom_histogram(bins = 15, fill = paleta[3])

Se quisermos modelar o efeito do tamanho do programa em termos de docentes (permanentes) na quantidade de artigos publicados, podemos usar regressão.

Importante: sempre queremos ver os dados antes de fazermos qualquer modelo ou sumário:

cacc %>% 
  ggplot(aes(x = docentes, y = producao)) + 
  geom_point()

Parece que existe uma relação. Vamos criar um modelo então:

modelo1 = lm(producao ~ docentes, data = cacc)

tidy(modelo1, conf.int = TRUE, conf.level = 0.95)
glance(modelo1)

Para visualizar o modelo:

cacc_augmented = cacc %>% 
  add_predictions(modelo1) 

cacc_augmented %>% 
  ggplot(aes(x = docentes)) + 
  geom_line(aes(y = pred), colour = "brown") + 
  geom_point(aes(y = producao)) + 
  labs(y = "Produção do programa")

Se considerarmos que temos apenas uma amostra de todos os programas de pós em CC no Brasil, o que podemos inferir a partir desse modelo sobre a relação entre número de docentes permanentes e produção de artigos em programas de pós?

Normalmente reportaríamos o resultado da seguinte maneira, substituindo VarIndepX e todos os x’s e y’s pelos nomes e valores de fato:

Regressão múltipla foi utilizada para analisar se VarIndep1 e VarIndep2 tem uma associação significativa com VarDep.Os resultados da regressão indicam que um modelo com os 2 preditores no formato VarDep = XXX.VarIndep1 + YYY. VarIndep2 explicam XX,XX% da variância da variável de resposta (R2 = XX,XX).VarIndep1, medida como/em [unidade ou o que é o 0 e o que é 1] tem uma relação significativa com o erro (b = [yy,yy; zz,zz], IC com 95%), assim como VarIndep2 medida como [unidade ou o que é o 0 e o que é 1] (b = [yy,yy; zz,zz], IC com 95%). O aumento de 1 unidade de VarIndep1 produz uma mudança de xxx em VarDep, enquanto um aumento…

Produza aqui a sua versão desse texto, portanto:

SUBSTITUA ESSE TEXTO
Regressão simples foi utilizada para analisar se o números de docentes permanentes tem uma associação significativa com a produção de artigos em programas de pós-graduação em Ciências da Computação no Brasil. Os resultados da regressão indicam que um modelo com 1 preditor no formato produção_de_artigos = -41.27 + 4.81xnumeros_de_docentes_permanentes explica 81.46% da variância da produção de artigos (R² = 0.8146). Números de docentes permanentes, medido como unidade tem uma relação significativa com o erro (β₁=[4.269955, 5.356786], IC com 95%), assim como produção de artigos medida como unidade (β₀=[-54.293387, -28.252788], IC com 95%). O aumento de 1 unidade no números de docentes permanentes produz uma mudança de 4.81 unidades na produção de artigos.

Dito isso, o que significa a relação que você encontrou na prática para entendermos os programas de pós graduação no Brasil? E algum palpite de por que a relação que encontramos é forte?


SUBSTITUA ESSE TEXTO PELA SUA DISCUSSÃO DOS RESULTADOS

Investir na ampliação do quadro de docentes permanentes nos programas de pós-graduação em Ciências da Computação no Brasil é crucial para aumentar a produtividade científica. Isso não apenas eleva a capacidade de pesquisa, mas também melhora o suporte aos alunos de pós-graduação e fortalece a infraestrutura de pesquisa. A relação significativa e forte encontrada entre o número de docentes permanentes e a produção de artigos é evidenciada por um alto coeficiente de determinação, baixos valores-p, e erros padrões relativamente baixos, reforçando a eficácia desta estratégia para o crescimento e desenvolvimento dos programas de pós-graduação.

Essa relação sugere que para aumentar a produtividade científica, é fundamental investir na ampliação do quadro de docentes permanentes. Isso se traduz em diversos benefícios práticos:

  • Mais docentes permanentes significa maior capacidade de pesquisa, o que resulta em um aumento na produção de artigos científicos.

  • Um número maior de docentes permanentes proporciona melhor orientação e apoio aos alunos, o que pode levar a um maior número de teses e dissertações publicadas.

  • Com mais docentes, a infraestrutura de pesquisa pode ser melhor utilizada e ampliada, facilitando a realização de estudos de alta qualidade.

  • A relação encontrada é forte, e isso é evidenciado por diversos fatores estatísticos:

Coeficiente de Determinação (R²):

  • O valor de R² é 0.8146, indicando que o modelo se ajusta bem aos dados e explica uma grande parte da variabilidade na produção de artigos.

Valores-p para os Coeficientes:

  • Os valores-p para os coeficientes β₀ e β₁ são extremamente baixos (2.014731e-08 e 1.088465e-27, respectivamente), o que indica uma relação significativa entre a variável dependente (produção de artigos) e a variável independente (número de docentes permanentes).

Erro Padrão:

  • O erro padrão para as variáveis é relativamente baixo (6.5299245 para a variável dependente e 0.2725331 para a variável independente) em relação à faixa de valores que ambos podem assumir (0-355 para a produção de artigos e 0-67.25 para o número de docentes permanentes).

Esses fatores estatísticos demonstram que a relação entre o número de docentes permanentes e a produção de artigos é robusta e significativa. Isso sugere que políticas focadas na contratação de mais docentes permanentes podem ser altamente eficazes para aumentar a produção científica nos programas de pós-graduação em Ciências da Computação no Brasil.


Mais fatores

modelo2 = lm(producao ~ docentes + mestrados_pprof + doutorados_pprof + tem_doutorado, 
             data = cacc_md)

tidy(modelo2, conf.int = TRUE, conf.level = 0.95)
glance(modelo2)

E se considerarmos também o número de alunos?

modelo2 = lm(producao ~ docentes + mestrados + doutorados, data = cacc)

tidy(modelo2, conf.int = TRUE, conf.level = 0.95)
glance(modelo2)

Visualizar o modelo com muitas variáveis independentes fica mais difícil

para_plotar_modelo = cacc %>% 
  data_grid(producao = seq_range(producao, 10), # Crie um vetor de 10 valores no range
            docentes = seq_range(docentes, 4),  
            # mestrados = seq_range(mestrados, 3),
            mestrados = median(mestrados),
            doutorados = seq_range(doutorados, 3)) %>% 
  add_predictions(modelo2)

glimpse(para_plotar_modelo)
Rows: 120
Columns: 5
$ producao   <dbl> 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 0.00000, 39.44444, 39.44444, 39.44444, 39.44444, 39.44444, 39.44444, 39.4…
$ docentes   <dbl> 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27.91667, 47.58333, 47.58333, 47.58333, 67.25000, 67.25000, 67.25000, 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27.91667…
$ mestrados  <int> 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, …
$ doutorados <dbl> 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 76, 152, 0, 7…
$ pred       <dbl> 3.199123, 79.257725, 155.316327, 72.026777, 148.085378, 224.143980, 140.854430, 216.913032, 292.971634, 209.682084, 285.740686, 361.799287, 3.199123, 79.257725, 155.316327,…
para_plotar_modelo %>% 
  ggplot(aes(x = docentes, y = pred)) + 
  geom_line(aes(group = doutorados, colour = doutorados)) + 
  geom_point(data = cacc, aes(y = producao, colour = doutorados))

Considerando agora esses três fatores, o que podemos dizer sobre como cada um deles se relaciona com a produção de um programa de pós em CC? E sobre o modelo? Ele explica mais que o modelo 1?


EXPLICAÇÃO: Substitua esse texto por texto feito tal qual o que usamos com uma variável

Regressão múltipla foi utilizada para analisar se o números de docentes permanentes, mestrados E doutorados tem uma associação significativa com a produção de artigos em cursos de pós graduação em Ciências da Computação no Brasil. Os resultados da regressão indicam que um modelo com 3 preditores no formato produção de artigos = -14.37 + 3.50xnumeros_de_docentes_permanentes -0.20xmestrado + 1.00xdoutorado explica 87.07% da variância da produção de artigos (R² = 0.8707). Números de docentes permanentes, medido como unidade tem uma relação significativa com o erro (β₁=[2.5827257, 4.4166967], IC com 95%); mestrados, medido como unidade-aluno (β₂=[-0.3577316, -0.0321714], IC com 95%);doutorados, medido como unidade-aluno (β₃=[0.6355112, 1.3660309], IC com 95%); assim como produção de artigos, medida como unidade (β₀=[-29.2367845, 0.5041691], IC com 95%). O aumento de 1 unidade no (i) números de docentes permanentes, produz uma mudança de + 3.50 unidades; (ii) nos mestrados, produz uma mudança de -0.20 unidades; e, (iii) nos doutorados, produz uma mudança de +1.00, na produção de artigos.

A complexidade do modelo aumenta com a inclusão de mais variáveis, mas ele não oferece uma explicação significativamente melhor do que o modelo anterior. O fator mais relevante ainda é o números de docentes permanentes, que continua sendo o principal determinante para mudanças na produção de artigos.


Agora produtividade

Diferente de medirmos produção (total produzido), é medirmos produtividade (produzido / utilizado). Abaixo focaremos nessa análise. Para isso crie um modelo que investiga como um conjunto de fatores que você julga que são relevantes se relacionam com a produtividade dos programas. Crie um modelo que avalie como pelo menos 3 fatores se relacionam com a produtividade de um programa. Pode reutilizar fatores que já definimos e analizamos para produção. Mas cuidado para não incluir fatores que sejam função linear de outros já incluídos (ex: incluir A, B e um tercero C=A+B)

Produza abaixo o modelo e um texto que comente (i) o modelo, tal como os que fizemos antes, e (ii) as implicações - o que aprendemos sobre como funcionam programas de pós no brasil?.

Produção do modelo

# Construir o modelo de regressão múltipla
modelo3 <- lm(produtividade ~ docentes + mestrados_pprof + doutorados_pprof , data = cacc_augmented)

# Visualizar os coeficientes do modelo com intervalos de confiança
tidy(modelo3, conf.int = TRUE, conf.level = 0.95)

# Obter estatísticas resumidas do modelo
glance(modelo3)
NA

Visualizar o modelo com muitas variáveis independentes

# Certifique-se de que cacc_md está sendo utilizado, pois contém as variáveis necessárias
para_plotar_modelo3 <- cacc_augmented %>% 
  data_grid(produtividade = seq_range(produtividade, 10), # Crie um vetor de 10 valores no range
            docentes = seq_range(docentes, 4),  
            mestrados_pprof = median(mestrados_pprof),
            doutorados_pprof = seq_range(doutorados_pprof, 3)) %>% 
  add_predictions(modelo3)

glimpse(para_plotar_modelo3)
Rows: 120
Columns: 5
$ produtividade    <dbl> 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.0000000, 0.6291834, 0.6291834, 0.6291834, 0…
$ docentes         <dbl> 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27.91667, 47.58333, 47.58333, 47.58333, 67.25000, 67.25000, 67.25000, 8.25000, 8.25000, 8.25000, 27.91667, 27.91667, 27…
$ mestrados_pprof  <dbl> 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.575221, 3.5752…
$ doutorados_pprof <dbl> 0.000000, 1.346535, 2.693069, 0.000000, 1.346535, 2.693069, 0.000000, 1.346535, 2.693069, 0.000000, 1.346535, 2.693069, 0.000000, 1.346535, 2.693069, 0.000000, 1.3465…
$ pred             <dbl> 1.668661, 2.924239, 4.179817, 2.137784, 3.393362, 4.648940, 2.606907, 3.862485, 5.118063, 3.076030, 4.331608, 5.587186, 1.668661, 2.924239, 4.179817, 2.137784, 3.3933…

Visualizar o modelo

# Plotando o modelo de regressão múltipla
para_plotar_modelo3 %>% 
  ggplot(aes(x = docentes, y = pred)) + 
  geom_line(aes(group = doutorados_pprof, colour = doutorados_pprof)) + 
  geom_point(data = cacc_augmented, aes(y = produtividade, colour = doutorados_pprof)) + 
  labs(y = "Produtividade do programa", x = "Número de docentes",
       colour = "Dr. por prof", title = "Modelo de Regressão Múltipla para Produtividade") +
  #ylim(0, NA) +  # Ajusta o eixo Y para começar em 0
  theme_minimal()

Texto comentando o modelo desenvolvido

Regressão múltipla foi utilizada para analisar se o número de docentes permanentes, número de mestrandos por professor e número de doutorados por professor têm uma associação significativa com a produtividade dos cursos de pós-graduação em Ciências da Computação no Brasil. Os resultados da regressão indicam que um modelo com 3 preditores no formato produtividade = 1.44 + 0.02xNumero_docentes_permanentes + 0.01xmestrados_prof + 0.93xdoutorados_prof explica 44.01% da variância da produtividade (R² = 0.4401). Número_docentes_permanentes, medido como unidade tem uma relação significativa com o erro (β₁=[-0.003999902, 0.05170732], IC com 95%;mestrados_prof, medido como unidade (β₂=[-0.126748608, 0.14638329], IC com 95%); doutorados_prof, medido como unidade (β₃=[0.463960818, 1.40094156], IC com 95%); assim como produtividade, medida como a razão da produção pelo número de docente (β₀=[0.706349051, 2.16718845], IC com 95%). O aumento de 1 unidade: (i) no número de docentes permanentes, produz uma mudança de + 0.02 unidades; (ii) nos mestrados_prof, produz uma mudança de + 0.01 unidades; e (iii) nos doutorados_prof, produz uma mudança de + 0.93, na produtividade da instituição.

Implicações: o que aprendemos sobre como funcionam programas de pós no brasil?

LS0tDQp0aXRsZTogIlJlZ3Jlc3PDo28gbGluZWFyIG5hIHByw6F0aWNhIg0KYXV0aG9yOiBEYW5pZWxseSBHdWFsYmVydG8NCmRhdGE6IDExLzA2LzIwMjQNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoYnJvb20pDQpsaWJyYXJ5KG1vZGVscikNCnNvdXJjZShoZXJlOjpoZXJlKCJjb2RlL2xpYi5SIikpDQp0aGVtZV9zZXQodGhlbWVfYncoKSkNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KHRpZHkgPSBGQUxTRSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcud2lkdGggPSA2LA0KICAgICAgICAgICAgICAgICAgICAgIGZpZy5oZWlnaHQgPSA1KQ0KDQpwYWxldGEgPSBjKCIjNDA0RTREIiwNCiAgICAgICAgICAgIiM5MkRDRTUiLA0KICAgICAgICAgICAiIzkzOEJBMSIsDQogICAgICAgICAgICIjMkQzMTQyIiwNCiAgICAgICAgICAgIiNGNDc0M0IiKQ0KYGBgDQoNCiMjIERhZG9zIGRhIENBUEVTIHNvYnJlIGF2YWxpYcOnw6NvIGRhIHDDs3MtZ3JhZHVhw6fDo28NCg0KQSBDQVBFUyDDqSB1bSDDs3Jnw6NvIGRvIE1FQyBxdWUgdGVtIGEgYXRyaWJ1acOnw6NvIGRlIGFjb21wYW5oYXIgYSBww7NzLWdyYWR1YcOnw6NvIG5hIHVuaXZlcnNpZGFkZSBicmFzaWxlaXJhLiBVbWEgZGFzIGZvcm1hcyBxdWUgZWxhIGVuY29udHJvdSBkZSBmYXplciBpc3NvIGUgcGVsYSBxdWFsIGVsYSDDqSBiYXN0YW50ZSBjcml0aWNhZGEgw6kgYXRyYXbDqXMgZGUgdW1hIGF2YWxpYcOnw6NvIHF1YW50aXRhdGl2YSBhIGNhZGEgeCBhbm9zIChlcmEgMywgbXVkb3UgcGFyYSA0KS4gDQoNClVzYXJlbW9zIGRhZG9zIGRhIHBlbsO6bHRpbWEgYXZhbGlhw6fDo28gZGEgQ0FQRVM6IA0KDQpgYGB7cn0NCmNhY2NfdHVkbyA9IHJlYWRfcHJvamVjdGRhdGEoKQ0KDQpnbGltcHNlKGNhY2NfdHVkbykNCmBgYA0KDQojIyMgUHJvZHXDp8OjbyBlIHByb2R1dGl2aWRhZGUgZGUgYXJ0aWdvcw0KDQpVbWEgZGFzIG1hbmVpcmFzIGRlIGF2YWxpYXIgYSBwcm9kdcOnw6NvIGRvcyBkb2NlbnRlcyBxdWUgYSBDQVBFUyB1dGlsaXphIMOpIHF1YW50aWZpY2FuZG8gYSBwcm9kdcOnw6NvIGRlIGFydGlnb3MgcGVsb3MgZG9jZW50ZXMuIE9zIGFydGlnb3Mgc8OjbyBjYXRlZ29yaXphZG9zIGVtIGV4dHJhdG9zIG9yZGVuYWRvcyAoQTEgw6kgbyBtYWlzIGFsdG8pLCBlIHNlcGFyYWRvcyBlbnRyZSBhcnRpZ29zIGVtIGNvbmZlcsOqbmNpYXMgZSBwZXJpw7NkaWNvcy4gVXNhcmVtb3MgcGFyYSBlc3NlIGxhYiBhIHByb2R1w6fDo28gZW0gcGVyacOzZGljb3MgYXZhbGlhZG9zIGNvbSBBMSwgQTIgZSBCMS4gDQoNCmBgYHtyfQ0KY2FjYyA9IGNhY2NfdHVkbyAlPiUNCiAgdHJhbnNtdXRlKA0KICAgIGRvY2VudGVzID0gYERvY2VudGVzIHBlcm1hbmVudGVzYCwNCiAgICBwcm9kdWNhbyA9IChwZXJpb2RpY29zX0ExICsgcGVyaW9kaWNvc19BMiArIHBlcmlvZGljb3NfQjEpLA0KICAgIHByb2R1dGl2aWRhZGUgPSBwcm9kdWNhbyAvIGRvY2VudGVzLA0KICAgIG1lc3RyYWRvcyA9IERpc3NlcnRhY29lcywNCiAgICBkb3V0b3JhZG9zID0gVGVzZXMsDQogICAgdGVtX2RvdXRvcmFkbyA9IHRvbG93ZXIoYFRlbSBkb3V0b3JhZG9gKSA9PSAic2ltIiwNCiAgICBtZXN0cmFkb3NfcHByb2YgPSBtZXN0cmFkb3MgLyBkb2NlbnRlcywNCiAgICBkb3V0b3JhZG9zX3Bwcm9mID0gZG91dG9yYWRvcyAvIGRvY2VudGVzDQogICkNCg0KY2FjY19tZCA9IGNhY2MgJT4lIA0KICBmaWx0ZXIodGVtX2RvdXRvcmFkbykNCmBgYA0KDQoNCiMjIyBFREENCg0KYGBge3J9DQpza2ltcjo6c2tpbShjYWNjKQ0KYGBgDQoNCg0KYGBge3J9DQpjYWNjICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZG9jZW50ZXMpKSArIA0KICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTUsIGZpbGwgPSBwYWxldGFbMV0pDQoNCmNhY2MgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBwcm9kdWNhbykpICsgDQogIGdlb21faGlzdG9ncmFtKGJpbnMgPSAxNSwgZmlsbCA9IHBhbGV0YVsyXSkNCg0KY2FjYyAlPiUgDQogIGdncGxvdChhZXMoeCA9IHByb2R1dGl2aWRhZGUpKSArIA0KICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMTUsIGZpbGwgPSBwYWxldGFbM10pDQpgYGANCg0KU2UgcXVpc2VybW9zIG1vZGVsYXIgbyBlZmVpdG8gZG8gdGFtYW5obyBkbyBwcm9ncmFtYSBlbSB0ZXJtb3MgZGUgZG9jZW50ZXMgKHBlcm1hbmVudGVzKSBuYSBxdWFudGlkYWRlIGRlIGFydGlnb3MgcHVibGljYWRvcywgcG9kZW1vcyB1c2FyIHJlZ3Jlc3PDo28uIA0KDQoqSW1wb3J0YW50ZSo6IHNlbXByZSBxdWVyZW1vcyB2ZXIgb3MgZGFkb3MgYW50ZXMgZGUgZmF6ZXJtb3MgcXVhbHF1ZXIgbW9kZWxvIG91IHN1bcOhcmlvOiANCg0KYGBge3J9DQpjYWNjICU+JSANCiAgZ2dwbG90KGFlcyh4ID0gZG9jZW50ZXMsIHkgPSBwcm9kdWNhbykpICsgDQogIGdlb21fcG9pbnQoKQ0KYGBgDQoNClBhcmVjZSBxdWUgZXhpc3RlIHVtYSByZWxhw6fDo28uIFZhbW9zIGNyaWFyIHVtIG1vZGVsbyBlbnTDo286DQoNCmBgYHtyfQ0KbW9kZWxvMSA9IGxtKHByb2R1Y2FvIH4gZG9jZW50ZXMsIGRhdGEgPSBjYWNjKQ0KDQp0aWR5KG1vZGVsbzEsIGNvbmYuaW50ID0gVFJVRSwgY29uZi5sZXZlbCA9IDAuOTUpDQpnbGFuY2UobW9kZWxvMSkNCmBgYA0KDQpQYXJhIHZpc3VhbGl6YXIgbyBtb2RlbG86DQoNCmBgYHtyfQ0KY2FjY19hdWdtZW50ZWQgPSBjYWNjICU+JSANCiAgYWRkX3ByZWRpY3Rpb25zKG1vZGVsbzEpIA0KDQpjYWNjX2F1Z21lbnRlZCAlPiUgDQogIGdncGxvdChhZXMoeCA9IGRvY2VudGVzKSkgKyANCiAgZ2VvbV9saW5lKGFlcyh5ID0gcHJlZCksIGNvbG91ciA9ICJicm93biIpICsgDQogIGdlb21fcG9pbnQoYWVzKHkgPSBwcm9kdWNhbykpICsgDQogIGxhYnMoeSA9ICJQcm9kdcOnw6NvIGRvIHByb2dyYW1hIikNCmBgYA0KDQpTZSBjb25zaWRlcmFybW9zIHF1ZSB0ZW1vcyBhcGVuYXMgdW1hIGFtb3N0cmEgZGUgdG9kb3Mgb3MgcHJvZ3JhbWFzIGRlIHDDs3MgZW0gQ0Mgbm8gQnJhc2lsLCBvIHF1ZSBwb2RlbW9zIGluZmVyaXIgYSBwYXJ0aXIgZGVzc2UgbW9kZWxvIHNvYnJlIGEgcmVsYcOnw6NvIGVudHJlIG7Dum1lcm8gZGUgZG9jZW50ZXMgcGVybWFuZW50ZXMgZSBwcm9kdcOnw6NvIGRlIGFydGlnb3MgZW0gcHJvZ3JhbWFzIGRlIHDDs3M/IA0KDQpOb3JtYWxtZW50ZSByZXBvcnRhcsOtYW1vcyBvIHJlc3VsdGFkbyBkYSBzZWd1aW50ZSBtYW5laXJhLCBzdWJzdGl0dWluZG8gVmFySW5kZXBYIGUgdG9kb3Mgb3MgeCdzIGUgeSdzIHBlbG9zIG5vbWVzIGUgdmFsb3JlcyBkZSBmYXRvOg0KDQo+IFJlZ3Jlc3PDo28gbcO6bHRpcGxhIGZvaSB1dGlsaXphZGEgcGFyYSBhbmFsaXNhciBzZSBWYXJJbmRlcDEgZSBWYXJJbmRlcDIgdGVtIHVtYSBhc3NvY2lhw6fDo28gc2lnbmlmaWNhdGl2YSBjb20gVmFyRGVwLk9zIHJlc3VsdGFkb3MgZGEgcmVncmVzc8OjbyBpbmRpY2FtIHF1ZSB1bSBtb2RlbG8gY29tIG9zIDIgcHJlZGl0b3JlcyBubyBmb3JtYXRvIFZhckRlcCA9IFhYWC5WYXJJbmRlcDEgKyBZWVkuIFZhckluZGVwMiBleHBsaWNhbSBYWCxYWCUgZGEgdmFyacOibmNpYSBkYSB2YXJpw6F2ZWwgZGUgcmVzcG9zdGEgKFIyID0gWFgsWFgpLlZhckluZGVwMSwgbWVkaWRhIGNvbW8vZW0gW3VuaWRhZGUgb3UgbyBxdWUgw6kgbyAwIGUgbyBxdWUgw6kgMV0gdGVtIHVtYSByZWxhw6fDo28gc2lnbmlmaWNhdGl2YSBjb20gbyBlcnJvIChiID0gW3l5LHl5OyB6eix6el0sIElDIGNvbSA5NSUpLCBhc3NpbSBjb21vIFZhckluZGVwMiBtZWRpZGEgY29tbyBbdW5pZGFkZSBvdSBvIHF1ZSDDqSBvIDAgZSBvIHF1ZSDDqSAxXSAoYiA9IFt5eSx5eTsgenosenpdLCBJQyBjb20gOTUlKS4gTyBhdW1lbnRvIGRlIDEgdW5pZGFkZSBkZSBWYXJJbmRlcDEgcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSB4eHggZW0gVmFyRGVwLCBlbnF1YW50byB1bSBhdW1lbnRvLi4uDQoNClByb2R1emEgYXF1aSBhIHN1YSB2ZXJzw6NvIGRlc3NlIHRleHRvLCBwb3J0YW50bzoNCg0KLS0tLS0NCipTVUJTVElUVUEgRVNTRSBURVhUTyoNCg0KUmVncmVzc8OjbyAqc2ltcGxlcyogZm9pIHV0aWxpemFkYSBwYXJhIGFuYWxpc2FyIHNlIG8gKm7Dum1lcm9zIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzKiB0ZW0gdW1hIGFzc29jaWHDp8OjbyBzaWduaWZpY2F0aXZhIGNvbSBhICpwcm9kdcOnw6NvIGRlIGFydGlnb3MqIGVtIHByb2dyYW1hcyBkZSBww7NzLWdyYWR1YcOnw6NvIGVtIENpw6puY2lhcyBkYSBDb21wdXRhw6fDo28gbm8gQnJhc2lsLiBPcyByZXN1bHRhZG9zIGRhIHJlZ3Jlc3PDo28gaW5kaWNhbSBxdWUgdW0gbW9kZWxvIGNvbSAxIHByZWRpdG9yIG5vIGZvcm1hdG8gKnByb2R1w6fDo29fZGVfYXJ0aWdvcyogPSAtNDEuMjcgKyA0LjgxeG51bWVyb3NfZGVfZG9jZW50ZXNfcGVybWFuZW50ZXMgZXhwbGljYSA4MS40NiUgZGEgdmFyacOibmNpYSBkYSAqcHJvZHXDp8OjbyBkZSBhcnRpZ29zKiAoUsKyID0gMC44MTQ2KS4gKk7Dum1lcm9zIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzKiwgbWVkaWRvIGNvbW8gdW5pZGFkZSB0ZW0gdW1hIHJlbGHDp8OjbyBzaWduaWZpY2F0aXZhIGNvbSBvIGVycm8gKM6y4oKBPVs0LjI2OTk1NSwgNS4zNTY3ODZdLCBJQyBjb20gOTUlKSwgYXNzaW0gY29tbyAqcHJvZHXDp8OjbyBkZSBhcnRpZ29zKiBtZWRpZGEgY29tbyB1bmlkYWRlICjOsuKCgD1bLTU0LjI5MzM4NywgLTI4LjI1Mjc4OF0sIElDIGNvbSA5NSUpLiBPIGF1bWVudG8gZGUgMSB1bmlkYWRlIG5vICpuw7ptZXJvcyBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcyogcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSA0LjgxIHVuaWRhZGVzIG5hICpwcm9kdcOnw6NvIGRlIGFydGlnb3MqLg0KDQotLS0tLQ0KDQpEaXRvIGlzc28sIG8gcXVlIHNpZ25pZmljYSBhIHJlbGHDp8OjbyBxdWUgdm9jw6ogZW5jb250cm91IG5hIHByw6F0aWNhIHBhcmEgZW50ZW5kZXJtb3Mgb3MgcHJvZ3JhbWFzIGRlIHDDs3MgZ3JhZHVhw6fDo28gbm8gQnJhc2lsPyBFIGFsZ3VtIHBhbHBpdGUgZGUgcG9yIHF1ZSBhIHJlbGHDp8OjbyBxdWUgZW5jb250cmFtb3Mgw6kgZm9ydGU/DQoNCi0tLS0tDQoNCipTVUJTVElUVUEgRVNTRSBURVhUTyBQRUxBIFNVQSBESVNDVVNTw4NPIERPUyBSRVNVTFRBRE9TKg0KDQpJbnZlc3RpciBuYSBhbXBsaWHDp8OjbyBkbyBxdWFkcm8gZGUgZG9jZW50ZXMgcGVybWFuZW50ZXMgbm9zIHByb2dyYW1hcyBkZSBww7NzLWdyYWR1YcOnw6NvIGVtIENpw6puY2lhcyBkYSBDb21wdXRhw6fDo28gbm8gQnJhc2lsIMOpIGNydWNpYWwgcGFyYSBhdW1lbnRhciBhIHByb2R1dGl2aWRhZGUgY2llbnTDrWZpY2EuIElzc28gbsOjbyBhcGVuYXMgZWxldmEgYSBjYXBhY2lkYWRlIGRlIHBlc3F1aXNhLCBtYXMgdGFtYsOpbSBtZWxob3JhIG8gc3Vwb3J0ZSBhb3MgYWx1bm9zIGRlIHDDs3MtZ3JhZHVhw6fDo28gZSBmb3J0YWxlY2UgYSBpbmZyYWVzdHJ1dHVyYSBkZSBwZXNxdWlzYS4gQSByZWxhw6fDo28gc2lnbmlmaWNhdGl2YSBlIGZvcnRlIGVuY29udHJhZGEgZW50cmUgbyBuw7ptZXJvIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzIGUgYSBwcm9kdcOnw6NvIGRlIGFydGlnb3Mgw6kgZXZpZGVuY2lhZGEgcG9yIHVtIGFsdG8gY29lZmljaWVudGUgZGUgZGV0ZXJtaW5hw6fDo28sIGJhaXhvcyB2YWxvcmVzLXAsIGUgZXJyb3MgcGFkcsO1ZXMgcmVsYXRpdmFtZW50ZSBiYWl4b3MsIHJlZm9yw6dhbmRvIGEgZWZpY8OhY2lhIGRlc3RhIGVzdHJhdMOpZ2lhIHBhcmEgbyBjcmVzY2ltZW50byBlIGRlc2Vudm9sdmltZW50byBkb3MgcHJvZ3JhbWFzIGRlIHDDs3MtZ3JhZHVhw6fDo28uDQoNCg0KRXNzYSByZWxhw6fDo28gc3VnZXJlIHF1ZSBwYXJhIGF1bWVudGFyIGEgcHJvZHV0aXZpZGFkZSBjaWVudMOtZmljYSwgw6kgZnVuZGFtZW50YWwgaW52ZXN0aXIgbmEgYW1wbGlhw6fDo28gZG8gcXVhZHJvIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzLiBJc3NvIHNlIHRyYWR1eiBlbSBkaXZlcnNvcyBiZW5lZsOtY2lvcyBwcsOhdGljb3M6DQoNCiANCi0gTWFpcyBkb2NlbnRlcyBwZXJtYW5lbnRlcyBzaWduaWZpY2EgbWFpb3IgY2FwYWNpZGFkZSBkZSBwZXNxdWlzYSwgbyBxdWUgcmVzdWx0YSBlbSB1bSBhdW1lbnRvIG5hIHByb2R1w6fDo28gZGUgYXJ0aWdvcyBjaWVudMOtZmljb3MuDQoNCi0gVW0gbsO6bWVybyBtYWlvciBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcyBwcm9wb3JjaW9uYSBtZWxob3Igb3JpZW50YcOnw6NvIGUgYXBvaW8gYW9zIGFsdW5vcywgbyBxdWUgcG9kZSBsZXZhciBhIHVtIG1haW9yIG7Dum1lcm8gZGUgdGVzZXMgZSBkaXNzZXJ0YcOnw7VlcyBwdWJsaWNhZGFzLg0KDQoNCi0gQ29tIG1haXMgZG9jZW50ZXMsIGEgaW5mcmFlc3RydXR1cmEgZGUgcGVzcXVpc2EgcG9kZSBzZXIgbWVsaG9yIHV0aWxpemFkYSBlIGFtcGxpYWRhLCBmYWNpbGl0YW5kbyBhIHJlYWxpemHDp8OjbyBkZSBlc3R1ZG9zIGRlIGFsdGEgcXVhbGlkYWRlLg0KDQoNCi0gQSByZWxhw6fDo28gZW5jb250cmFkYSDDqSBmb3J0ZSwgZSBpc3NvIMOpIGV2aWRlbmNpYWRvIHBvciBkaXZlcnNvcyBmYXRvcmVzIGVzdGF0w61zdGljb3M6DQoNCkNvZWZpY2llbnRlIGRlIERldGVybWluYcOnw6NvIChSwrIpOg0KDQotIE8gdmFsb3IgZGUgUsKyIMOpIDAuODE0NiwgaW5kaWNhbmRvIHF1ZSBvIG1vZGVsbyBzZSBhanVzdGEgYmVtIGFvcyBkYWRvcyBlIGV4cGxpY2EgdW1hIGdyYW5kZSBwYXJ0ZSBkYSB2YXJpYWJpbGlkYWRlIG5hIHByb2R1w6fDo28gZGUgYXJ0aWdvcy4NCg0KVmFsb3Jlcy1wIHBhcmEgb3MgQ29lZmljaWVudGVzOg0KDQotIE9zIHZhbG9yZXMtcCBwYXJhIG9zIGNvZWZpY2llbnRlcyDOsuKCgCBlIM6y4oKBIHPDo28gZXh0cmVtYW1lbnRlIGJhaXhvcyAoMi4wMTQ3MzFlLTA4IGUgMS4wODg0NjVlLTI3LCByZXNwZWN0aXZhbWVudGUpLCBvIHF1ZSBpbmRpY2EgdW1hIHJlbGHDp8OjbyBzaWduaWZpY2F0aXZhIGVudHJlIGEgdmFyacOhdmVsIGRlcGVuZGVudGUgKHByb2R1w6fDo28gZGUgYXJ0aWdvcykgZSBhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUgKG7Dum1lcm8gZGUgZG9jZW50ZXMgcGVybWFuZW50ZXMpLg0KDQpFcnJvIFBhZHLDo286DQoNCi0gTyBlcnJvIHBhZHLDo28gcGFyYSBhcyB2YXJpw6F2ZWlzIMOpIHJlbGF0aXZhbWVudGUgYmFpeG8gKDYuNTI5OTI0NSBwYXJhIGEgdmFyacOhdmVsIGRlcGVuZGVudGUgZSAwLjI3MjUzMzEgcGFyYSBhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUpIGVtIHJlbGHDp8OjbyDDoCBmYWl4YSBkZSB2YWxvcmVzIHF1ZSBhbWJvcyBwb2RlbSBhc3N1bWlyICgwLTM1NSBwYXJhIGEgcHJvZHXDp8OjbyBkZSBhcnRpZ29zIGUgMC02Ny4yNSBwYXJhIG8gbsO6bWVybyBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcykuDQoNCg0KRXNzZXMgZmF0b3JlcyBlc3RhdMOtc3RpY29zIGRlbW9uc3RyYW0gcXVlIGEgcmVsYcOnw6NvIGVudHJlIG8gbsO6bWVybyBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcyBlIGEgcHJvZHXDp8OjbyBkZSBhcnRpZ29zIMOpIHJvYnVzdGEgZSBzaWduaWZpY2F0aXZhLiBJc3NvIHN1Z2VyZSBxdWUgcG9sw610aWNhcyBmb2NhZGFzIG5hIGNvbnRyYXRhw6fDo28gZGUgbWFpcyBkb2NlbnRlcyBwZXJtYW5lbnRlcyBwb2RlbSBzZXIgYWx0YW1lbnRlIGVmaWNhemVzIHBhcmEgYXVtZW50YXIgYSBwcm9kdcOnw6NvIGNpZW50w61maWNhIG5vcyBwcm9ncmFtYXMgZGUgcMOzcy1ncmFkdWHDp8OjbyBlbSBDacOqbmNpYXMgZGEgQ29tcHV0YcOnw6NvIG5vIEJyYXNpbC4NCg0KDQotLS0tLQ0KDQojIyBNYWlzIGZhdG9yZXMNCg0KYGBge3J9DQptb2RlbG8yID0gbG0ocHJvZHVjYW8gfiBkb2NlbnRlcyArIG1lc3RyYWRvc19wcHJvZiArIGRvdXRvcmFkb3NfcHByb2YgKyB0ZW1fZG91dG9yYWRvLCANCiAgICAgICAgICAgICBkYXRhID0gY2FjY19tZCkNCg0KdGlkeShtb2RlbG8yLCBjb25mLmludCA9IFRSVUUsIGNvbmYubGV2ZWwgPSAwLjk1KQ0KZ2xhbmNlKG1vZGVsbzIpDQpgYGANCg0KRSBzZSBjb25zaWRlcmFybW9zIHRhbWLDqW0gbyBuw7ptZXJvIGRlIGFsdW5vcz8NCg0KYGBge3J9DQptb2RlbG8yID0gbG0ocHJvZHVjYW8gfiBkb2NlbnRlcyArIG1lc3RyYWRvcyArIGRvdXRvcmFkb3MsIGRhdGEgPSBjYWNjKQ0KDQp0aWR5KG1vZGVsbzIsIGNvbmYuaW50ID0gVFJVRSwgY29uZi5sZXZlbCA9IDAuOTUpDQpnbGFuY2UobW9kZWxvMikNCmBgYA0KDQpWaXN1YWxpemFyIG8gbW9kZWxvIGNvbSBtdWl0YXMgdmFyacOhdmVpcyBpbmRlcGVuZGVudGVzIGZpY2EgbWFpcyBkaWbDrWNpbA0KDQpgYGB7cn0NCnBhcmFfcGxvdGFyX21vZGVsbyA9IGNhY2MgJT4lIA0KICBkYXRhX2dyaWQocHJvZHVjYW8gPSBzZXFfcmFuZ2UocHJvZHVjYW8sIDEwKSwgIyBDcmllIHVtIHZldG9yIGRlIDEwIHZhbG9yZXMgbm8gcmFuZ2UNCiAgICAgICAgICAgIGRvY2VudGVzID0gc2VxX3JhbmdlKGRvY2VudGVzLCA0KSwgIA0KICAgICAgICAgICAgIyBtZXN0cmFkb3MgPSBzZXFfcmFuZ2UobWVzdHJhZG9zLCAzKSwNCiAgICAgICAgICAgIG1lc3RyYWRvcyA9IG1lZGlhbihtZXN0cmFkb3MpLA0KICAgICAgICAgICAgZG91dG9yYWRvcyA9IHNlcV9yYW5nZShkb3V0b3JhZG9zLCAzKSkgJT4lIA0KICBhZGRfcHJlZGljdGlvbnMobW9kZWxvMikNCg0KZ2xpbXBzZShwYXJhX3Bsb3Rhcl9tb2RlbG8pDQoNCmBgYA0KDQpgYGB7cn0NCnBhcmFfcGxvdGFyX21vZGVsbyAlPiUgDQogIGdncGxvdChhZXMoeCA9IGRvY2VudGVzLCB5ID0gcHJlZCkpICsgDQogIGdlb21fbGluZShhZXMoZ3JvdXAgPSBkb3V0b3JhZG9zLCBjb2xvdXIgPSBkb3V0b3JhZG9zKSkgKyANCiAgZ2VvbV9wb2ludChkYXRhID0gY2FjYywgYWVzKHkgPSBwcm9kdWNhbywgY29sb3VyID0gZG91dG9yYWRvcykpDQpgYGANCg0KQ29uc2lkZXJhbmRvIGFnb3JhIGVzc2VzIHRyw6pzIGZhdG9yZXMsIG8gcXVlIHBvZGVtb3MgZGl6ZXIgc29icmUgY29tbyBjYWRhIHVtIGRlbGVzIHNlIHJlbGFjaW9uYSBjb20gYSBwcm9kdcOnw6NvIGRlIHVtIHByb2dyYW1hIGRlIHDDs3MgZW0gQ0M/IEUgc29icmUgbyBtb2RlbG8/IEVsZSBleHBsaWNhIG1haXMgcXVlIG8gbW9kZWxvIDE/IA0KDQotLS0tLQ0KDQoqKkVYUExJQ0HDh8ODTyoqOiAqU3Vic3RpdHVhIGVzc2UgdGV4dG8gcG9yIHRleHRvIGZlaXRvIHRhbCBxdWFsIG8gcXVlIHVzYW1vcyBjb20gdW1hIHZhcmnDoXZlbCoNCg0KUmVncmVzc8OjbyBtw7psdGlwbGEgZm9pIHV0aWxpemFkYSBwYXJhIGFuYWxpc2FyIHNlIG8gKm7Dum1lcm9zIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzKiwgKm1lc3RyYWRvcyogRSAqZG91dG9yYWRvcyogdGVtIHVtYSBhc3NvY2lhw6fDo28gc2lnbmlmaWNhdGl2YSBjb20gYSAqcHJvZHXDp8OjbyBkZSBhcnRpZ29zKiBlbSBjdXJzb3MgZGUgcMOzcyBncmFkdWHDp8OjbyBlbSBDacOqbmNpYXMgZGEgQ29tcHV0YcOnw6NvIG5vIEJyYXNpbC4gT3MgcmVzdWx0YWRvcyBkYSByZWdyZXNzw6NvIGluZGljYW0gcXVlIHVtIG1vZGVsbyBjb20gMyBwcmVkaXRvcmVzIG5vIGZvcm1hdG8gKnByb2R1w6fDo28gZGUgYXJ0aWdvcyogPSAtMTQuMzcgKyAzLjUweG51bWVyb3NfZGVfZG9jZW50ZXNfcGVybWFuZW50ZXMgLTAuMjB4bWVzdHJhZG8gKyAxLjAweGRvdXRvcmFkbyBleHBsaWNhIDg3LjA3JSBkYSB2YXJpw6JuY2lhIGRhICpwcm9kdcOnw6NvIGRlIGFydGlnb3MqIChSwrIgPSAwLjg3MDcpLiAqTsO6bWVyb3MgZGUgZG9jZW50ZXMgcGVybWFuZW50ZXMqLCBtZWRpZG8gY29tbyB1bmlkYWRlIHRlbSB1bWEgcmVsYcOnw6NvIHNpZ25pZmljYXRpdmEgY29tIG8gZXJybyAozrLigoE9WzIuNTgyNzI1NywgNC40MTY2OTY3XSwgSUMgY29tIDk1JSk7ICptZXN0cmFkb3MqLCBtZWRpZG8gY29tbyB1bmlkYWRlLWFsdW5vICjOsuKCgj1bLTAuMzU3NzMxNiwgLTAuMDMyMTcxNF0sIElDIGNvbSA5NSUpOypkb3V0b3JhZG9zKiwgbWVkaWRvIGNvbW8gdW5pZGFkZS1hbHVubyAozrLigoM9WzAuNjM1NTExMiwgMS4zNjYwMzA5XSwgSUMgY29tIDk1JSk7IGFzc2ltIGNvbW8gKnByb2R1w6fDo28gZGUgYXJ0aWdvcyosIG1lZGlkYSBjb21vIHVuaWRhZGUgKM6y4oKAPVstMjkuMjM2Nzg0NSwgMC41MDQxNjkxXSwgSUMgY29tIDk1JSkuIE8gYXVtZW50byBkZSAxIHVuaWRhZGUgbm8gKGkpICpuw7ptZXJvcyBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcyosIHByb2R1eiB1bWEgbXVkYW7Dp2EgZGUgKyAzLjUwIHVuaWRhZGVzOyAoaWkpIG5vcyAqbWVzdHJhZG9zKiwgcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSAtMC4yMCB1bmlkYWRlczsgZSwgKGlpaSkgbm9zICpkb3V0b3JhZG9zKiwgcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSArMS4wMCwgbmEgKnByb2R1w6fDo28gZGUgYXJ0aWdvcyouDQoNCkEgY29tcGxleGlkYWRlIGRvIG1vZGVsbyBhdW1lbnRhIGNvbSBhIGluY2x1c8OjbyBkZSBtYWlzIHZhcmnDoXZlaXMsIG1hcyBlbGUgbsOjbyBvZmVyZWNlIHVtYSBleHBsaWNhw6fDo28gc2lnbmlmaWNhdGl2YW1lbnRlIG1lbGhvciBkbyBxdWUgbyBtb2RlbG8gYW50ZXJpb3IuIE8gZmF0b3IgbWFpcyByZWxldmFudGUgYWluZGEgw6kgbyAqbsO6bWVyb3MgZGUgZG9jZW50ZXMgcGVybWFuZW50ZXMqLCBxdWUgY29udGludWEgc2VuZG8gbyBwcmluY2lwYWwgZGV0ZXJtaW5hbnRlIHBhcmEgbXVkYW7Dp2FzIG5hIHByb2R1w6fDo28gZGUgYXJ0aWdvcy4NCg0KDQotLS0tLQ0KDQojIyBBZ29yYSBwcm9kdXRpdmlkYWRlIA0KDQpEaWZlcmVudGUgZGUgbWVkaXJtb3MgcHJvZHXDp8OjbyAodG90YWwgcHJvZHV6aWRvKSwgw6kgbWVkaXJtb3MgcHJvZHV0aXZpZGFkZSAocHJvZHV6aWRvIC8gdXRpbGl6YWRvKS4gQWJhaXhvIGZvY2FyZW1vcyBuZXNzYSBhbsOhbGlzZS4gUGFyYSBpc3NvIGNyaWUgdW0gbW9kZWxvIHF1ZSBpbnZlc3RpZ2EgY29tbyB1bSBjb25qdW50byBkZSBmYXRvcmVzIHF1ZSB2b2PDqiBqdWxnYSBxdWUgc8OjbyByZWxldmFudGVzIHNlIHJlbGFjaW9uYW0gY29tIGEgcHJvZHV0aXZpZGFkZSBkb3MgcHJvZ3JhbWFzLiBDcmllIHVtIG1vZGVsbyBxdWUgYXZhbGllIGNvbW8gX3BlbG8gbWVub3MgMyBmYXRvcmVzXyBzZSByZWxhY2lvbmFtIGNvbSBhIHByb2R1dGl2aWRhZGUgZGUgdW0gcHJvZ3JhbWEuIFBvZGUgcmV1dGlsaXphciBmYXRvcmVzIHF1ZSBqw6EgZGVmaW5pbW9zIGUgYW5hbGl6YW1vcyBwYXJhIHByb2R1w6fDo28uIE1hcyBjdWlkYWRvIHBhcmEgbsOjbyBpbmNsdWlyIGZhdG9yZXMgcXVlIHNlamFtIGZ1bsOnw6NvIGxpbmVhciBkZSBvdXRyb3MgasOhIGluY2x1w61kb3MgKGV4OiBpbmNsdWlyIEEsIEIgZSB1bSB0ZXJjZXJvIEM9QStCKQ0KDQpQcm9kdXphIGFiYWl4byBvIG1vZGVsbyBlIHVtIHRleHRvIHF1ZSBjb21lbnRlIChpKSBvIG1vZGVsbywgdGFsIGNvbW8gb3MgcXVlIGZpemVtb3MgYW50ZXMsIGUgKGlpKSBhcyBpbXBsaWNhw6fDtWVzIC0gbyBxdWUgYXByZW5kZW1vcyBzb2JyZSBjb21vIGZ1bmNpb25hbSBwcm9ncmFtYXMgZGUgcMOzcyBubyBicmFzaWw/Lg0KDQoNCipQcm9kdcOnw6NvIGRvIG1vZGVsbyoNCg0KYGBge3J9DQojIENvbnN0cnVpciBvIG1vZGVsbyBkZSByZWdyZXNzw6NvIG3Dumx0aXBsYQ0KbW9kZWxvMyA8LSBsbShwcm9kdXRpdmlkYWRlIH4gZG9jZW50ZXMgKyBtZXN0cmFkb3NfcHByb2YgKyBkb3V0b3JhZG9zX3Bwcm9mICwgZGF0YSA9IGNhY2NfYXVnbWVudGVkKQ0KDQojIFZpc3VhbGl6YXIgb3MgY29lZmljaWVudGVzIGRvIG1vZGVsbyBjb20gaW50ZXJ2YWxvcyBkZSBjb25maWFuw6dhDQp0aWR5KG1vZGVsbzMsIGNvbmYuaW50ID0gVFJVRSwgY29uZi5sZXZlbCA9IDAuOTUpDQoNCiMgT2J0ZXIgZXN0YXTDrXN0aWNhcyByZXN1bWlkYXMgZG8gbW9kZWxvDQpnbGFuY2UobW9kZWxvMykNCg0KYGBgDQoNCipWaXN1YWxpemFyIG8gbW9kZWxvIGNvbSBtdWl0YXMgdmFyacOhdmVpcyBpbmRlcGVuZGVudGVzKg0KDQpgYGB7cn0NCiMgQ2VydGlmaXF1ZS1zZSBkZSBxdWUgY2FjY19tZCBlc3TDoSBzZW5kbyB1dGlsaXphZG8sIHBvaXMgY29udMOpbSBhcyB2YXJpw6F2ZWlzIG5lY2Vzc8Ohcmlhcw0KcGFyYV9wbG90YXJfbW9kZWxvMyA8LSBjYWNjX2F1Z21lbnRlZCAlPiUgDQogIGRhdGFfZ3JpZChwcm9kdXRpdmlkYWRlID0gc2VxX3JhbmdlKHByb2R1dGl2aWRhZGUsIDEwKSwgIyBDcmllIHVtIHZldG9yIGRlIDEwIHZhbG9yZXMgbm8gcmFuZ2UNCiAgICAgICAgICAgIGRvY2VudGVzID0gc2VxX3JhbmdlKGRvY2VudGVzLCA0KSwgIA0KICAgICAgICAgICAgbWVzdHJhZG9zX3Bwcm9mID0gbWVkaWFuKG1lc3RyYWRvc19wcHJvZiksDQogICAgICAgICAgICBkb3V0b3JhZG9zX3Bwcm9mID0gc2VxX3JhbmdlKGRvdXRvcmFkb3NfcHByb2YsIDMpKSAlPiUgDQogIGFkZF9wcmVkaWN0aW9ucyhtb2RlbG8zKQ0KDQpnbGltcHNlKHBhcmFfcGxvdGFyX21vZGVsbzMpDQoNCg0KYGBgDQoNCipWaXN1YWxpemFyIG8gbW9kZWxvKg0KDQpgYGB7cn0NCiMgUGxvdGFuZG8gbyBtb2RlbG8gZGUgcmVncmVzc8OjbyBtw7psdGlwbGENCnBhcmFfcGxvdGFyX21vZGVsbzMgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBkb2NlbnRlcywgeSA9IHByZWQpKSArIA0KICBnZW9tX2xpbmUoYWVzKGdyb3VwID0gZG91dG9yYWRvc19wcHJvZiwgY29sb3VyID0gZG91dG9yYWRvc19wcHJvZikpICsgDQogIGdlb21fcG9pbnQoZGF0YSA9IGNhY2NfYXVnbWVudGVkLCBhZXMoeSA9IHByb2R1dGl2aWRhZGUsIGNvbG91ciA9IGRvdXRvcmFkb3NfcHByb2YpKSArIA0KICBsYWJzKHkgPSAiUHJvZHV0aXZpZGFkZSBkbyBwcm9ncmFtYSIsIHggPSAiTsO6bWVybyBkZSBkb2NlbnRlcyIsDQogICAgICAgY29sb3VyID0gIkRyLiBwb3IgcHJvZiIsIHRpdGxlID0gIk1vZGVsbyBkZSBSZWdyZXNzw6NvIE3Dumx0aXBsYSBwYXJhIFByb2R1dGl2aWRhZGUiKSArDQogICN5bGltKDAsIE5BKSArICAjIEFqdXN0YSBvIGVpeG8gWSBwYXJhIGNvbWXDp2FyIGVtIDANCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCg0KDQoNCj5UZXh0byBjb21lbnRhbmRvIG8gbW9kZWxvIGRlc2Vudm9sdmlkbw0KDQpSZWdyZXNzw6NvIG3Dumx0aXBsYSBmb2kgdXRpbGl6YWRhIHBhcmEgYW5hbGlzYXIgc2UgbyAqbsO6bWVybyBkZSBkb2NlbnRlcyBwZXJtYW5lbnRlcyosICpuw7ptZXJvIGRlIG1lc3RyYW5kb3MgcG9yIHByb2Zlc3NvciogZSAqbsO6bWVybyBkZSBkb3V0b3JhZG9zIHBvciBwcm9mZXNzb3IqIHTDqm0gdW1hIGFzc29jaWHDp8OjbyBzaWduaWZpY2F0aXZhIGNvbSBhICpwcm9kdXRpdmlkYWRlKiBkb3MgY3Vyc29zIGRlIHDDs3MtZ3JhZHVhw6fDo28gZW0gQ2nDqm5jaWFzIGRhIENvbXB1dGHDp8OjbyBubyBCcmFzaWwuIE9zIHJlc3VsdGFkb3MgZGEgcmVncmVzc8OjbyBpbmRpY2FtIHF1ZSB1bSBtb2RlbG8gY29tIDMgcHJlZGl0b3JlcyBubyBmb3JtYXRvICpwcm9kdXRpdmlkYWRlKiA9IDEuNDQgKyAwLjAyeE51bWVyb19kb2NlbnRlc19wZXJtYW5lbnRlcyArIDAuMDF4bWVzdHJhZG9zX3Byb2YgKyAwLjkzeGRvdXRvcmFkb3NfcHJvZiBleHBsaWNhIDQ0LjAxJSBkYSB2YXJpw6JuY2lhIGRhICpwcm9kdXRpdmlkYWRlKiAoUsKyID0gMC40NDAxKS4gKk7Dum1lcm9fZG9jZW50ZXNfcGVybWFuZW50ZXMqLCBtZWRpZG8gY29tbyB1bmlkYWRlIHRlbSB1bWEgcmVsYcOnw6NvIHNpZ25pZmljYXRpdmEgY29tIG8gZXJybyAozrLigoE9Wy0wLjAwMzk5OTkwMiwgMC4wNTE3MDczMl0sIElDIGNvbSA5NSU7Km1lc3RyYWRvc19wcm9mKiwgbWVkaWRvIGNvbW8gdW5pZGFkZSAozrLigoI9Wy0wLjEyNjc0ODYwOCwgMC4xNDYzODMyOV0sIElDIGNvbSA5NSUpOyAqZG91dG9yYWRvc19wcm9mKiwgbWVkaWRvIGNvbW8gdW5pZGFkZSAozrLigoM9WzAuNDYzOTYwODE4LCAxLjQwMDk0MTU2XSwgSUMgY29tIDk1JSk7IGFzc2ltIGNvbW8gKnByb2R1dGl2aWRhZGUqLCBtZWRpZGEgY29tbyBhIHJhesOjbyBkYSBwcm9kdcOnw6NvIHBlbG8gbsO6bWVybyBkZSBkb2NlbnRlICjOsuKCgD1bMC43MDYzNDkwNTEsIDIuMTY3MTg4NDVdLCBJQyBjb20gOTUlKS4gTyBhdW1lbnRvIGRlIDEgdW5pZGFkZTogKGkpIG5vICpuw7ptZXJvIGRlIGRvY2VudGVzIHBlcm1hbmVudGVzKiwgcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSArIDAuMDIgdW5pZGFkZXM7IChpaSkgbm9zICptZXN0cmFkb3NfcHJvZiosIHByb2R1eiB1bWEgbXVkYW7Dp2EgZGUgKyAwLjAxIHVuaWRhZGVzOyBlIChpaWkpIG5vcyAqZG91dG9yYWRvc19wcm9mKiwgcHJvZHV6IHVtYSBtdWRhbsOnYSBkZSArIDAuOTMsIG5hICpwcm9kdXRpdmlkYWRlKiBkYSBpbnN0aXR1acOnw6NvLg0KDQo+SW1wbGljYcOnw7VlczogbyBxdWUgYXByZW5kZW1vcyBzb2JyZSBjb21vIGZ1bmNpb25hbSBwcm9ncmFtYXMgZGUgcMOzcyBubyBicmFzaWw/DQoNCg0KLSBBIHJlbGHDp8OjbyBlbmNvbnRyYWRhIMOpICpmcmFjYSouIA0KDQotIChpKSBPIENvZWZpY2llbnRlIGRlIGRldGVybWluYcOnw6NvIChSwrIpIHBvc3N1aSB1bSB2YWxvciBkaXN0YW50ZSBkZSAxIFswLjQ0MDFdLCBvIHF1ZSBpbmRpY2EgcXVlIG8gbW9kZWxvIG7Do28gc2UgYWp1c3RhIGJlbSBhb3MgZGFkb3MgZSBuw6NvLWV4cGxpY2EgdW1hIGdyYW5kZSBwYXJ0ZSBkYSB2YXJpYWJpbGlkYWRlOyANCg0KLSAoaWkpIFZhbG9yLXAgKHAtdmFsdWUpIHBhcmEgb3MgY29lZmljaWVudGVzIM6y4oKAIGUgzrLigoMgc8OjbyBtdWl0byBwZXF1ZW5vcywgaW5kaWNhbmRvIHVtYSByZWxhw6fDo28gc2lnbmlmaWNhdGl2YSBlbnRyZSBhIHZhcmnDoXZlbCBkZXBlbmRlbnRlICpwcm9kdXRpdmlkYWRlKiAgZSBhIHZhcmnDoXZlbCBpbmRlcGVuZGVudGUgKmRvdXRvcmFkb3NfcHJvZiouIE8gbWVzbW8gbsOjbyBvY29ycmUgcGFyYSDOsuKCgSBlIM6y4oKCLCBvbmRlIG8gdmFsb3ItcCDDqSBncmFuZGUsIGluZGljYW5kbyB1bWEgcmVsYcOnw6NvIHBvdWNvIHNpZ25pZmljYXRpdmEgKG51bWVyb19kZV9kb2NlbnRlcywgfjAuMDkpIG91IGRlIG5lbmh1bWEgc2lnbmlmaWPDom5jaWEgKG1lc3RyYWRvc19wcm9mLCB+MC44OSkuDQoNCi0gQW5hbGlzYW5kbyBvcyBjb2VmaWNpZW50ZXMsIHBvZGVtb3MgYWZpcm1hciBxdWUgYSBtYWlvciBpbmZsdcOqbmNpYSBuYSAqcHJvZHV0aXZpZGFkZSogbmVzdGEgcmVncmVzc8OjbyBsaW5lYXIgbcO6bHRpcGxhIMOpIGF0cmlidcOtZGEgw6AgcHJlc2Vuw6dhIGRlIHVtIGN1cnNvIGRlIERvdXRvcmFkbyBlbSBDacOqbmNpYXMgZGEgQ29tcHV0YcOnw6NvLiBJc3NvIHNlIHJlZmxldGUgbm8gY29lZmljaWVudGUgZG8gbsO6bWVybyBkZSBkb3V0b3JhZG9zIHBvciBwcm9mZXNzb3IsIM6y4oKCID0gMCw5MywgcXVlIMOpIG8gdGVybW8gbWFpcyBzaWduaWZpY2F0aXZvIG5hIGbDs3JtdWxhIGRhIHJlZ3Jlc3PDo28uDQoNCg==