library(siconfir)
Warning: package ‘siconfir’ was built under R version 4.2.2
library(tidyverse)
Warning: package ‘tidyverse’ was built under R version 4.2.2
Registered S3 methods overwritten by 'dbplyr':
  method         from
  print.tbl_lazy     
  print.tbl_sql      
── Attaching packages ───────────────────────────────────────────────────────────────────────────────────────────────── tidyverse 1.3.2 ──
✔ ggplot2 3.4.0      ✔ purrr   0.3.5 
✔ tibble  3.1.8      ✔ dplyr   1.0.10
✔ tidyr   1.2.1      ✔ stringr 1.4.1 
✔ readr   2.1.3      ✔ forcats 0.5.2 
Warning: package ‘ggplot2’ was built under R version 4.2.2
Warning: package ‘tibble’ was built under R version 4.2.2
Warning: package ‘tidyr’ was built under R version 4.2.2
Warning: package ‘readr’ was built under R version 4.2.2
Warning: package ‘purrr’ was built under R version 4.2.2
Warning: package ‘dplyr’ was built under R version 4.2.2
Warning: package ‘stringr’ was built under R version 4.2.2
Warning: package ‘forcats’ was built under R version 4.2.2
── Conflicts ──────────────────────────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
library(dlookr)
Warning: package ‘dlookr’ was built under R version 4.2.2
Registered S3 method overwritten by 'htmlwidgets':
  method           from         
  print.htmlwidget tools:rstudio

Attaching package: ‘dlookr’

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

    extract

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

    transform
# busca as coordenadas de uma cidade
siconfir::find_cod("Varginha")
df<-br_cods$cod_ibge
df %>% head()
[1] 1718659 1718709 1718758 1718808 1718840 1718865
df$exercicio %>% unique()
Error in df$exercicio : $ operator is invalid for atomic vectors

Teste de Importação

find_cod("Belo Horizonte")

#A<-get_budget(year = 2020, period = 1, cod = 3106200) # Bimestral

B<-get_annual_acc(year = 2016:2021, cod = 3106200) #anual
B <- as.data.frame(unclass(B),stringsAsFactors=TRUE)
summary(B)
table(B$conta,B$anexo)
DCA_amb<-B %>% filter(anexo=="DCA-Anexo I-G") %>% spread(coluna,valor) %>% filter(str_starts(conta,"18")) 
#select(conta)%>% unique()



#A <- as.data.frame(unclass(A),stringsAsFactors=TRUE)
#summary(A)
#A %>% filter()
#rreo_df <- A %>% 
              spread(key=coluna, value = valor) #%>%
              select(conta, cod_conta, `PREVISÃO INICIAL`, `PREVISÃO ATUALIZADA (a)`, `No Bimestre (b)`,
                     `% (b/a)`, `Até o Bimestre (c)`, `% (c/a)`, `SALDO (a-c)`, `DOTAÇÃO INICIAL (d)`,
                     `DOTAÇÃO ATUALIZADA (e)`, `DESPESAS EMPENHADAS NO BIMESTRE`, `DESPESAS EMPENHADAS ATÉ O BIMESTRE (f)`,
                     `SALDO (g) = (e-f)`, `DESPESAS LIQUIDADAS NO BIMESTRE`, `DESPESAS LIQUIDADAS ATÉ O BIMESTRE (h)`,
                     `SALDO (i) = (e-h)`, `DESPESAS PAGAS ATÉ O BIMESTRE (j)`)
#rreo_df %>% filter(cod_conta=="DespesasLiquidadasDemonstrativoSimplificadoDespesasPorFuncaoSubfuncao")

Looping

# testes
Ano<-2013:2021
DCA_amb<-data.frame()
DCA_amb_temp<-data.frame()

for (i in Ano) {
  print(i)
  B<-get_annual_acc(year = i, cod = 3509502 ) #anual
B <- as.data.frame(unclass(B),stringsAsFactors=TRUE)
DCA_amb_temp<-B %>% filter(anexo=="DCA-Anexo I-G") %>% #spread(coluna,valor) %>%
  filter(str_starts(conta,"18")) 
DCA_amb<-rbind(DCA_amb_temp,DCA_amb)
}
DCA_amb_temp
DCA_amb %>% spread(coluna,valor)
df<-br_cods %>% filter(cod_ibge!=5300108,populacao>1000000,cod_ibge>1000)%>%  select(cod_ibge,ente) 
df
k
codigo<-df$cod_ibge
codigo
for (k in codigo) {
  print(k)
    B<-get_annual_acc(year = 2020, cod = k) #anual
    B <- as.data.frame(unclass(B),stringsAsFactors=TRUE)
    DCA_amb_temp<-B %>% filter(anexo=="DCA-Anexo I-G") %>% #spread(coluna,valor) %>%
      filter(str_starts(conta,"18")) 
DCA_amb<-rbind(DCA_amb_temp,DCA_amb)

}
DCA_amb$instituicao %>% unique() #%>% length()
B
  #Ano<-2013:2021
  df<-br_cods %>% filter(cod_ibge!=5300108, # Excluir Brasilia
                         populacao>100,# recorte polulacional
                         cod_ibge>1000)%>%#excluir estados
    select(cod_ibge,ente) %>%  slice_sample(prop = 0.02) # amostragem aleatória
  codigo<-df$cod_ibge
  DCA_amb<-data.frame()
  DCA_amb_temp<-data.frame()
  a=0
  for (k in codigo) {
    a=a+1
      print(paste(df$ente[df$cod_ibge==k],a))
    print(Sys.time())
      B<-get_annual_acc(year = 2019:2020, cod = codigo) #anual
      C <- B %>% filter(str_starts(cod_conta,"Total")) %>% rece
      C%>% spread(coluna,valor)
      C1<-C %>%group_by(exercicio,cod_ibge) %>%  summarise(
                                             Rec_bruta=max(`Receitas Brutas Realizadas`,na.rm = T),
                                             Des_liq=max(`Despesas Liquidadas`,na.rm = T))
      D<-B %>% filter(anexo=="DCA-Anexo I-E") #%>% #spread(coluna,valor) %>%
      DCA_amb_temp <-D %>% filter(str_starts(conta,"18"))
      DCA_amb_temp<-inner_join(DCA_amb_temp,C1,"exercicio")
      DCA_amb<-rbind(DCA_amb_temp,DCA_amb)
  }
  DCA_Amb<-DCA_Amb %>% spread(coluna,valor) #%>% filter(str_starts(conta,"18")) 
  
  DCA_amb <- as.data.frame(unclass(DCA_amb),stringsAsFactors=TRUE)
  summary(DCA_amb$conta)
  DCA_amb %>% ggplot(aes(exercicio,Despesas.Liquidadas))+geom_point()+geom_smooth()+facet_wrap(~conta,scales = "free")

A API do SICONFI

De acordo com a documentação da API é possível obter dados sobre os seguintes demonstrativos/relatórios:

RREO: Relatório Resumido da Execução Orçamentária RGF: Relatório de Gestão Fiscal DCA: Declaração de Contas Anuais MSC - Patrimonial: Matriz de Saldos Contábeis - contas patrimoniais MSC - Orçamentária: Matriz de Saldos Contábeis - contas orçamentárias MSC - Controle: Matriz de Saldos Contábeis - contas de controle Entes: Cadastro de Entes da Federação Extrato de Entregas: Extrato de Relatórios Homologados e Matrizes Entregues As URL de consulta para a obtenção de dados de cada um desses demonstrativos/relatórios é constituída de uma URL básica mais um “pedaço” específico para cada um dos demonstrativos/relatórios acima.

A URL básica é “apidatalake.tesouro.gov.br/ords/siconfi/tt/” e acrescentamos a ela uma informação que indicará em que demonstrativo/relatório estamos interessados. Por exemplo: se acrescentarmos /rreo à URL básica podemos consultar informações relativas ao RREO; acrescentando /extratos_entregas podemos consultar um extrato contendo informações sobre relatórios homologados e retificados e matrizes entregues. Para os demais é o mesmo procedimento.

Para consultar dados do RGF a URL seria: “apidatalake.tesouro.gov.br/ords/siconfi/tt/rgf”. Para sabermos as opções disponíveis precisamos consultar a documentação da API no link indicado.

De acordo com a informação desejada será necessário passar à consulta um conjunto de parâmetros específicos. Para a consulta ao RREO, o usuário precisará informar: o exercício financeiro, o bimestre desejado, o tipo de demonstrativo, o número do anexo e o código IBGE do Ente para o qual desejamos obter os dados.

Executando a Consulta

Vamos exemplificar o uso da API com uma consulta ao Anexo 01 do RREO para o primeiro bimestre de 2019 para o município do Rio de Janeiro, cujo código IBGE é 3304557.

A consulta ao RREO exige as seguintes informações:

an_exercicio: o ano para o qual deseja realizar a consulta
nr_periodo: um número de 1 a 6 indicando o bimestre desejado
co_tipo_demonstrativo: o tipo do demonstrativo. Os valores possíveis são RREO e RREO Simplificado
no_anexo: o anexo de interesse. Os valores possíveis estão no formato RREO-Anexo dd. Para o Anexo 04 há uma pequena variação nesse formato
id_ente: o código IBGE do Ente

Essencialmente o processo de fazer consultas consiste em: (1) fazer uma requisição de dados à API e receber os resultado, (2) verificar se tudo correu bem, (3) fazer o parser dos dados retornados pela consulta e (4) converter o resultado para um data frame.

A seguir vamos ilustrar cada um desses passos.

Vamos, primeiro, carregar os pacotes que serão utilizados:

Fonte: https://rpubs.com/marcosfs2006/api_siconfi

library(httr)
library(jsonlite)
library(stringr)
library(dplyr)
library(tidyr)

Carregados os pacotes, já podemos fazer a submissão da consulta (passo 1):

Como já mencionado, vamos consultar o Anexo 01 do RREO para o primeiro bimestre de 2019 do município do Rio de Janeiro cujo código IBGE é 3304557.

base_url_rreo <- "apidatalake.tesouro.gov.br/ords/siconfi/tt/rreo?"

# parâmetros de consulata ao RREO
ano <- "2019"
bimestre <- "1"
tipo_relatorio <- "RREO"
num_anexo <- "RREO-Anexo+01"
ente <- "3304557" 

# montar a chamada à API
chamada_api_rreo <- paste(base_url_rreo,
                          "an_exercicio=", ano, "&",
                          "nr_periodo=", bimestre, "&",
                          "co_tipo_demonstrativo=", tipo_relatorio, "&",
                          "no_anexo=", num_anexo, "&",
                          "id_ente=", ente, sep = "")
rreo <- GET(chamada_api_rreo)
status_code(rreo) 
#O status 200 nos indica que a requisição foi feita com sucesso.
rreo_txt <- content(rreo, as="text", encoding="UTF-8")
rreo_json <- fromJSON(rreo_txt, flatten = FALSE) 
rreo_df <- as.data.frame(rreo_json[["items"]]) 
knitr::kable(head(rreo_df))
rreo_df <- rreo_df %>% select(coluna:valor)
rreo_df <- A %>% 
              spread(key=coluna, value = valor) %>%
              select(conta, cod_conta, `PREVISÃO INICIAL`, `PREVISÃO ATUALIZADA (a)`, `No Bimestre (b)`,
                     `% (b/a)`, `Até o Bimestre (c)`, `% (c/a)`, `SALDO (a-c)`, `DOTAÇÃO INICIAL (d)`,
                     `DOTAÇÃO ATUALIZADA (e)`, `DESPESAS EMPENHADAS NO BIMESTRE`, `DESPESAS EMPENHADAS ATÉ O BIMESTRE (f)`,
                     `SALDO (g) = (e-f)`, `DESPESAS LIQUIDADAS NO BIMESTRE`, `DESPESAS LIQUIDADAS ATÉ O BIMESTRE (h)`,
                     `SALDO (i) = (e-h)`, `DESPESAS PAGAS ATÉ O BIMESTRE (j)`)
rreo_df %>% summary()

Base ambiental e união

summary(Amb_Orc)
   exercicio                                     instituicao       cod_ibge.x            uf                  anexo       
 Min.   :2015   Prefeitura Municipal de Fortaleza - CE :   475   Min.   :1100023   CE     :28158   DCA-Anexo I-E:104082  
 1st Qu.:2016   Prefeitura Municipal de Rio Branco - AC:   475   1st Qu.:1500404   MA     :19855                         
 Median :2018   Prefeitura Municipal de Caruaru - PE   :   456   Median :2109809   PA     :11932                         
 Mean   :2018   Prefeitura Municipal de Afuá - PA      :   437   Mean   :1943208   AM     : 9842                         
 3rd Qu.:2019   Prefeitura Municipal de Altamira - PA  :   437   3rd Qu.:2308807   PB     : 8987                         
 Max.   :2020   Prefeitura Municipal de Manaus - AM    :   437   Max.   :2607604   RO     : 7828                         
                (Other)                                :101365                     (Other):17480                         
                               rotulo              cod_conta                                               conta         populacao      
 Total Geral da Despesa por Função:78242   TotalDespesas:104082   18 - Gestão Ambiental                       :46246   Min.   :   1559  
 NA's                             :25840                          18.541 - Preservação e Conservação Ambiental:23199   1st Qu.:  13022  
                                                                  18.122 - Administração Geral                :15447   Median :  22628  
                                                                  18.542 - Controle Ambiental                 : 9671   Mean   :  74562  
                                                                  18.544 - Recursos Hídricos                  : 4845   3rd Qu.:  44071  
                                                                  18.999 - Demais Subfunções Gestão Ambiental : 3458   Max.   :2669342  
                                                                  (Other)                                     : 1216                    
   cod_ibge.y                           Rec_bruta                     Des_liq       Despesas.Empenhadas Despesas.Liquidadas
 Min.   :1100023   Receitas Brutas Realizadas:104082   Despesas Liquidadas:104082   Min.   :      10    Min.   :      10   
 1st Qu.:1500404                                                                    1st Qu.:   46389    1st Qu.:   44980   
 Median :2109809                                                                    Median :  167583    Median :  161452   
 Mean   :1943208                                                                    Mean   :  992629    Mean   :  968123   
 3rd Qu.:2308807                                                                    3rd Qu.:  525335    3rd Qu.:  502343   
 Max.   :2607604                                                                    Max.   :91747560    Max.   :90530303   
                                                                                    NA's   :19          NA's   :494        
 Despesas.Pagas     Inscrição.de.Restos.a.Pagar.Não.Processados Inscrição.de.Restos.a.Pagar.Processados Inscrição.de.RP.Não.Processados
 Min.   :      10   Min.   :      0                             Min.   :      0                         Min.   :     16.8              
 1st Qu.:   43993   1st Qu.:   2600                             1st Qu.:   3650                         1st Qu.:   2579.7              
 Median :  154152   Median :  12921                             Median :  14062                         Median :  15084.0              
 Mean   :  926802   Mean   : 107957                             Mean   :  94901                         Mean   : 112848.9              
 3rd Qu.:  482197   3rd Qu.:  54279                             3rd Qu.:  47626                         3rd Qu.:  70722.2              
 Max.   :90133938   Max.   :4367993                             Max.   :8959362                         Max.   :1798575.9              
 NA's   :1064       NA's   :84113                               NA's   :68647                           NA's   :97774                  
 Inscrição.de.RP.Processados    NO_ENTE            Year         wildfire         humidity      preciptation   temperature   
 Min.   :      0             1200401:   475   Min.   :2000   Min.   : NA      Min.   :53.20   Min.   : 173   Min.   :22.77  
 1st Qu.:   4038             2304400:   475   1st Qu.:2004   1st Qu.: NA      1st Qu.:71.11   1st Qu.: 884   1st Qu.:25.82  
 Median :  14238             2604106:   456   Median :2009   Median : NA      Median :79.23   Median :1329   Median :26.75  
 Mean   : 123871             1100205:   437   Mean   :2009   Mean   :NaN      Mean   :78.16   Mean   :1400   Mean   :26.58  
 3rd Qu.:  53086             1302603:   437   3rd Qu.:2014   3rd Qu.: NA      3rd Qu.:85.36   3rd Qu.:1825   3rd Qu.:27.33  
 Max.   :7762424             1500305:   437   Max.   :2018   Max.   : NA      Max.   :97.94   Max.   :6484   Max.   :29.65  
 NA's   :92454               (Other):101365                  NA's   :104082                                                 
     co_ppb         pm25_ugm3      
 Min.   : 63.52   Min.   :  3.717  
 1st Qu.: 95.20   1st Qu.:  8.698  
 Median :111.31   Median : 12.583  
 Mean   :135.17   Mean   : 16.262  
 3rd Qu.:153.55   3rd Qu.: 17.610  
 Max.   :958.47   Max.   :112.747  
                  NA's   :11011    
describe(Amb_Orc)
Amb_Orc %>% ggplot(aes(temperature,Despesas.Liquidadas,col=uf))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(temperature,Despesas.Liquidadas,col=conta))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(temperature,Despesas.Liquidadas,col=uf))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(preciptation,Despesas.Liquidadas,col=conta))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(co_ppb,Despesas.Liquidadas,col=uf))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(wildfire,Despesas.Liquidadas,col=uf))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 104082 rows containing non-finite values (`stat_smooth()`).

Amb_Orc %>% ggplot(aes(humidity,Despesas.Liquidadas,col=conta))+geom_smooth(method = lm) 
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 494 rows containing non-finite values (`stat_smooth()`).

Amb_Orc$Des_liq
   [1] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
   [7] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [13] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [19] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [25] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [31] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [37] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [43] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [49] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [55] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [61] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [67] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [73] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [79] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [85] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [91] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
  [97] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [103] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [109] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [115] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [121] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [127] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [133] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [139] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [145] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [151] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [157] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [163] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [169] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [175] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [181] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [187] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [193] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [199] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [205] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [211] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [217] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [223] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [229] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [235] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [241] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [247] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [253] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [259] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [265] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [271] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [277] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [283] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [289] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [295] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [301] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [307] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [313] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [319] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [325] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [331] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [337] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [343] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [349] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [355] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [361] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [367] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [373] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [379] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [385] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [391] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [397] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [403] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [409] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [415] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [421] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [427] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [433] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [439] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [445] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [451] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [457] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [463] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [469] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [475] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [481] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [487] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [493] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [499] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [505] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [511] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [517] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [523] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [529] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [535] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [541] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [547] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [553] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [559] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [565] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [571] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [577] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [583] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [589] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [595] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [601] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [607] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [613] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [619] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [625] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [631] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [637] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [643] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [649] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [655] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [661] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [667] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [673] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [679] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [685] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [691] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [697] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [703] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [709] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [715] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [721] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [727] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [733] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [739] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [745] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [751] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [757] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [763] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [769] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [775] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [781] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [787] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [793] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [799] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [805] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [811] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [817] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [823] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [829] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [835] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [841] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [847] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [853] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [859] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [865] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [871] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [877] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [883] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [889] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [895] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [901] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [907] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [913] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [919] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [925] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [931] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [937] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [943] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [949] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [955] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [961] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [967] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [973] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [979] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [985] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [991] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [997] Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas Despesas Liquidadas
 [ reached getOption("max.print") -- omitted 103082 entries ]
Levels: Despesas Liquidadas
Mod<-lm(Despesas.Liquidadas~temperature+humidity+preciptation+co_ppb+populacao+uf+conta,Amb_Orc)
summary(Mod)

Call:
lm(formula = Despesas.Liquidadas ~ temperature + humidity + preciptation + 
    co_ppb + populacao + uf + conta, data = Amb_Orc)

Residuals:
      Min        1Q    Median        3Q       Max 
-25255972   -746635   -250874    326423  65203721 

Coefficients:
                                                    Estimate Std. Error t value Pr(>|t|)    
(Intercept)                                        1.241e+07  4.915e+05  25.253  < 2e-16 ***
temperature                                       -4.322e+05  1.620e+04 -26.679  < 2e-16 ***
humidity                                          -1.889e+03  1.658e+03  -1.139  0.25470    
preciptation                                      -1.336e+02  2.724e+01  -4.905 9.36e-07 ***
co_ppb                                             1.072e+03  2.256e+02   4.755 1.99e-06 ***
populacao                                          9.445e+00  4.655e-02 202.891  < 2e-16 ***
ufAM                                              -8.463e+05  7.602e+04 -11.133  < 2e-16 ***
ufCE                                               5.439e+05  8.172e+04   6.655 2.85e-11 ***
ufMA                                              -2.362e+05  7.690e+04  -3.071  0.00213 ** 
ufPA                                              -1.365e+05  7.770e+04  -1.757  0.07893 .  
ufPB                                              -3.845e+05  8.571e+04  -4.485 7.28e-06 ***
ufPE                                               2.798e+05  8.762e+04   3.193  0.00141 ** 
ufRO                                              -9.011e+05  7.649e+04 -11.781  < 2e-16 ***
ufRR                                               2.473e+05  9.594e+04   2.578  0.00994 ** 
ufTO                                               1.339e+05  9.143e+04   1.464  0.14309    
conta18.122 - Administração Geral                 -1.704e+05  3.486e+04  -4.889 1.02e-06 ***
conta18.541 - Preservação e Conservação Ambiental -9.886e+05  2.987e+04 -33.101  < 2e-16 ***
conta18.542 - Controle Ambiental                  -9.497e+05  4.168e+04 -22.788  < 2e-16 ***
conta18.543 - Recuperação de Áreas Degradadas     -2.300e+06  1.097e+05 -20.976  < 2e-16 ***
conta18.544 - Recursos Hídricos                   -8.431e+05  5.755e+04 -14.649  < 2e-16 ***
conta18.545 - Meteorologia                        -4.911e+06  6.015e+05  -8.165 3.25e-16 ***
conta18.999 - Demais Subfunções Gestão Ambiental  -1.166e+05  6.538e+04  -1.783  0.07465 .  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3694000 on 103566 degrees of freedom
  (494 observations deleted due to missingness)
Multiple R-squared:  0.3027,    Adjusted R-squared:  0.3025 
F-statistic:  2140 on 21 and 103566 DF,  p-value: < 2.2e-16
LS0tDQp0aXRsZTogJ1RyYWJhbGhvOiBTZW5zaWJpbGlkYWRlIEFtYmllbnRhbCBkbyBPcsOnYW1lbnRvIE11bmljaXBhbCcNCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogDQogICAgdG9jOiB5ZXMNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBkZl9wcmludDogcGFnZWQNCmVkaXRvcl9vcHRpb25zOg0KICBtYXJrZG93bjoNCiAgICB3cmFwOiA3Mg0KLS0tDQoNCmBgYHtyfQ0KbGlicmFyeShzaWNvbmZpcikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShkbG9va3IpDQojIGJ1c2NhIGFzIGNvb3JkZW5hZGFzIGRlIHVtYSBjaWRhZGUNCnNpY29uZmlyOjpmaW5kX2NvZCgiVmFyZ2luaGEiKQ0KZGY8LWJyX2NvZHMkY29kX2liZ2UNCmRmICU+JSBoZWFkKCkNCmRmJGV4ZXJjaWNpbyAlPiUgdW5pcXVlKCkNCmBgYA0KDQojIFRlc3RlIGRlIEltcG9ydGHDp8Ojbw0KDQpgYGB7cn0NCmZpbmRfY29kKCJCZWxvIEhvcml6b250ZSIpDQoNCiNBPC1nZXRfYnVkZ2V0KHllYXIgPSAyMDIwLCBwZXJpb2QgPSAxLCBjb2QgPSAzMTA2MjAwKSAjIEJpbWVzdHJhbA0KDQpCPC1nZXRfYW5udWFsX2FjYyh5ZWFyID0gMjAxNjoyMDIxLCBjb2QgPSAzMTA2MjAwKSAjYW51YWwNCkIgPC0gYXMuZGF0YS5mcmFtZSh1bmNsYXNzKEIpLHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkNCnN1bW1hcnkoQikNCnRhYmxlKEIkY29udGEsQiRhbmV4bykNCkRDQV9hbWI8LUIgJT4lIGZpbHRlcihhbmV4bz09IkRDQS1BbmV4byBJLUciKSAlPiUgc3ByZWFkKGNvbHVuYSx2YWxvcikgJT4lIGZpbHRlcihzdHJfc3RhcnRzKGNvbnRhLCIxOCIpKSANCiNzZWxlY3QoY29udGEpJT4lIHVuaXF1ZSgpDQoNCg0KDQojQSA8LSBhcy5kYXRhLmZyYW1lKHVuY2xhc3MoQSksc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQ0KI3N1bW1hcnkoQSkNCiNBICU+JSBmaWx0ZXIoKQ0KI3JyZW9fZGYgPC0gQSAlPiUgDQogICAgICAgICAgICAgIHNwcmVhZChrZXk9Y29sdW5hLCB2YWx1ZSA9IHZhbG9yKSAjJT4lDQogICAgICAgICAgICAgIHNlbGVjdChjb250YSwgY29kX2NvbnRhLCBgUFJFVklTw4NPIElOSUNJQUxgLCBgUFJFVklTw4NPIEFUVUFMSVpBREEgKGEpYCwgYE5vIEJpbWVzdHJlIChiKWAsDQogICAgICAgICAgICAgICAgICAgICBgJSAoYi9hKWAsIGBBdMOpIG8gQmltZXN0cmUgKGMpYCwgYCUgKGMvYSlgLCBgU0FMRE8gKGEtYylgLCBgRE9UQcOHw4NPIElOSUNJQUwgKGQpYCwNCiAgICAgICAgICAgICAgICAgICAgIGBET1RBw4fDg08gQVRVQUxJWkFEQSAoZSlgLCBgREVTUEVTQVMgRU1QRU5IQURBUyBOTyBCSU1FU1RSRWAsIGBERVNQRVNBUyBFTVBFTkhBREFTIEFUw4kgTyBCSU1FU1RSRSAoZilgLA0KICAgICAgICAgICAgICAgICAgICAgYFNBTERPIChnKSA9IChlLWYpYCwgYERFU1BFU0FTIExJUVVJREFEQVMgTk8gQklNRVNUUkVgLCBgREVTUEVTQVMgTElRVUlEQURBUyBBVMOJIE8gQklNRVNUUkUgKGgpYCwNCiAgICAgICAgICAgICAgICAgICAgIGBTQUxETyAoaSkgPSAoZS1oKWAsIGBERVNQRVNBUyBQQUdBUyBBVMOJIE8gQklNRVNUUkUgKGopYCkNCiNycmVvX2RmICU+JSBmaWx0ZXIoY29kX2NvbnRhPT0iRGVzcGVzYXNMaXF1aWRhZGFzRGVtb25zdHJhdGl2b1NpbXBsaWZpY2Fkb0Rlc3Blc2FzUG9yRnVuY2FvU3ViZnVuY2FvIikNCmBgYA0KDQojIExvb3BpbmcNCg0KYGBge3J9DQojIHRlc3Rlcw0KQW5vPC0yMDEzOjIwMjENCkRDQV9hbWI8LWRhdGEuZnJhbWUoKQ0KRENBX2FtYl90ZW1wPC1kYXRhLmZyYW1lKCkNCg0KZm9yIChpIGluIEFubykgew0KICBwcmludChpKQ0KICBCPC1nZXRfYW5udWFsX2FjYyh5ZWFyID0gaSwgY29kID0gMzUwOTUwMiApICNhbnVhbA0KQiA8LSBhcy5kYXRhLmZyYW1lKHVuY2xhc3MoQiksc3RyaW5nc0FzRmFjdG9ycz1UUlVFKQ0KRENBX2FtYl90ZW1wPC1CICU+JSBmaWx0ZXIoYW5leG89PSJEQ0EtQW5leG8gSS1HIikgJT4lICNzcHJlYWQoY29sdW5hLHZhbG9yKSAlPiUNCiAgZmlsdGVyKHN0cl9zdGFydHMoY29udGEsIjE4IikpIA0KRENBX2FtYjwtcmJpbmQoRENBX2FtYl90ZW1wLERDQV9hbWIpDQp9DQpEQ0FfYW1iX3RlbXANCkRDQV9hbWIgJT4lIHNwcmVhZChjb2x1bmEsdmFsb3IpDQpkZjwtYnJfY29kcyAlPiUgZmlsdGVyKGNvZF9pYmdlIT01MzAwMTA4LHBvcHVsYWNhbz4xMDAwMDAwLGNvZF9pYmdlPjEwMDApJT4lICBzZWxlY3QoY29kX2liZ2UsZW50ZSkgDQpkZg0Kaw0KY29kaWdvPC1kZiRjb2RfaWJnZQ0KY29kaWdvDQpmb3IgKGsgaW4gY29kaWdvKSB7DQogIHByaW50KGspDQogICAgQjwtZ2V0X2FubnVhbF9hY2MoeWVhciA9IDIwMjAsIGNvZCA9IGspICNhbnVhbA0KICAgIEIgPC0gYXMuZGF0YS5mcmFtZSh1bmNsYXNzKEIpLHN0cmluZ3NBc0ZhY3RvcnM9VFJVRSkNCiAgICBEQ0FfYW1iX3RlbXA8LUIgJT4lIGZpbHRlcihhbmV4bz09IkRDQS1BbmV4byBJLUciKSAlPiUgI3NwcmVhZChjb2x1bmEsdmFsb3IpICU+JQ0KICAgICAgZmlsdGVyKHN0cl9zdGFydHMoY29udGEsIjE4IikpIA0KRENBX2FtYjwtcmJpbmQoRENBX2FtYl90ZW1wLERDQV9hbWIpDQoNCn0NCkRDQV9hbWIkaW5zdGl0dWljYW8gJT4lIHVuaXF1ZSgpICMlPiUgbGVuZ3RoKCkNCkINCmBgYA0KDQpgYGB7cn0NCiAgI0FubzwtMjAxMzoyMDIxDQogIGRmPC1icl9jb2RzICU+JSBmaWx0ZXIoY29kX2liZ2UhPTUzMDAxMDgsICMgRXhjbHVpciBCcmFzaWxpYQ0KICAgICAgICAgICAgICAgICAgICAgICAgIHBvcHVsYWNhbz4xMDAsIyByZWNvcnRlIHBvbHVsYWNpb25hbA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNvZF9pYmdlPjEwMDApJT4lI2V4Y2x1aXIgZXN0YWRvcw0KICAgIHNlbGVjdChjb2RfaWJnZSxlbnRlKSAlPiUgIHNsaWNlX3NhbXBsZShwcm9wID0gMC4wMikgIyBhbW9zdHJhZ2VtIGFsZWF0w7NyaWENCiAgY29kaWdvPC1kZiRjb2RfaWJnZQ0KICBEQ0FfYW1iPC1kYXRhLmZyYW1lKCkNCiAgRENBX2FtYl90ZW1wPC1kYXRhLmZyYW1lKCkNCiAgYT0wDQogIGZvciAoayBpbiBjb2RpZ28pIHsNCiAgICBhPWErMQ0KICAgICAgcHJpbnQocGFzdGUoZGYkZW50ZVtkZiRjb2RfaWJnZT09a10sYSkpDQogICAgcHJpbnQoU3lzLnRpbWUoKSkNCiAgICAgIEI8LWdldF9hbm51YWxfYWNjKHllYXIgPSAyMDE5OjIwMjAsIGNvZCA9IGNvZGlnbykgI2FudWFsDQogICAgICBDIDwtIEIgJT4lIGZpbHRlcihzdHJfc3RhcnRzKGNvZF9jb250YSwiVG90YWwiKSkgJT4lIHJlY2UNCiAgICAgIEMlPiUgc3ByZWFkKGNvbHVuYSx2YWxvcikNCiAgICAgIEMxPC1DICU+JWdyb3VwX2J5KGV4ZXJjaWNpbyxjb2RfaWJnZSkgJT4lICBzdW1tYXJpc2UoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNfYnJ1dGE9bWF4KGBSZWNlaXRhcyBCcnV0YXMgUmVhbGl6YWRhc2AsbmEucm0gPSBUKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc19saXE9bWF4KGBEZXNwZXNhcyBMaXF1aWRhZGFzYCxuYS5ybSA9IFQpKQ0KICAgICAgRDwtQiAlPiUgZmlsdGVyKGFuZXhvPT0iRENBLUFuZXhvIEktRSIpICMlPiUgI3NwcmVhZChjb2x1bmEsdmFsb3IpICU+JQ0KICAgICAgRENBX2FtYl90ZW1wIDwtRCAlPiUgZmlsdGVyKHN0cl9zdGFydHMoY29udGEsIjE4IikpDQogICAgICBEQ0FfYW1iX3RlbXA8LWlubmVyX2pvaW4oRENBX2FtYl90ZW1wLEMxLCJleGVyY2ljaW8iKQ0KICAgICAgRENBX2FtYjwtcmJpbmQoRENBX2FtYl90ZW1wLERDQV9hbWIpDQogIH0NCiAgRENBX0FtYjwtRENBX0FtYiAlPiUgc3ByZWFkKGNvbHVuYSx2YWxvcikgIyU+JSBmaWx0ZXIoc3RyX3N0YXJ0cyhjb250YSwiMTgiKSkgDQogIA0KICBEQ0FfYW1iIDwtIGFzLmRhdGEuZnJhbWUodW5jbGFzcyhEQ0FfYW1iKSxzdHJpbmdzQXNGYWN0b3JzPVRSVUUpDQogIHN1bW1hcnkoRENBX2FtYiRjb250YSkNCiAgRENBX2FtYiAlPiUgZ2dwbG90KGFlcyhleGVyY2ljaW8sRGVzcGVzYXMuTGlxdWlkYWRhcykpK2dlb21fcG9pbnQoKStnZW9tX3Ntb290aCgpK2ZhY2V0X3dyYXAofmNvbnRhLHNjYWxlcyA9ICJmcmVlIikNCmBgYA0KDQojIEEgQVBJIGRvIFNJQ09ORkkNCg0KRGUgYWNvcmRvIGNvbSBhIGRvY3VtZW50YcOnw6NvIGRhIEFQSSDDqSBwb3Nzw612ZWwgb2J0ZXIgZGFkb3Mgc29icmUgb3MNCnNlZ3VpbnRlcyBkZW1vbnN0cmF0aXZvcy9yZWxhdMOzcmlvczoNCg0KUlJFTzogUmVsYXTDs3JpbyBSZXN1bWlkbyBkYSBFeGVjdcOnw6NvIE9yw6dhbWVudMOhcmlhIFJHRjogUmVsYXTDs3JpbyBkZQ0KR2VzdMOjbyBGaXNjYWwgRENBOiBEZWNsYXJhw6fDo28gZGUgQ29udGFzIEFudWFpcyBNU0MgLSBQYXRyaW1vbmlhbDogTWF0cml6DQpkZSBTYWxkb3MgQ29udMOhYmVpcyAtIGNvbnRhcyBwYXRyaW1vbmlhaXMgTVNDIC0gT3LDp2FtZW50w6FyaWE6IE1hdHJpeiBkZQ0KU2FsZG9zIENvbnTDoWJlaXMgLSBjb250YXMgb3LDp2FtZW50w6FyaWFzIE1TQyAtIENvbnRyb2xlOiBNYXRyaXogZGUgU2FsZG9zDQpDb250w6FiZWlzIC0gY29udGFzIGRlIGNvbnRyb2xlIEVudGVzOiBDYWRhc3RybyBkZSBFbnRlcyBkYSBGZWRlcmHDp8Ojbw0KRXh0cmF0byBkZSBFbnRyZWdhczogRXh0cmF0byBkZSBSZWxhdMOzcmlvcyBIb21vbG9nYWRvcyBlIE1hdHJpemVzDQpFbnRyZWd1ZXMgQXMgVVJMIGRlIGNvbnN1bHRhIHBhcmEgYSBvYnRlbsOnw6NvIGRlIGRhZG9zIGRlIGNhZGEgdW0gZGVzc2VzDQpkZW1vbnN0cmF0aXZvcy9yZWxhdMOzcmlvcyDDqSBjb25zdGl0dcOtZGEgZGUgdW1hIFVSTCBiw6FzaWNhIG1haXMgdW0NCiJwZWRhw6dvIiBlc3BlY8OtZmljbyBwYXJhIGNhZGEgdW0gZG9zIGRlbW9uc3RyYXRpdm9zL3JlbGF0w7NyaW9zIGFjaW1hLg0KDQpBIFVSTCBiw6FzaWNhIMOpICJhcGlkYXRhbGFrZS50ZXNvdXJvLmdvdi5ici9vcmRzL3NpY29uZmkvdHQvIiBlDQphY3Jlc2NlbnRhbW9zIGEgZWxhIHVtYSBpbmZvcm1hw6fDo28gcXVlIGluZGljYXLDoSBlbSBxdWUNCmRlbW9uc3RyYXRpdm8vcmVsYXTDs3JpbyBlc3RhbW9zIGludGVyZXNzYWRvcy4gUG9yIGV4ZW1wbG86IHNlDQphY3Jlc2NlbnRhcm1vcyAvcnJlbyDDoCBVUkwgYsOhc2ljYSBwb2RlbW9zIGNvbnN1bHRhciBpbmZvcm1hw6fDtWVzDQpyZWxhdGl2YXMgYW8gUlJFTzsgYWNyZXNjZW50YW5kbyAvZXh0cmF0b3NfZW50cmVnYXMgcG9kZW1vcyBjb25zdWx0YXIgdW0NCmV4dHJhdG8gY29udGVuZG8gaW5mb3JtYcOnw7VlcyBzb2JyZSByZWxhdMOzcmlvcyBob21vbG9nYWRvcyBlIHJldGlmaWNhZG9zDQplIG1hdHJpemVzIGVudHJlZ3Vlcy4gUGFyYSBvcyBkZW1haXMgw6kgbyBtZXNtbyBwcm9jZWRpbWVudG8uDQoNClBhcmEgY29uc3VsdGFyIGRhZG9zIGRvIFJHRiBhIFVSTCBzZXJpYToNCiJhcGlkYXRhbGFrZS50ZXNvdXJvLmdvdi5ici9vcmRzL3NpY29uZmkvdHQvcmdmIi4gUGFyYSBzYWJlcm1vcyBhcw0Kb3DDp8O1ZXMgZGlzcG9uw612ZWlzIHByZWNpc2Ftb3MgY29uc3VsdGFyIGEgZG9jdW1lbnRhw6fDo28gZGEgQVBJIG5vIGxpbmsNCmluZGljYWRvLg0KDQpEZSBhY29yZG8gY29tIGEgaW5mb3JtYcOnw6NvIGRlc2VqYWRhIHNlcsOhIG5lY2Vzc8OhcmlvIHBhc3NhciDDoCBjb25zdWx0YSB1bQ0KY29uanVudG8gZGUgcGFyw6JtZXRyb3MgZXNwZWPDrWZpY29zLiBQYXJhIGEgY29uc3VsdGEgYW8gUlJFTywgbyB1c3XDoXJpbw0KcHJlY2lzYXLDoSBpbmZvcm1hcjogbyBleGVyY8OtY2lvIGZpbmFuY2Vpcm8sIG8gYmltZXN0cmUgZGVzZWphZG8sIG8gdGlwbw0KZGUgZGVtb25zdHJhdGl2bywgbyBuw7ptZXJvIGRvIGFuZXhvIGUgbyBjw7NkaWdvIElCR0UgZG8gRW50ZSBwYXJhIG8gcXVhbA0KZGVzZWphbW9zIG9idGVyIG9zIGRhZG9zLg0KDQojIyBFeGVjdXRhbmRvIGEgQ29uc3VsdGENCg0KVmFtb3MgZXhlbXBsaWZpY2FyIG8gdXNvIGRhIEFQSSBjb20gdW1hIGNvbnN1bHRhIGFvIEFuZXhvIDAxIGRvIFJSRU8NCnBhcmEgbyBwcmltZWlybyBiaW1lc3RyZSBkZSAyMDE5IHBhcmEgbyBtdW5pY8OtcGlvIGRvIFJpbyBkZSBKYW5laXJvLA0KY3VqbyBjw7NkaWdvIElCR0Ugw6kgMzMwNDU1Ny4NCg0KQSBjb25zdWx0YSBhbyBSUkVPIGV4aWdlIGFzIHNlZ3VpbnRlcyBpbmZvcm1hw6fDtWVzOg0KDQpgYW5fZXhlcmNpY2lvYDogbyBhbm8gcGFyYSBvIHF1YWwgZGVzZWphIHJlYWxpemFyIGEgY29uc3VsdGFcDQpgbnJfcGVyaW9kb2A6IHVtIG7Dum1lcm8gZGUgMSBhIDYgaW5kaWNhbmRvIG8gYmltZXN0cmUgZGVzZWphZG9cDQpgY29fdGlwb19kZW1vbnN0cmF0aXZvYDogbyB0aXBvIGRvIGRlbW9uc3RyYXRpdm8uIE9zIHZhbG9yZXMgcG9zc8OtdmVpcw0Kc8OjbyBgUlJFT2AgZSBgUlJFTyBTaW1wbGlmaWNhZG9gXA0KYG5vX2FuZXhvYDogbyBhbmV4byBkZSBpbnRlcmVzc2UuIE9zIHZhbG9yZXMgcG9zc8OtdmVpcyBlc3TDo28gbm8gZm9ybWF0bw0KYFJSRU8tQW5leG8gZGRgLiBQYXJhIG8gQW5leG8gMDQgaMOhIHVtYSBwZXF1ZW5hIHZhcmlhw6fDo28gbmVzc2UgZm9ybWF0b1wNCmBpZF9lbnRlYDogbyBjw7NkaWdvIElCR0UgZG8gRW50ZQ0KDQpFc3NlbmNpYWxtZW50ZSBvIHByb2Nlc3NvIGRlIGZhemVyIGNvbnN1bHRhcyBjb25zaXN0ZSBlbTogKiooMSkqKiBmYXplcg0KdW1hIHJlcXVpc2nDp8OjbyBkZSBkYWRvcyDDoCBBUEkgZSByZWNlYmVyIG9zIHJlc3VsdGFkbywgKiooMikqKiB2ZXJpZmljYXINCnNlIHR1ZG8gY29ycmV1IGJlbSwgKiooMykqKiBmYXplciBvICpwYXJzZXIqIGRvcyBkYWRvcyByZXRvcm5hZG9zIHBlbGENCmNvbnN1bHRhIGUgKiooNCkqKiBjb252ZXJ0ZXIgbyByZXN1bHRhZG8gcGFyYSB1bSBgZGF0YSBmcmFtZWAuDQoNCkEgc2VndWlyIHZhbW9zIGlsdXN0cmFyIGNhZGEgdW0gZGVzc2VzIHBhc3Nvcy4NCg0KVmFtb3MsIHByaW1laXJvLCBjYXJyZWdhciBvcyBwYWNvdGVzIHF1ZSBzZXLDo28gdXRpbGl6YWRvczoNCg0KRm9udGU6IDxodHRwczovL3JwdWJzLmNvbS9tYXJjb3NmczIwMDYvYXBpX3NpY29uZmk+DQoNCmBgYHtyfQ0KbGlicmFyeShodHRyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkoc3RyaW5ncikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KYGBgDQoNCkNhcnJlZ2Fkb3Mgb3MgcGFjb3RlcywgasOhIHBvZGVtb3MgZmF6ZXIgYSBzdWJtaXNzw6NvIGRhIGNvbnN1bHRhICgqKnBhc3NvDQoxKiopOg0KDQpDb21vIGrDoSBtZW5jaW9uYWRvLCB2YW1vcyBjb25zdWx0YXIgbyBBbmV4byAwMSBkbyBSUkVPIHBhcmEgbyBwcmltZWlybw0KYmltZXN0cmUgZGUgMjAxOSBkbyBtdW5pY8OtcGlvIGRvIFJpbyBkZSBKYW5laXJvIGN1am8gY8OzZGlnbyBJQkdFIMOpDQpgMzMwNDU1N2AuDQoNCmBgYHtyfQ0KYmFzZV91cmxfcnJlbyA8LSAiYXBpZGF0YWxha2UudGVzb3Vyby5nb3YuYnIvb3Jkcy9zaWNvbmZpL3R0L3JyZW8/Ig0KDQojIHBhcsOibWV0cm9zIGRlIGNvbnN1bGF0YSBhbyBSUkVPDQphbm8gPC0gIjIwMTkiDQpiaW1lc3RyZSA8LSAiMSINCnRpcG9fcmVsYXRvcmlvIDwtICJSUkVPIg0KbnVtX2FuZXhvIDwtICJSUkVPLUFuZXhvKzAxIg0KZW50ZSA8LSAiMzMwNDU1NyIgDQoNCiMgbW9udGFyIGEgY2hhbWFkYSDDoCBBUEkNCmNoYW1hZGFfYXBpX3JyZW8gPC0gcGFzdGUoYmFzZV91cmxfcnJlbywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFuX2V4ZXJjaWNpbz0iLCBhbm8sICImIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5yX3BlcmlvZG89IiwgYmltZXN0cmUsICImIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgImNvX3RpcG9fZGVtb25zdHJhdGl2bz0iLCB0aXBvX3JlbGF0b3JpbywgIiYiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAibm9fYW5leG89IiwgbnVtX2FuZXhvLCAiJiIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICJpZF9lbnRlPSIsIGVudGUsIHNlcCA9ICIiKQ0KcnJlbyA8LSBHRVQoY2hhbWFkYV9hcGlfcnJlbykNCnN0YXR1c19jb2RlKHJyZW8pIA0KI08gc3RhdHVzIDIwMCBub3MgaW5kaWNhIHF1ZSBhIHJlcXVpc2nDp8OjbyBmb2kgZmVpdGEgY29tIHN1Y2Vzc28uDQoNCg0KYGBgDQoNCmBgYHtyfQ0KcnJlb190eHQgPC0gY29udGVudChycmVvLCBhcz0idGV4dCIsIGVuY29kaW5nPSJVVEYtOCIpDQpycmVvX2pzb24gPC0gZnJvbUpTT04ocnJlb190eHQsIGZsYXR0ZW4gPSBGQUxTRSkgDQpycmVvX2RmIDwtIGFzLmRhdGEuZnJhbWUocnJlb19qc29uW1siaXRlbXMiXV0pIA0Ka25pdHI6OmthYmxlKGhlYWQocnJlb19kZikpDQoNCmBgYA0KDQpgYGB7cn0NCnJyZW9fZGYgPC0gcnJlb19kZiAlPiUgc2VsZWN0KGNvbHVuYTp2YWxvcikNCnJyZW9fZGYgPC0gQSAlPiUgDQogICAgICAgICAgICAgIHNwcmVhZChrZXk9Y29sdW5hLCB2YWx1ZSA9IHZhbG9yKSAlPiUNCiAgICAgICAgICAgICAgc2VsZWN0KGNvbnRhLCBjb2RfY29udGEsIGBQUkVWSVPDg08gSU5JQ0lBTGAsIGBQUkVWSVPDg08gQVRVQUxJWkFEQSAoYSlgLCBgTm8gQmltZXN0cmUgKGIpYCwNCiAgICAgICAgICAgICAgICAgICAgIGAlIChiL2EpYCwgYEF0w6kgbyBCaW1lc3RyZSAoYylgLCBgJSAoYy9hKWAsIGBTQUxETyAoYS1jKWAsIGBET1RBw4fDg08gSU5JQ0lBTCAoZClgLA0KICAgICAgICAgICAgICAgICAgICAgYERPVEHDh8ODTyBBVFVBTElaQURBIChlKWAsIGBERVNQRVNBUyBFTVBFTkhBREFTIE5PIEJJTUVTVFJFYCwgYERFU1BFU0FTIEVNUEVOSEFEQVMgQVTDiSBPIEJJTUVTVFJFIChmKWAsDQogICAgICAgICAgICAgICAgICAgICBgU0FMRE8gKGcpID0gKGUtZilgLCBgREVTUEVTQVMgTElRVUlEQURBUyBOTyBCSU1FU1RSRWAsIGBERVNQRVNBUyBMSVFVSURBREFTIEFUw4kgTyBCSU1FU1RSRSAoaClgLA0KICAgICAgICAgICAgICAgICAgICAgYFNBTERPIChpKSA9IChlLWgpYCwgYERFU1BFU0FTIFBBR0FTIEFUw4kgTyBCSU1FU1RSRSAoailgKQ0KcnJlb19kZiAlPiUgc3VtbWFyeSgpDQpgYGANCg0KIyBCYXNlIGFtYmllbnRhbCBlIHVuacOjbw0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCg0KI0ludGVyZmFjZV9jb21fUlNpY29uZmkgPC0gcmVhZF9jc3YoIkludGVyZmFjZSBjb20gUlNpY29uZmkuY3N2IikNCg0KI0ludGVyZmFjZV9jb21fUlNpY29uZmkgPC0gYXMuZGF0YS5mcmFtZSh1bmNsYXNzKEludGVyZmFjZV9jb21fUlNpY29uZmkpLCAjIENvbnZlcnQgYWxsIGNvbHVtbnMgdG8gZmFjdG9yDQogICMgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzQXNGYWN0b3JzID0gVFJVRSkNCiNJbnRlcmZhY2VfY29tX1JTaWNvbmZpICU+JSBzdW1tYXJ5KCkNCiMgdW5pZmljYXIgYmFzZSBkZSBkYWRvcyBhbWJpZW50YWwNCkNlbnRybyA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9EYXRhLTIwMjIwNjE1VDAxNDk1MFotMDAxL0RhdGEvQ2VudHJvLnJkcyIpDQpORSA8LSByZWFkUkRTKCJ+L1JTdHVkaW8vRU5FTS9EYXRhLTIwMjIwNjE1VDAxNDk1MFotMDAxL0RhdGEvTkUucmRzIikNCk5PIDwtIHJlYWRSRFMoIn4vUlN0dWRpby9FTkVNL0RhdGEtMjAyMjA2MTVUMDE0OTUwWi0wMDEvRGF0YS9OTy5yZHMiKQ0KU0UgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL1NFLnJkcyIpDQpTVUwgPC0gcmVhZFJEUygifi9SU3R1ZGlvL0VORU0vRGF0YS0yMDIyMDYxNVQwMTQ5NTBaLTAwMS9EYXRhL1N1bC5yZHMiKQ0KZGZfQW08LXJiaW5kKE5FLCBOTywgU0UsU1VMLENlbnRybykNCnJtKE5FLE5PLFNFLFNVTCxDZW50cm8pDQpzdHIoZGZfQW0kTk9fRU5URSkNCnVuaXF1ZShkZl9BbSRZZWFyKQ0KZGZfQW0kTk9fRU5URTwtYXMuZmFjdG9yKGRmX0FtJGNvZGVfbXVuaSkNCkRDQV9hbWIkTk9fRU5URSA8LSBhcy5mYWN0b3IoRENBX2FtYiRjb2RfaWJnZS54KQ0Kc3RyKERDQV9hbWIkTk9fRU5URSkNCg0KZGZfQW0xPC1kZl9BbSAlPiUgZ3JvdXBfYnkoTk9fRU5URSxZZWFyKSAlPiUgc3VtbWFyaXNlKHdpbGRmaXJlPXN1bSh3aWxkZmlyZSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh1bWlkaXR5PW1lYW4oaHVtaWRpdHkpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjaXB0YXRpb249c3VtKHByZWNpcHRhdGlvbiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlPW1lYW4odGVtcGVyYXR1cmUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb19wcGI9bWVhbihjb19wcGIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbTI1X3VnbTM9bWVhbihwbTI1X3VnbTMpKQ0KdW5pcXVlDQpBbWJfT3JjPC1pbm5lcl9qb2luKERDQV9hbWIsZGZfQW0xLGJ5PSJOT19FTlRFIikNCnN1bW1hcnkoQW1iX09yYykNCg0KYGBgDQoNCmBgYHtyfQ0KZGVzY3JpYmUoQW1iX09yYykNCkFtYl9PcmMgJT4lIGdncGxvdChhZXModGVtcGVyYXR1cmUsRGVzcGVzYXMuTGlxdWlkYWRhcyxjb2w9dWYpKStnZW9tX3Ntb290aChtZXRob2QgPSBsbSkgDQpBbWJfT3JjICU+JSBnZ3Bsb3QoYWVzKHRlbXBlcmF0dXJlLERlc3Blc2FzLkxpcXVpZGFkYXMsY29sPWNvbnRhKSkrZ2VvbV9zbW9vdGgobWV0aG9kID0gbG0pIA0KDQpBbWJfT3JjICU+JSBnZ3Bsb3QoYWVzKHRlbXBlcmF0dXJlLERlc3Blc2FzLkxpcXVpZGFkYXMsY29sPXVmKSkrZ2VvbV9zbW9vdGgobWV0aG9kID0gbG0pIA0KQW1iX09yYyAlPiUgZ2dwbG90KGFlcyhwcmVjaXB0YXRpb24sRGVzcGVzYXMuTGlxdWlkYWRhcyxjb2w9Y29udGEpKStnZW9tX3Ntb290aChtZXRob2QgPSBsbSkgDQpBbWJfT3JjICU+JSBnZ3Bsb3QoYWVzKGNvX3BwYixEZXNwZXNhcy5MaXF1aWRhZGFzLGNvbD11ZikpK2dlb21fc21vb3RoKG1ldGhvZCA9IGxtKSANCkFtYl9PcmMgJT4lIGdncGxvdChhZXMod2lsZGZpcmUsRGVzcGVzYXMuTGlxdWlkYWRhcyxjb2w9dWYpKStnZW9tX3Ntb290aChtZXRob2QgPSBsbSkgDQpBbWJfT3JjICU+JSBnZ3Bsb3QoYWVzKGh1bWlkaXR5LERlc3Blc2FzLkxpcXVpZGFkYXMsY29sPWNvbnRhKSkrZ2VvbV9zbW9vdGgobWV0aG9kID0gbG0pIA0KDQpNb2Q8LWxtKERlc3Blc2FzLkxpcXVpZGFkYXN+dGVtcGVyYXR1cmUraHVtaWRpdHkrcHJlY2lwdGF0aW9uK2NvX3BwYitwb3B1bGFjYW8rdWYrY29udGEsQW1iX09yYykNCnN1bW1hcnkoTW9kKQ0KDQpgYGANCg==