Informações básicas sobre a biblioteca PNADcIBGE

O pacote PNADcIBGE foi desenvolvido para facilitar o download, importação e análise dos dados amostrais da Pesquisa Nacional por Amostra de Domicílios Contínua realizada pelo Instituto Brasileiro de Geografia e Estatística - IBGE.

A PNAD Contínua possui três tipos de microdados:

Através do objeto criado com este pacote, é possível utilizar o pacote survey para realizar análises considerando o efeito do esquema de seleção utilizado no plano amostral complexo da pesquisa e calcular corretamente as medidas de erro das estimativas, considerando o estimador de pós-estratificação utilizado na pesquisa.

Importação online dos microdados trimestrais para variáveis selecionadas

Análise com o pacote survey

Devido ao plano amostral da PNAD Contínua, é necessário que sejam utilizadas ferramentas específicas para a análise de dados amostrais complexos. O pacote survey é um pacote criado especificamente para análise e modelagem de dados provenientes de pesquisas com estes tipos de planos amostrais. Maiores detalhes sobre o pacote podem ser encontrados no site. A título de exemplificação, serão utilizadas as seguintes variáveis:

Estimando Totais

Variáveis Numéricas

É possível estimar totais populacionais de variáveis numéricas.

RENDA TOTAL

            total         SE
VD4020 2.8538e+11 3232099917

Variáveis Categóricas

É possível estimar totais populacionais por categorias.

TOTAL SEXO

                total     SE
V2007Homem  105256054 0.0597
V2007Mulher 110152130 0.0501

É possível estimar o total de mais de uma variável, no mesmo código.

TOTAL SEXO/RAÇA

                  total         SE
V2007Homem    105256054 5.9700e-02
V2007Mulher   110152130 5.0100e-02
V2010Branca    92151590 4.3304e+05
V2010Preta     22282980 2.6777e+05
V2010Amarela    1564002 7.5188e+04
V2010Parda     98472156 3.5676e+05
V2010Indígena    912171 4.3699e+04
V2010Ignorado     25284 6.1276e+03

É possível estimar o cruzamento de duas ou mais variáveis categóricas.

TOTAL SEXO E RAÇA

                                                    A            B
interaction(V2007, V2010)Homem.Branca    44458172.650   236389.561
interaction(V2007, V2010)Mulher.Branca   47693417.764   237439.197
interaction(V2007, V2010)Homem.Preta     11128237.656   153710.126
interaction(V2007, V2010)Mulher.Preta    11154742.753   141665.288
interaction(V2007, V2010)Homem.Amarela     702041.013    38041.011
interaction(V2007, V2010)Mulher.Amarela    861960.455    47299.599
interaction(V2007, V2010)Homem.Parda     48538297.344   206795.152
interaction(V2007, V2010)Mulher.Parda    49933858.721   204956.689
interaction(V2007, V2010)Homem.Indígena    418865.673    23340.158
interaction(V2007, V2010)Mulher.Indígena   493305.736    26256.040
interaction(V2007, V2010)Homem.Ignorado     10439.744     3067.550
interaction(V2007, V2010)Mulher.Ignorado    14844.638     4238.869

Estimando Proporções

Estimando a proporção de cada sexo na população.

PROPORÇÃO DOS SEXOS NA POPULAÇÃO

               mean SE
V2007Homem  0.48864  0
V2007Mulher 0.51136  0

É possível estimar a proporção com mais de duas variáveis (sexo e cor ou raça).

PROPORÇÃO DOS SEXOS DE ACORDO COM A RAÇA OU COR

                    mean     SE
V2007Homem    0.48863535 0.0000
V2007Mulher   0.51136465 0.0000
V2010Branca   0.42779986 0.0020
V2010Preta    0.10344538 0.0012
V2010Amarela  0.00726064 0.0003
V2010Parda    0.45714213 0.0017
V2010Indígena 0.00423462 0.0002
V2010Ignorado 0.00011738 0.0000

É possível ainda estimar a proporção de um cruzamento de variáveis, por exemplo, sexo e cor.

CRUZAMENTO SEXO X COR

                                               mean     SE
interaction(V2007, V2010)Homem.Branca    2.0639e-01 0.0011
interaction(V2007, V2010)Mulher.Branca   2.2141e-01 0.0011
interaction(V2007, V2010)Homem.Preta     5.1661e-02 0.0007
interaction(V2007, V2010)Mulher.Preta    5.1784e-02 0.0007
interaction(V2007, V2010)Homem.Amarela   3.2591e-03 0.0002
interaction(V2007, V2010)Mulher.Amarela  4.0015e-03 0.0002
interaction(V2007, V2010)Homem.Parda     2.2533e-01 0.0010
interaction(V2007, V2010)Mulher.Parda    2.3181e-01 0.0010
interaction(V2007, V2010)Homem.Indígena  1.9445e-03 0.0001
interaction(V2007, V2010)Mulher.Indígena 2.2901e-03 0.0001
interaction(V2007, V2010)Homem.Ignorado  4.8465e-05 0.0000
interaction(V2007, V2010)Mulher.Ignorado 6.8914e-05 0.0000

Estimando razões

Além das proporções, também é possível estimar razões entre duas variáveis. por exemplo, a taxa de desocupação é a razão entre a variável Pessoas Desocupadas e Pessoas na Força de Trabalho.

Ratio estimator: svyratio.svyrep.design(numerator = ~(VD4002 == "Pessoas desocupadas"), 
    denominator = ~(VD4001 == "Pessoas na força de trabalho"), 
    design = dadosPNADc, na.rm = TRUE)
Ratios=
                                VD4001 == "Pessoas na força de trabalho"
VD4002 == "Pessoas desocupadas"                               0.08039508
SEs=
             [,1]
[1,] 0.0009918589

Estimação para variáveis de rendimento deflacionadas

Para estimar totais e médias de variáveis de rendimento deflacionadas, ou seja, ao invés de obter as estimativas sob o valor nominal destas variáveis, passar a obter as estimativas sob o valor real. Primeiramente, é necessário realizar a criação da variável de rendimento com os valores deflacionados nos microdados.

RENDA TOTAL REAL

                total         SE
VD4020_real 2.861e+11 3241718234

MÉDIA RENDA REAL TOTAL

              mean    SE
VD4020_real 2941.4 31.16

Estimação para um Domínio

Muitas vezes queremos fazer uma análise para um domínio específico da população. Com o pacote survey, esse domínio pode ser selecionado utilizando a função subset no objeto do plano amostral, aplicando a condição que define aquele domínio. É necessário que a seleção desse domínio nos dados seja feita somente após a criação do objeto que define o plano amostral, caso contrário poderá ser obtido resultados incorretos. Para a seleção dos domínios podem ser utilizadas condicionais com igualdade, como abaixo:

MÉDIA RENDA MULHER

         mean     SE
VD4020 2555.7 30.649

Ou condicionais com desigualdade, como abaixo:

TAXA DE DESOCUPAÇÃO PARA PESSOAS MAIORES DE 25 ANOS

Ratio estimator: svyratio.svyrep.design(numerator = ~(VD4002 == "Pessoas desocupadas"), 
    denominator = ~(VD4001 == "Pessoas na força de trabalho"), 
    design = subset(dadosPNADc, V2009 >= 25), na.rm = TRUE)
Ratios=
                                VD4001 == "Pessoas na força de trabalho"
VD4002 == "Pessoas desocupadas"                               0.06120555
SEs=
             [,1]
[1,] 0.0009007475

Além disso, é possível utilizar múltiplas condições com os operados lógicos & (“e”) e | (“ou”), para estimar a frequência relativa de cada nível de instrução para homens pardos com mais de 30 anos, por exemplo.

NÍVEL DE INSTRUÇÃO PARA HOMENS DE COR PARDA E MAIORES DE 30 ANOS

                                                   mean     SE
VD3004Sem instrução e menos de 1 ano de estudo 0.092896 0.0015
VD3004Fundamental incompleto ou equivalente    0.357178 0.0029
VD3004Fundamental completo ou equivalente      0.079902 0.0017
VD3004Médio incompleto ou equivalente          0.051891 0.0013
VD3004Médio completo ou equivalente            0.283245 0.0030
VD3004Superior incompleto ou equivalente       0.027428 0.0011
VD3004Superior completo                        0.107461 0.0022

Além disso, caso deseje realizar diversas análises para um mesmo domínio, é possível criar um objeto que contenha apenas os dados daquele domínio a partir de um subset do objeto original do plano amostral.

Estimação para vários domínios

Em outros casos há interesse em estimar quantidades de interesse para diversos domínios mutuamente exclusivos, a fim de possibilitar comparações. Para isto, podemos utilizar a função svyby.

Para utilizá-la são necessários os seguintes argumentos:

A função utilizada para calcular a quantidade de interesse (svytotal, svymean, svyratio, svyquantile, …). Se desejamos estimar a frequência relativa de homens e mulheres em cada nível de instrução, usamos o seguinte código:

FREQUÊNCIA DE HOMENS E MULHERES POR NÍVEL DE INSTRUÇÃO

Caso desejemos estimar o contrário, a frequência relativa de cada nível de instrução para cada sexo, basta inverter as variáveis correspondentes na sintaxe:

FREQUÊNCIA DO NÍVEL DE INSTRUÇÃO POR SEXO

Também pode ser utilizado para estimar a renda média efetiva por Unidade da Federação:

RENDA MÉDIA EFETIVA POR UNIDADE DA FEDERAÇÃO

É possível definir domínios que sejam cruzamentos de variáveis categóricas com a função interaction. Na função svyby também é possível utilizar o argumento vartype=“cv” caso desejemos que no output apareça o coeficiente de variação ao invés do erro padrão da estimativa. Para estimar a taxa de desocupação por sexo e cor ou raça utilizando as funções svyratio e svyby e o respectivo cv:

TAXA DE DESOCUPAÇÃO POR SEXO E COR/RAÇA

LS0tDQp0aXRsZTogIlBOQURDIHBhcmEgYSBSZWdpw6NvIE1ldHJvcG9saXRhbmEgZGUgQ3VyaXRpYmEgKFJNQykiDQphdXRob3I6ICJMdWl6IENhcmxvcyBSLiBOZWR1emlhayINCnN1YnRpdGxlOiAiUFVDLVBSLCAyMiBkZSBhZ29zdG8gZGUgMjAyMyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazogZGVmYXVsdA0KICBodG1sX2RvY3VtZW50OiBkZWZhdWx0DQogIHBkZl9kb2N1bWVudDogZGVmYXVsdA0KLS0tDQojIEluZm9ybWHDp8O1ZXMgYsOhc2ljYXMgc29icmUgYSBiaWJsaW90ZWNhIFtQTkFEY0lCR0VdKGh0dHBzOi8vcnB1YnMuY29tL2dhYnJpZWwtYXNzdW5jYW8taWJnZS9wbmFkYykNCg0KTyBwYWNvdGUgKlBOQURjSUJHRSogZm9pIGRlc2Vudm9sdmlkbyBwYXJhIGZhY2lsaXRhciBvIGRvd25sb2FkLCBpbXBvcnRhw6fDo28gZSBhbsOhbGlzZSBkb3MgZGFkb3MgYW1vc3RyYWlzIGRhIFBlc3F1aXNhIE5hY2lvbmFsIHBvciBBbW9zdHJhIGRlIERvbWljw61saW9zIENvbnTDrW51YSByZWFsaXphZGEgcGVsbyBJbnN0aXR1dG8gQnJhc2lsZWlybyBkZSBHZW9ncmFmaWEgZSBFc3RhdMOtc3RpY2EgLSBJQkdFLg0KDQpBIFBOQUQgQ29udMOtbnVhIHBvc3N1aSB0csOqcyB0aXBvcyBkZSBtaWNyb2RhZG9zOg0KDQotIFRyaW1lc3RyYWwsIHF1ZSBjb250w6ltIGEgcGFydGUgYsOhc2ljYSBpbnZlc3RpZ2FkYSBwZWxhIHBlc3F1aXNhLCBjb250ZW5kbyB2YXJpw6F2ZWlzIGNvbmp1bnR1cmFpcyBkZSBtZXJjYWRvIGRlIHRyYWJhbGhvIHJlZmVyZW50ZXMgYSB1bSB0cmltZXN0cmUgY2l2aWw7DQoNCi0gQW51YWwgYWN1bXVsYWRvcyBlbSBkZXRlcm1pbmFkYSB2aXNpdGEsIHF1ZSBjb250w6ltIHRlbWFzIGUgdMOzcGljb3Mgc3VwbGVtZW50YXJlcyBwZXNxdWlzYWRvcyBhbyBsb25nbyBkbyBhbm8gZW0gZGV0ZXJtaW5hZGEgdmlzaXRhOw0KDQotIEFudWFsIGNvbmNlbnRyYWRvcyBlbSBkZXRlcm1pbmFkbyB0cmltZXN0cmUsIHF1ZSBjb250w6ltIHRlbWFzIGUgdMOzcGljb3Mgc3VwbGVtZW50YXJlcyBwZXNxdWlzYWRvcyBlbSB0cmltZXN0cmVzIGVzcGVjw61maWNvcyBkbyBhbm8uDQoNCi0gQWzDqW0gZGlzc28sIGEgcGFydGlyIGRlIDIwMjEgZm9yYW0gaW5jbHXDrWRvcyBtw7NkdWxvcyBhcGxpY2Fkb3Mgc29tZW50ZSBwYXJhIHVtIG1vcmFkb3Igc2VsZWNpb25hZG8gbmEgUE5BRCBDb250w61udWEsIHBhcmEgdGVtYXMgZSB0w7NwaWNvcyBzdXBsZW1lbnRhcmVzIGVzcGVjw61maWNvcy4NCg0KQXRyYXbDqXMgZG8gb2JqZXRvIGNyaWFkbyBjb20gZXN0ZSBwYWNvdGUsIMOpIHBvc3PDrXZlbCB1dGlsaXphciBvIHBhY290ZSBzdXJ2ZXkgcGFyYSByZWFsaXphciBhbsOhbGlzZXMgY29uc2lkZXJhbmRvIG8gZWZlaXRvIGRvIGVzcXVlbWEgZGUgc2VsZcOnw6NvIHV0aWxpemFkbyBubyBwbGFubyBhbW9zdHJhbCBjb21wbGV4byBkYSBwZXNxdWlzYSBlIGNhbGN1bGFyIGNvcnJldGFtZW50ZSBhcyBtZWRpZGFzIGRlIGVycm8gZGFzIGVzdGltYXRpdmFzLCBjb25zaWRlcmFuZG8gbyBlc3RpbWFkb3IgZGUgcMOzcy1lc3RyYXRpZmljYcOnw6NvIHV0aWxpemFkbyBuYSBwZXNxdWlzYS4NCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojIGRvd25sb2FkIGRhcyBiaWJsaW90ZWNhcw0KI2luc3RhbGwucGFja2FnZXMoIlBOQURjSUJHRSIpDQojaW5zdGFsbC5wYWNrYWdlcygic3VydmV5IikNCiNpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyBsZWl0dXJhIGRhcyBiaWJsaW90ZWNhcw0KbGlicmFyeShQTkFEY0lCR0UpDQpsaWJyYXJ5KHN1cnZleSkNCmxpYnJhcnkodGlkeXZlcnNlKQ0KYGBgDQoNCiMgSW1wb3J0YcOnw6NvICpvbmxpbmUqIGRvcyBtaWNyb2RhZG9zIHRyaW1lc3RyYWlzIHBhcmEgdmFyacOhdmVpcyBzZWxlY2lvbmFkYXMNCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQojdmFyaWF2ZWlzX3NlbGVjaW9uYWRhcyA8LSBjKCJVRiIsIlYyMDAxIiwiVjIwMDUiLCJWMjAwNyIsIlYyMDA5IiwiVjIwMTAiLCJWMzAwNyIsIlZEMzAwNCIsIlZENDAwMSIsIlZENDAwMiIsIlZENDAyMCIsIlZENDAzNSIpDQojZGFkb3NQTkFEYyA8LSBnZXRfcG5hZGMoeWVhcj0yMDIzLCBxdWFydGVyPTIsIHZhcnM9dmFyaWF2ZWlzX3NlbGVjaW9uYWRhcywgZGVmbGF0b3I9VFJVRSwgZGVzaWduPVRSVUUpDQojZGFkb3NQTkFEYw0KI3dyaXRlLmNzdihkYWRvc1BOQURjLCBmaWxlID0gInBuYWRjLmNzdiIsIHJvdy5uYW1lcyA9IEZBTFNFKQ0KYGBgDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KIyBwYXJhIHVzYXIgbyBnZ3Bsb3QsIMOpIG5lY2Vzc8OhcmlvIHRyYWJhbGhhciBjb20gdGliYmxlcywgdXRpbGl6YW5kbyBvIGFyZ3VtZW50byBkZXNpZ249RkFMU0UNCiNnZ3Bsb3QoZGF0YSA9IGRhZG9zUE5BRGMpICsgDQojICBnZW9tX3BvaW50KG1hcHBpbmcgPSBhZXMoeCA9IFYyMDA3LCB5ID0gVkQzMDA0KSkNCmBgYA0KDQojIEFuw6FsaXNlIGNvbSBvIHBhY290ZSBzdXJ2ZXkNCg0KRGV2aWRvIGFvIHBsYW5vIGFtb3N0cmFsIGRhIFBOQUQgQ29udMOtbnVhLCDDqSBuZWNlc3PDoXJpbyBxdWUgc2VqYW0gdXRpbGl6YWRhcyBmZXJyYW1lbnRhcyBlc3BlY8OtZmljYXMgcGFyYSBhIGFuw6FsaXNlIGRlIGRhZG9zIGFtb3N0cmFpcyBjb21wbGV4b3MuIE8gcGFjb3RlIHN1cnZleSDDqSB1bSBwYWNvdGUgY3JpYWRvIGVzcGVjaWZpY2FtZW50ZSBwYXJhIGFuw6FsaXNlIGUgbW9kZWxhZ2VtIGRlIGRhZG9zIHByb3ZlbmllbnRlcyBkZSBwZXNxdWlzYXMgY29tIGVzdGVzIHRpcG9zIGRlIHBsYW5vcyBhbW9zdHJhaXMuIE1haW9yZXMgZGV0YWxoZXMgc29icmUgbyBwYWNvdGUgcG9kZW0gc2VyIGVuY29udHJhZG9zIG5vIFtzaXRlXShodHRwczovL3JwdWJzLmNvbS9nYWJyaWVsLWFzc3VuY2FvLWliZ2UvcG5hZGMpLiBBIHTDrXR1bG8gZGUgZXhlbXBsaWZpY2HDp8Ojbywgc2Vyw6NvIHV0aWxpemFkYXMgYXMgc2VndWludGVzIHZhcmnDoXZlaXM6DQoNCi0gVUY6IHVuaWRhZGUgZGEgZmVkZXJhw6fDo28uDQotIFYyMDAxOiBuw7ptZXJvIGRlIHBlc3NvYXMgbm8gZG9taWPDrWxpby4NCi0gVjIwMDU6IGNvbmRpw6fDo28gbm8gZG9taWPDrWxpbyAocGFpLCBzb2dybywgZXRjLikuDQotIFYyMDA3OiBzZXhvLg0KLSBWMjAwOTogaWRhZGUgZG8gbW9yYWRvciBuYSBkYXRhIGRlIHJlZmVyw6puY2lhLg0KLSBWMjAxMDogY29yIG91IHJhw6dhLg0KLSBWMzAwNzogLi4uIGrDoSBpbmNsdWkgYWxndW0gb3V0cm8gY3Vyc28gZGUgZ3JhZHVhw6fDo28uDQotIFZEMzAwNDogbsOtdmVsIGRlIGluc3RydcOnw6NvIG1haXMgZWxldmFkbyBhbGNhbsOnYWRvLg0KLSBWRDQwMDE6IGNvbmRpw6fDo28gZW0gcmVsYcOnw6NvIMOgIGZvcsOnYSBkZSB0cmFiYWxoby4NCi0gVkQ0MDAyOiBjb25kacOnw6NvIGRlIG9jdXBhw6fDo28uDQotIFZENDAyMDogcmVuZGltZW50byBtZW5zYWwgZWZldGl2by4NCi0gVkQ0MDM1OiBob3JhcyB0cmFiYWxoYWRhcyBuYSBzZW1hbmEgZGUgcmVmZXLDqm5jaWEuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KdmFyaWF2ZWlzX3NlbGVjaW9uYWRhcyA8LSBjKCJVRiIsIlYyMDAxIiwiVjIwMDUiLCJWMjAwNyIsIlYyMDA5IiwiVjIwMTAiLCJWMzAwNyIsIlZEMzAwNCIsIlZENDAwMSIsIlZENDAwMiIsIlZENDAyMCIsIlZENDAzNSIpDQoNCmRhZG9zUE5BRGMgPC0gZ2V0X3BuYWRjKHllYXI9MjAyMywgcXVhcnRlcj0yLCB2YXJzPXZhcmlhdmVpc19zZWxlY2lvbmFkYXMsIGRlZmxhdG9yPVRSVUUsIGRlc2lnbj1UUlVFKQ0KYGBgDQoNCiMgRXN0aW1hbmRvIFRvdGFpcw0KDQojIyBWYXJpw6F2ZWlzIE51bcOpcmljYXMNCg0Kw4kgcG9zc8OtdmVsIGVzdGltYXIgKip0b3RhaXMgcG9wdWxhY2lvbmFpcyBkZSB2YXJpw6F2ZWlzIG51bcOpcmljYXMqKi4NCg0KKipSRU5EQSBUT1RBTCoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQojIHJlbmRhIHRvdGFsDQp0b3RhbHJlbmRhIDwtIHN2eXRvdGFsKHg9flZENDAyMCwgZGVzaWduPWRhZG9zUE5BRGMsIG5hLnJtPVRSVUUpDQp0b3RhbHJlbmRhDQpgYGANCiMjIFZhcmnDoXZlaXMgQ2F0ZWfDs3JpY2FzDQoNCsOJIHBvc3PDrXZlbCBlc3RpbWFyICoqdG90YWlzIHBvcHVsYWNpb25haXMgcG9yIGNhdGVnb3JpYXMqKi4NCg0KKipUT1RBTCBTRVhPKioNCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0NCiMgdG90YWwgcG9wdWxhY2lvbmFsIHBlbGEgY2F0ZWdvcmlhIHNleG8NCnRvdGFsc2V4byA8LSBzdnl0b3RhbCh4PX5WMjAwNywgZGVzaWduPWRhZG9zUE5BRGMsIG5hLnJtPVRSVUUpDQp0b3RhbHNleG8NCmBgYA0KDQrDiSBwb3Nzw612ZWwgZXN0aW1hciBvIHRvdGFsIGRlIG1haXMgZGUgdW1hIHZhcmnDoXZlbCwgbm8gbWVzbW8gY8OzZGlnby4NCg0KKipUT1RBTCBTRVhPL1JBw4dBKioNCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0NCnRvdGFsc2V4b3JhY2EgPC0gc3Z5dG90YWwoeD1+VjIwMDcrVjIwMTAsIGRlc2lnbj1kYWRvc1BOQURjLCBuYS5ybT1UUlVFKQ0KdG90YWxzZXhvcmFjYQ0KYGBgDQoNCsOJIHBvc3PDrXZlbCBlc3RpbWFyIG8gKipjcnV6YW1lbnRvIGRlIGR1YXMgb3UgbWFpcyB2YXJpw6F2ZWlzIGNhdGVnw7NyaWNhcyoqLg0KDQoqKlRPVEFMIFNFWE8gRSBSQcOHQSoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQp0b3RhbHNleG9FcmFjYSA8LSBzdnl0b3RhbCh4PX5pbnRlcmFjdGlvbihWMjAwNyxWMjAxMCksIGRlc2lnbj1kYWRvc1BOQURjLCBuYS5ybT1UUlVFKQ0KZnRhYmxlKHg9dG90YWxzZXhvRXJhY2EpDQpgYGANCg0KIyBFc3RpbWFuZG8gUHJvcG9yw6fDtWVzDQoNCkVzdGltYW5kbyBhIHByb3BvcsOnw6NvIGRlIGNhZGEgc2V4byBuYSBwb3B1bGHDp8Ojby4NCg0KKipQUk9QT1LDh8ODTyBET1MgU0VYT1MgTkEgUE9QVUxBw4fDg08qKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KcHJvcHNleG8gPC0gc3Z5bWVhbih4PX5WMjAwNywgZGVzaWduPWRhZG9zUE5BRGMsIG5hLnJtPVRSVUUpDQpwcm9wc2V4bw0KYGBgDQoNCsOJIHBvc3PDrXZlbCBlc3RpbWFyIGEgcHJvcG9yw6fDo28gY29tIG1haXMgZGUgZHVhcyB2YXJpw6F2ZWlzIChzZXhvIGUgY29yIG91IHJhw6dhKS4NCg0KKipQUk9QT1LDh8ODTyBET1MgU0VYT1MgREUgQUNPUkRPIENPTSBBIFJBw4dBIE9VIENPUioqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQpwcm9wc2V4b3JhY2EgPC0gc3Z5bWVhbih4PX5WMjAwNytWMjAxMCwgZGVzaWduPWRhZG9zUE5BRGMsIG5hLnJtPVRSVUUpDQpwcm9wc2V4b3JhY2ENCmBgYA0KDQrDiSBwb3Nzw612ZWwgYWluZGEgZXN0aW1hciBhIHByb3BvcsOnw6NvIGRlIHVtIGNydXphbWVudG8gZGUgdmFyacOhdmVpcywgcG9yIGV4ZW1wbG8sIHNleG8gZSBjb3IuDQoNCioqQ1JVWkFNRU5UTyBTRVhPIFggQ09SKioNCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0NCnByb3BzZXhvRXJhY2EgPC0gc3Z5bWVhbih4PX5pbnRlcmFjdGlvbihWMjAwNyxWMjAxMCksIGRlc2lnbj1kYWRvc1BOQURjLCBuYS5ybT1UUlVFKQ0KI2Z0YWJsZSh4PXByb3BzZXhvRXJhY2EpDQpwcm9wc2V4b0VyYWNhDQpgYGANCg0KIyBFc3RpbWFuZG8gcmF6w7Vlcw0KDQpBbMOpbSBkYXMgcHJvcG9yw6fDtWVzLCB0YW1iw6ltIMOpIHBvc3PDrXZlbCBlc3RpbWFyIHJhesO1ZXMgZW50cmUgZHVhcyB2YXJpw6F2ZWlzLiBwb3IgZXhlbXBsbywgYSAqKnRheGEgZGUgZGVzb2N1cGHDp8OjbyoqIMOpIGEgcmF6w6NvIGVudHJlIGEgdmFyacOhdmVsICoqUGVzc29hcyBEZXNvY3VwYWRhcyoqIGUgKipQZXNzb2FzIG5hIEZvcsOnYSBkZSBUcmFiYWxobyoqLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KdHhkZXNvY3VwIDwtIHN2eXJhdGlvKG51bWVyYXRvcj1+KFZENDAwMj09IlBlc3NvYXMgZGVzb2N1cGFkYXMiKSwgZGVub21pbmF0b3I9fihWRDQwMDE9PSJQZXNzb2FzIG5hIGZvcsOnYSBkZSB0cmFiYWxobyIpLCBkZXNpZ249ZGFkb3NQTkFEYywgbmEucm09VFJVRSkNCiMgcmVzdWx0YWRvIGRldmUgc2VyIG11bHRpcGxpY2FkbyBwb3IgMTAwDQp0eGRlc29jdXANCmBgYA0KDQojIEVzdGltYcOnw6NvIHBhcmEgdmFyacOhdmVpcyBkZSByZW5kaW1lbnRvIGRlZmxhY2lvbmFkYXMNCg0KUGFyYSBlc3RpbWFyIHRvdGFpcyBlIG3DqWRpYXMgZGUgdmFyacOhdmVpcyBkZSByZW5kaW1lbnRvIGRlZmxhY2lvbmFkYXMsIG91IHNlamEsIGFvIGludsOpcyBkZSBvYnRlciBhcyBlc3RpbWF0aXZhcyBzb2IgbyB2YWxvciBub21pbmFsIGRlc3RhcyB2YXJpw6F2ZWlzLCBwYXNzYXIgYSBvYnRlciBhcyBlc3RpbWF0aXZhcyBzb2IgbyB2YWxvciByZWFsLiBQcmltZWlyYW1lbnRlLCDDqSBuZWNlc3PDoXJpbyByZWFsaXphciBhIGNyaWHDp8OjbyBkYSB2YXJpw6F2ZWwgZGUgcmVuZGltZW50byBjb20gb3MgdmFsb3JlcyBkZWZsYWNpb25hZG9zIG5vcyBtaWNyb2RhZG9zLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZGFkb3NQTkFEYyR2YXJpYWJsZXMgPC0gdHJhbnNmb3JtKGRhZG9zUE5BRGMkdmFyaWFibGVzLCBWRDQwMjBfcmVhbD1WRDQwMjAqRWZldGl2bykNCmBgYA0KKipSRU5EQSBUT1RBTCBSRUFMKioNCg0KYGBge3IsIGVjaG89RkFMU0UsIGluY2x1ZGU9VFJVRX0NCnRvdGFscmVuZGFfcmVhbCA8LSBzdnl0b3RhbCh4PX5WRDQwMjBfcmVhbCwgZGVzaWduPWRhZG9zUE5BRGMsIG5hLnJtPVRSVUUpDQp0b3RhbHJlbmRhX3JlYWwNCmBgYA0KKipNw4lESUEgUkVOREEgUkVBTCBUT1RBTCoqDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KbWVkaWFyZW5kYV9yZWFsIDwtIHN2eW1lYW4oeD1+VkQ0MDIwX3JlYWwsIGRlc2lnbj1kYWRvc1BOQURjLCBuYS5ybT1UUlVFKQ0KbWVkaWFyZW5kYV9yZWFsDQpgYGANCiMgRXN0aW1hw6fDo28gcGFyYSB1bSBEb23DrW5pbw0KDQpNdWl0YXMgdmV6ZXMgcXVlcmVtb3MgZmF6ZXIgdW1hIGFuw6FsaXNlIHBhcmEgdW0gZG9tw61uaW8gZXNwZWPDrWZpY28gZGEgcG9wdWxhw6fDo28uIENvbSBvIHBhY290ZSBzdXJ2ZXksIGVzc2UgZG9tw61uaW8gcG9kZSBzZXIgc2VsZWNpb25hZG8gdXRpbGl6YW5kbyBhIGZ1bsOnw6NvIHN1YnNldCBubyBvYmpldG8gZG8gcGxhbm8gYW1vc3RyYWwsIGFwbGljYW5kbyBhIGNvbmRpw6fDo28gcXVlIGRlZmluZSBhcXVlbGUgZG9tw61uaW8uIMOJIG5lY2Vzc8OhcmlvIHF1ZSBhIHNlbGXDp8OjbyBkZXNzZSBkb23DrW5pbyBub3MgZGFkb3Mgc2VqYSBmZWl0YSBzb21lbnRlICoqYXDDs3MqKiBhIGNyaWHDp8OjbyBkbyBvYmpldG8gcXVlIGRlZmluZSBvIHBsYW5vIGFtb3N0cmFsLCBjYXNvIGNvbnRyw6FyaW8gcG9kZXLDoSBzZXIgb2J0aWRvIHJlc3VsdGFkb3MgaW5jb3JyZXRvcy4gUGFyYSBhIHNlbGXDp8OjbyBkb3MgZG9tw61uaW9zIHBvZGVtIHNlciB1dGlsaXphZGFzICoqY29uZGljaW9uYWlzIGNvbSBpZ3VhbGRhZGUqKiwgY29tbyBhYmFpeG86DQoNCioqTcOJRElBIFJFTkRBIE1VTEhFUioqDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KbWVkaWFyZW5kYU0gPC0gc3Z5bWVhbih4PX5WRDQwMjAsIGRlc2lnbj1zdWJzZXQoZGFkb3NQTkFEYywgVjIwMDc9PSJNdWxoZXIiKSwgbmEucm09VFJVRSkNCm1lZGlhcmVuZGFNDQpgYGANCg0KT3UgKipjb25kaWNpb25haXMgY29tIGRlc2lndWFsZGFkZSoqLCBjb21vIGFiYWl4bzoNCg0KKipUQVhBIERFIERFU09DVVBBw4fDg08gUEFSQSBQRVNTT0FTIE1BSU9SRVMgREUgMjUgQU5PUyoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQp0eGRlc29jdXAyNSA8LSBzdnlyYXRpbyhudW1lcmF0b3I9fihWRDQwMDI9PSJQZXNzb2FzIGRlc29jdXBhZGFzIiksIGRlbm9taW5hdG9yPX4oVkQ0MDAxPT0iUGVzc29hcyBuYSBmb3LDp2EgZGUgdHJhYmFsaG8iKSwgZGVzaWduPXN1YnNldChkYWRvc1BOQURjLCBWMjAwOT49MjUpLCBuYS5ybT1UUlVFKQ0KdHhkZXNvY3VwMjUNCmBgYA0KDQpBbMOpbSBkaXNzbywgw6kgcG9zc8OtdmVsIHV0aWxpemFyICoqbcO6bHRpcGxhcyBjb25kacOnw7VlcyBjb20gb3Mgb3BlcmFkb3MgbMOzZ2ljb3MgJiAo4oCcZeKAnSkgZSB8ICjigJxvdeKAnSkqKiwgcGFyYSBlc3RpbWFyIGEgZnJlcXXDqm5jaWEgcmVsYXRpdmEgZGUgY2FkYSBuw612ZWwgZGUgaW5zdHJ1w6fDo28gcGFyYSBob21lbnMgcGFyZG9zIGNvbSBtYWlzIGRlIDMwIGFub3MsIHBvciBleGVtcGxvLg0KDQoqKk7DjVZFTCBERSBJTlNUUlXDh8ODTyBQQVJBIEhPTUVOUyBERSBDT1IgUEFSREEgRSBNQUlPUkVTIERFIDMwIEFOT1MqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0Kbml2ZWxpbnN0ckhQMzAgPC0gc3Z5bWVhbih4PX5WRDMwMDQsIGRlc2lnbj1zdWJzZXQoZGFkb3NQTkFEYywgVjIwMDc9PSJIb21lbSIgJiBWMjAxMD09IlBhcmRhIiAmIFYyMDA5PjMwKSwgbmEucm09VFJVRSkNCm5pdmVsaW5zdHJIUDMwDQpgYGANCg0KQWzDqW0gZGlzc28sIGNhc28gZGVzZWplIHJlYWxpemFyIGRpdmVyc2FzIGFuw6FsaXNlcyBwYXJhIHVtIG1lc21vIGRvbcOtbmlvLCDDqSBwb3Nzw612ZWwgY3JpYXIgdW0gb2JqZXRvIHF1ZSBjb250ZW5oYSBhcGVuYXMgb3MgZGFkb3MgZGFxdWVsZSBkb23DrW5pbyBhIHBhcnRpciBkZSB1bSBzdWJzZXQgZG8gb2JqZXRvIG9yaWdpbmFsIGRvIHBsYW5vIGFtb3N0cmFsLg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZGFkb3NQTkFEY19tdWxoZXJlcyA8LSBzdWJzZXQoZGFkb3NQTkFEYywgVjIwMDc9PSJNdWxoZXIiKQ0KZGFkb3NQTkFEY19tdWxoZXJlcw0KYGBgDQoNCiMgRXN0aW1hw6fDo28gcGFyYSB2w6FyaW9zIGRvbcOtbmlvcw0KDQpFbSBvdXRyb3MgY2Fzb3MgaMOhIGludGVyZXNzZSBlbSBlc3RpbWFyIHF1YW50aWRhZGVzIGRlIGludGVyZXNzZSBwYXJhIGRpdmVyc29zIGRvbcOtbmlvcyBtdXR1YW1lbnRlIGV4Y2x1c2l2b3MsIGEgZmltIGRlIHBvc3NpYmlsaXRhciBjb21wYXJhw6fDtWVzLiBQYXJhIGlzdG8sIHBvZGVtb3MgdXRpbGl6YXIgYSBmdW7Dp8OjbyBzdnlieS4NCg0KUGFyYSB1dGlsaXrDoS1sYSBzw6NvIG5lY2Vzc8OhcmlvcyBvcyBzZWd1aW50ZXMgYXJndW1lbnRvczoNCg0KLSBBIHZhcmnDoXZlbCBkYSBxdWFsIHNlIGRlc2VqYSBjYWxjdWxhciBhIHF1YW50aWRhZGU7DQotIEEgdmFyacOhdmVsIHF1ZSBkZWZpbmUgb3MgZG9tw61uaW9zOw0KLSBPIG9iamV0byBkbyBwbGFubyBhbW9zdHJhbDsNCg0KQSBmdW7Dp8OjbyB1dGlsaXphZGEgcGFyYSBjYWxjdWxhciBhIHF1YW50aWRhZGUgZGUgaW50ZXJlc3NlIChzdnl0b3RhbCwgc3Z5bWVhbiwgc3Z5cmF0aW8sIHN2eXF1YW50aWxlLCDigKYpLiBTZSBkZXNlamFtb3MgZXN0aW1hciBhIGZyZXF1w6puY2lhIHJlbGF0aXZhIGRlIGhvbWVucyBlIG11bGhlcmVzIGVtIGNhZGEgbsOtdmVsIGRlIGluc3RydcOnw6NvLCB1c2Ftb3MgbyBzZWd1aW50ZSBjw7NkaWdvOg0KDQoqKkZSRVFVw4pOQ0lBIERFIEhPTUVOUyBFIE1VTEhFUkVTIFBPUiBOw41WRUwgREUgSU5TVFJVw4fDg08qKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZnJlcVNleG9JbnN0ciA8LSBzdnlieShmb3JtdWxhPX5WMjAwNywgYnk9flZEMzAwNCwgZGVzaWduPWRhZG9zUE5BRGMsIEZVTj1zdnltZWFuLCBuYS5ybT1UUlVFKQ0KZnJlcVNleG9JbnN0cg0KYGBgDQoNCkNhc28gZGVzZWplbW9zIGVzdGltYXIgbyBjb250csOhcmlvLCBhIGZyZXF1w6puY2lhIHJlbGF0aXZhIGRlIGNhZGEgbsOtdmVsIGRlIGluc3RydcOnw6NvIHBhcmEgY2FkYSBzZXhvLCBiYXN0YSBpbnZlcnRlciBhcyB2YXJpw6F2ZWlzIGNvcnJlc3BvbmRlbnRlcyBuYSBzaW50YXhlOg0KDQoqKkZSRVFVw4pOQ0lBIERPIE7DjVZFTCBERSBJTlNUUlXDh8ODTyBQT1IgU0VYTyoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQpmcmVxSW5zdHJTZXhvIDwtIHN2eWJ5KGZvcm11bGE9flZEMzAwNCwgYnk9flYyMDA3LCBkZXNpZ249ZGFkb3NQTkFEYywgRlVOPXN2eW1lYW4sIG5hLnJtPVRSVUUpDQpmcmVxSW5zdHJTZXhvDQpgYGANCg0KVGFtYsOpbSBwb2RlIHNlciB1dGlsaXphZG8gcGFyYSBlc3RpbWFyIGEgcmVuZGEgbcOpZGlhIGVmZXRpdmEgcG9yIFVuaWRhZGUgZGEgRmVkZXJhw6fDo286DQoNCioqUkVOREEgTcOJRElBIEVGRVRJVkEgUE9SIFVOSURBREUgREEgRkVERVJBw4fDg08qKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KbWVkaWFSZW5kYVVGIDwtIHN2eWJ5KGZvcm11bGE9flZENDAyMCwgYnk9flVGLCBkZXNpZ249ZGFkb3NQTkFEYywgRlVOPXN2eW1lYW4sIG5hLnJtPVRSVUUpDQptZWRpYVJlbmRhVUYNCmBgYA0KDQrDiSBwb3Nzw612ZWwgZGVmaW5pciBkb23DrW5pb3MgcXVlIHNlamFtIGNydXphbWVudG9zIGRlIHZhcmnDoXZlaXMgY2F0ZWfDs3JpY2FzIGNvbSBhIGZ1bsOnw6NvIGludGVyYWN0aW9uLg0KTmEgZnVuw6fDo28gc3Z5YnkgdGFtYsOpbSDDqSBwb3Nzw612ZWwgdXRpbGl6YXIgbyBhcmd1bWVudG8gdmFydHlwZT3igJxjduKAnSBjYXNvIGRlc2VqZW1vcyBxdWUgbm8gb3V0cHV0IGFwYXJlw6dhIG8gY29lZmljaWVudGUgZGUgdmFyaWHDp8OjbyBhbyBpbnbDqXMgZG8gZXJybyBwYWRyw6NvIGRhIGVzdGltYXRpdmEuIFBhcmEgZXN0aW1hciBhIHRheGEgZGUgZGVzb2N1cGHDp8OjbyBwb3Igc2V4byBlIGNvciBvdSByYcOnYSB1dGlsaXphbmRvIGFzIGZ1bsOnw7VlcyBzdnlyYXRpbyBlIHN2eWJ5IGUgbyByZXNwZWN0aXZvIGN2Og0KDQoqKlRBWEEgREUgREVTT0NVUEHDh8ODTyBQT1IgU0VYTyBFIENPUi9SQcOHQSoqDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQp0eGRlc29jdXBTZXhvUmFjYSA8LSBzdnlieShmb3JtdWxhPX4oVkQ0MDAyPT0iUGVzc29hcyBkZXNvY3VwYWRhcyIpLCBkZW5vbWluYXRvcj1+KFZENDAwMT09IlBlc3NvYXMgbmEgZm9yw6dhIGRlIHRyYWJhbGhvIiksIGJ5PX5pbnRlcmFjdGlvbihWMjAwNyxWMjAxMCksIGRlc2lnbj1kYWRvc1BOQURjLCBGVU49c3Z5cmF0aW8sIHZhcnR5cGU9ImN2IiwgbmEucm09VFJVRSkNCnR4ZGVzb2N1cFNleG9SYWNhDQpgYGANCg0KDQoNCg0KDQo=