Acesse aqui o storytelling dos processos de DataWrangling, DataMunging e Análise exploratória.

1 - Com base na análise exploratória dos dados da Discorama e nos objetivos estratégicos apresentados no contexto, quais são as perguntas de negócio relevantes para esse projeto de analytics? Pergunta de nível teórico. O seu projeto final não necessariamente precisa responder todas ou as mesmas perguntas citadas nessa entrega

2 - Quais serão os indicadores ou visualizações utilizadas para responder às perguntas de negócio citadas anteriormente? Pergunta de nível teórico. O seu projeto final não necessariamente precisa trazer os mesmos ou todos os indicadores citados nessa entrega

Depois de realizar agregações e sumarizações, de acordo com o que se pretendia, foram usadas as seguintes visualizações:

  - HISTROGRAMAS

  - BOXPLOT

  - COLUNAS

  - ROSCA

  - BARRAS

  - scatterplot

  - DensityPlot

  - Matriz de correlação

3 - Apresentar pelo menos duas análises de negócio para cada uma das categorias. Pergunta de nível teórico. O seu projeto final não necessariamente precisa ter todas análises citadas nessa entrega

Análise diagnóstica:

  1. Comparar o desempenho da lojas, em faturamento

  2. Comparar o desempenho das categorias, por frequência de locação.

Análise descritiva:

  1. Comportamento das vendas, nos dias do mês;

  2. Preferências nos dias de maior movimento (visando aumentar a disponibilidade dos produtos).

Análise preditiva:

  1. Modelo de classificação para prever gênero de interesse;

  2. Aplicar de previsão numérica, para prever quantos dias o cliente fica sem alugar um filme, e, assim prever quanto um cliente esta prestar a deixar a locadora.

Análise prescritiva.

  1. De acordo com o movimento diário, avaliar a melhor forma de alocar recursos, visando diminiuir despesas

2 Realizar testes A/B para avaliar o impacto das mudanças de preços e ajustar a estratégia conforme necessário.

4 - Apresentar as análises que foram necessárias para o entendimento do negócio e que podem ser úteis no suporte para a tomada de decisão.

Para o conhecimento dos dados e do negócio, foram aplicadas técnicas de análise estatísticas e visualização univariada e bivarada.

Primeiramente, foi necessário relacionar as tabelas para se ter uma visão panorâmica dos dados apresentados. Para conhecer o negócio, realizou-se uma análise exploratória do conjunto de dados, ainda sem nenhuma agregação. Neste ponto, a análise de correlação entre a variável ‘amount’ e as variáveis ‘atraso’ e ‘multa’, permitiram concluir, por exemplo, que há uma correlação positiva forte, e, por isso, a intensão da empresa de estudar medidas para reduzir o atraso na devolução da locação, deve ser bem estudada.

Após, ralizando algumas agregações, inicialmente, relacionando-se a frequência com algumas variáveis, pode-se concluir que, a categoria não é uma variável relevante para a escolha do filme.

5 - Dashboard. Fazer com power BI

Respondendo às questões de neógcio.

1 - mostrar se existem possíveis correlações entre gêneros dos filmes, os atores neles presentes e a frequência de locação.

Após computar a frequência de locação de cada categoria, computou-se a variabilidade destas frequências (utilizou-se o desvio padrão como KPI). O que se concluir é que, existe variância na frequência de locação entre os gêneros, mas, nenhum dos gêneros apresentou diferenças estatisticamente significativas. Dada a média de locação por categoria, todas as frequências encontram-se dentro de um intervalo ‘normal’ (2 desvios-padrão).

Contudo, outras questões foram percevidas, em relação ao gênero dos filmes:

Total receita por categoria

Média de multa ($)

Média dias de ataso

2. A empresa também quer entender melhor seus dados para aumentar o ticket médio das locações e reduzir o atraso médio na devolução dos filmes, dois objetivos considerados estratégicos no curto prazo

O ticket médio das locações é de R$4.22. Já, o ticket médio por cliente e de R$101.48

Primeiramente, faz-se necessário entender o impacto gerado pelos atrasos.

Proporção da frequência de atrasados e pontuais:

Proporção na receita entre atrasadoe e pontuais:

Aparentemente, existe uma correlação positiva entre o atraso e a receita

Visualizando

Portanto, à medida que o atraso aumenta, o valor pago pelo cliente também aumenta.

Vamos recalcular os tickets, separando os atrasados dos pontuais.

O ticket médio das locações em que não houve atrasado é de R$2.95. Já, o ticket médio por cliente e de R$38.43
O ticket médio das locações é de R$5.71. Já, o ticket médio por cliente e de R$63.05

A proporção locações com atraso e pontualidade na devolução é de, praticamente, 50%. Contudo, as multas gerados pelos atrasos ajudar a melhorar os seguintes indicadores:

Assim sendo, como base nos, dados, adotar medidas para contingenciar o atraso na devolução não será financeiramente positiva para a empresa.

Para aumentar o ticket, a empresa deve adotar outras estratégias, como, sugerir uma locação dupla. O segundo título pode ser sugerido com base em similaridades de gênero.

Modelo de recomendação baseado em categoria

LS0tDQp0aXRsZTogIkVEQSBlIE1hY2hpbmUgTGVhcm5pbmcgLSBkYWRvcyBkZSBsb2Nhw6fDo28gZGUgZmlsbWVzLiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCiMjIyBbQWNlc3NlIGFxdWldKGh0dHBzOi8vY29sYWIucmVzZWFyY2guZ29vZ2xlLmNvbS9kcml2ZS8xQnBXQmM5TGR5VHBWdkVpSTdaemkxN2hVdGRzOEZxQkopIG8gc3Rvcnl0ZWxsaW5nIGRvcyBwcm9jZXNzb3MgZGUgRGF0YVdyYW5nbGluZywgRGF0YU11bmdpbmcgZSBBbsOhbGlzZSBleHBsb3JhdMOzcmlhLg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFKQ0Kb3B0aW9ucyh3YXJuID0gLTEpDQoNCmBgYA0KDQoNCioqMSAtIENvbSBiYXNlIG5hIGFuw6FsaXNlIGV4cGxvcmF0w7NyaWEgZG9zIGRhZG9zIGRhIERpc2NvcmFtYSBlIG5vcyBvYmpldGl2b3MgZXN0cmF0w6lnaWNvcyBhcHJlc2VudGFkb3Mgbm8gY29udGV4dG8sIHF1YWlzIHPDo28gYXMgcGVyZ3VudGFzIGRlIG5lZ8OzY2lvIHJlbGV2YW50ZXMgcGFyYSBlc3NlIHByb2pldG8gZGUgYW5hbHl0aWNzPyBQZXJndW50YSBkZSBuw612ZWwgdGXDs3JpY28uIE8gc2V1IHByb2pldG8gZmluYWwgbsOjbyBuZWNlc3NhcmlhbWVudGUgcHJlY2lzYSByZXNwb25kZXIgdG9kYXMgb3UgYXMgbWVzbWFzICBwZXJndW50YXMgY2l0YWRhcyBuZXNzYSBlbnRyZWdhKioNCg0KLSBRdWVzdMO1ZXMgZGUgbmVnw7NjaW8gZm9jYWRhcyBuYSByZWxhw6fDo28gZW50cmUgZ8OqbmVybyBlIGZyZXF1w6puY2lhIGRlIGxvY2HDp8OjbzoNCiAgKiBRdWFudG9zIGdlbmVyb3MgZm9yYW0gY2F0ZWdvcml6YWRvcw0KICAqIFF1YWwgw6kgYSBmcmVxdcOqbmNpYSB0b3RhbCBkZSBsb2Nhw6fDo28gZGUgY2FkYSB1bQ0KICAqIFF1YWwgw6kgbyB0aWNrZXQgbcOpZGlvIGRlIGNhZGEgZ8OqbmV0bw0KICAqIENvbSBxdWUgcGVyY2VudHVhbCBjYWRhIGfDqm5lcm8gY29udHJpYnVpIHBhcmEgbyBmYXR1cmFtZW50bw0KICAqIFF1YWwgw6kgYSB0YXhhIG3DqWRpYSBkZSBsb2Nhw6fDo28gZGUgY2FkYSBnw6puZXJvDQogICogcXVhbCDDqSBvIHZhbG9yIG3DqWRpbyBkZSBtdWx0YXMgYXJyZWNhZGFzIGRlIGNhZGEgZ8OqbmVybw0KICAqIHF1YWwgw6kgbyBhdHJhc28gbcOpZGlvIGRlIGNhZGEgZ8OqbmVybw0KDQotIFF1ZXN0w6NvIGZvY2FkYSBuYXMgbG9qYXM6DQogICogUXVhbCDDqSBvIGZhdHVyYW1lbnRvIA0KICAqIHF1YWwgw6kgYSB0YXhhIGRlIGF0YXNvDQogICogUXVhbnRpZGFkZSBkZSBjbGllbnRlcw0KICAqIHRpY2tlTcOpZGlvDQoNCg0KLSBRdWVzdMO1ZXMgcmVsYWNpb25hZGFzIMOgIHJlY2VpdGENCiAgKiBjb21vIHNlIGRpc3RyaWJ1aSBlbSByZWxhw6fDo28gw6BzIGxvamFzDQogICogY29tbyBzZSBkaXN0cmlidWkgZW0gcmVsYcOnw6NvIMOgcyBjYXRlZ29yaWFzDQogICogY29tbyDDqSBjb21wb3N0YSBhIHJlY2VpdGENCiAgKiBjb21vIHNlIGRpc3RyaWJ1aSBlbSByZWxhw6fDo28gw6Agb2JzZXJ2YcOnw6NvIGFudGVyaW9yDQoNCg0KLSBRdWVzdMO1ZXMgcmVsYWNpb25hZGFzIGFvcyBkaXN0cml0b3MNCiAgKiBRdWFpcyBzw6NvIGFzIFRvcCAxMCBlbSBmYXR1cmFtZW50bw0KICAqIFRvcCAxMCBlbSBuw7ptZXJvIGRlIGNsaWVudGVzDQogICogUHJlZmVyw6puY2lhcyBkZSBnw6puZXJvIHBvciBkaXN0cml0b3MNCg0KLSBRdWVzdMO1ZXMgcmVsYWNpb25hZGFzIGFvcyBjbGllbnRlcyAoY29tIGJhc2Ugbm8gUkZOKQ0KICAqIFF1YWlzIHPDo28gb3MgVG9wIDEwIGNsaWVudGVzIGVtIHBvbnR1YcOnw6NvDQogICogRGUgcXVlIGRpc3RyaXRvIHPDo28NCiAgKiBRdWFpcyBhcyBwcmVmZXLDqm5jaWFzDQogICogUVVhbCDDqSBvIHZhbG9yIG3DqWRpbyBnYXN0byBkZSBjYWRhIHVtDQogICogUXVhbCDDqSBvIHByYXpvIGRlIHJldG9ybm8gZG9zIGNsaWVudGVzDQogICogQ29tbyBzZSBjb21wYXJhIGFvIHRvcCAxMA0KDQotIFF1ZXN0w7VlcyByZWxhY2lvbmFkYXMgYW8gdGVtcG8NCiAgKiBFdm9sdcOnw6NvIGRvIGZhdHVyYW1lbnRvIGRhIGVtcHJlc2ENCiAgKiBFdm9sacOnw6NvIGRvIGZhdHVyYW1lbnRvIHBvciBnw6puZXJvDQogICogUG9yIExvamENCiAgKiBFdm9sdcOnw6NvIGRhIGZyZXF1w6puY2lhIGRvIGZhdHVyYW1lbnRvDQogICogcmV0b3Jub3MgZG9zIGZhdHVyYW1lbnRvcw0KICAqIERlY29tcG9yIGEgc8OpcmllIGRlIGZyZXF1w6puY2lhcw0KICAqIGRlY29tcG9yIGEgc8OpcmllIGRlIGZhdHVyYW1lbnRvIG1lbnNhbA0KDQoNCioqMiAtIFF1YWlzIHNlcsOjbyBvcyBpbmRpY2Fkb3JlcyBvdSB2aXN1YWxpemHDp8O1ZXMgdXRpbGl6YWRhcyBwYXJhIHJlc3BvbmRlciDDoHMgcGVyZ3VudGFzIGRlIG5lZ8OzY2lvIGNpdGFkYXMgYW50ZXJpb3JtZW50ZT8gUGVyZ3VudGEgZGUgbsOtdmVsIHRlw7NyaWNvLiBPIHNldSBwcm9qZXRvIGZpbmFsIG7Do28gbmVjZXNzYXJpYW1lbnRlIHByZWNpc2EgdHJhemVyIG9zIG1lc21vcyBvdSB0b2RvcyBvcyBpbmRpY2Fkb3JlcyBjaXRhZG9zIG5lc3NhIGVudHJlZ2EqKg0KDQoNCkRlcG9pcyBkZSByZWFsaXphciBhZ3JlZ2HDp8O1ZXMgZSBzdW1hcml6YcOnw7VlcywgZGUgYWNvcmRvIGNvbSBvIHF1ZSBzZSBwcmV0ZW5kaWEsIGZvcmFtIHVzYWRhcyBhcyBzZWd1aW50ZXMgdmlzdWFsaXphw6fDtWVzOg0KDQogICAgICAtIEhJU1RST0dSQU1BUw0KDQogICAgICAtIEJPWFBMT1QNCg0KICAgICAgLSBDT0xVTkFTDQoNCiAgICAgIC0gUk9TQ0ENCg0KICAgICAgLSBCQVJSQVMNCg0KICAgICAgLSBzY2F0dGVycGxvdA0KDQogICAgICAtIERlbnNpdHlQbG90DQoNCiAgICAgIC0gTWF0cml6IGRlIGNvcnJlbGHDp8Ojbw0KDQoNCg0KKiozIC0gQXByZXNlbnRhciBwZWxvIG1lbm9zIGR1YXMgYW7DoWxpc2VzIGRlIG5lZ8OzY2lvIHBhcmEgY2FkYSB1bWEgZGFzIGNhdGVnb3JpYXMuIFBlcmd1bnRhIGRlIG7DrXZlbCB0ZcOzcmljby4gTyBzZXUgcHJvamV0byBmaW5hbCBuw6NvIG5lY2Vzc2FyaWFtZW50ZSBwcmVjaXNhIHRlciB0b2RhcyBhbsOhbGlzZXMgY2l0YWRhcyBuZXNzYSBlbnRyZWdhKioNCg0KQW7DoWxpc2UgZGlhZ27Ds3N0aWNhOg0KDQoxLiBDb21wYXJhciBvIGRlc2VtcGVuaG8gZGEgbG9qYXMsIGVtIGZhdHVyYW1lbnRvDQoNCjIuIENvbXBhcmFyIG8gZGVzZW1wZW5obyBkYXMgY2F0ZWdvcmlhcywgcG9yIGZyZXF1w6puY2lhIGRlIGxvY2HDp8Ojby4NCg0KDQpBbsOhbGlzZSBkZXNjcml0aXZhOg0KDQoxLiBDb21wb3J0YW1lbnRvIGRhcyB2ZW5kYXMsIG5vcyBkaWFzIGRvIG3DqnM7DQoNCjIuIFByZWZlcsOqbmNpYXMgbm9zIGRpYXMgZGUgbWFpb3IgbW92aW1lbnRvICh2aXNhbmRvIGF1bWVudGFyIGEgZGlzcG9uaWJpbGlkYWRlIGRvcyBwcm9kdXRvcykuDQoNCg0KQW7DoWxpc2UgcHJlZGl0aXZhOg0KDQoxLiBNb2RlbG8gZGUgY2xhc3NpZmljYcOnw6NvIHBhcmEgcHJldmVyIGfDqm5lcm8gZGUgaW50ZXJlc3NlOw0KDQoyLiBBcGxpY2FyIGRlIHByZXZpc8OjbyBudW3DqXJpY2EsIHBhcmEgcHJldmVyIHF1YW50b3MgZGlhcyBvIGNsaWVudGUgZmljYSBzZW0gYWx1Z2FyIHVtIGZpbG1lLCBlLCBhc3NpbSBwcmV2ZXIgcXVhbnRvIHVtIGNsaWVudGUgZXN0YSBwcmVzdGFyIGEgZGVpeGFyIGEgbG9jYWRvcmEuDQoNCkFuw6FsaXNlIHByZXNjcml0aXZhLg0KDQoxLiBEZSBhY29yZG8gY29tIG8gbW92aW1lbnRvIGRpw6FyaW8sIGF2YWxpYXIgYSBtZWxob3IgZm9ybWEgZGUgYWxvY2FyIHJlY3Vyc29zLCB2aXNhbmRvIGRpbWluaXVpciBkZXNwZXNhcw0KDQoyIFJlYWxpemFyIHRlc3RlcyBBL0IgcGFyYSBhdmFsaWFyIG8gaW1wYWN0byBkYXMgbXVkYW7Dp2FzIGRlIHByZcOnb3MgZSBhanVzdGFyIGEgZXN0cmF0w6lnaWEgY29uZm9ybWUgbmVjZXNzw6FyaW8uDQoNCg0KKio0IC0gQXByZXNlbnRhciBhcyBhbsOhbGlzZXMgcXVlIGZvcmFtIG5lY2Vzc8OhcmlhcyBwYXJhIG8gZW50ZW5kaW1lbnRvIGRvIG5lZ8OzY2lvIGUgcXVlIHBvZGVtIHNlciDDunRlaXMgbm8gc3Vwb3J0ZSBwYXJhIGEgdG9tYWRhIGRlIGRlY2lzw6NvLioqDQoNCg0KUGFyYSBvIGNvbmhlY2ltZW50byBkb3MgZGFkb3MgZSBkbyBuZWfDs2NpbywgZm9yYW0gYXBsaWNhZGFzIHTDqWNuaWNhcyBkZSBhbsOhbGlzZSBlc3RhdMOtc3RpY2FzIGUgdmlzdWFsaXphw6fDo28gdW5pdmFyaWFkYSBlIGJpdmFyYWRhLg0KDQpQcmltZWlyYW1lbnRlLCBmb2kgbmVjZXNzw6FyaW8gcmVsYWNpb25hciBhcyB0YWJlbGFzIHBhcmEgc2UgdGVyIHVtYSB2aXPDo28gcGFub3LDom1pY2EgZG9zIGRhZG9zIGFwcmVzZW50YWRvcy4gUGFyYSBjb25oZWNlciBvIG5lZ8OzY2lvLCByZWFsaXpvdS1zZSB1bWEgYW7DoWxpc2UgZXhwbG9yYXTDs3JpYSBkbyBjb25qdW50byBkZSBkYWRvcywgYWluZGEgc2VtIG5lbmh1bWEgYWdyZWdhw6fDo28uIA0KTmVzdGUgcG9udG8sIGEgYW7DoWxpc2UgZGUgY29ycmVsYcOnw6NvIGVudHJlIGEgdmFyacOhdmVsICdhbW91bnQnIGUgYXMgdmFyacOhdmVpcyAnYXRyYXNvJyBlICdtdWx0YScsIHBlcm1pdGlyYW0gY29uY2x1aXIsIHBvciBleGVtcGxvLCBxdWUgaMOhIHVtYSBjb3JyZWxhw6fDo28gcG9zaXRpdmEgZm9ydGUsIGUsIHBvciBpc3NvLCBhIGludGVuc8OjbyBkYSBlbXByZXNhIGRlIGVzdHVkYXIgbWVkaWRhcyBwYXJhIHJlZHV6aXIgbyBhdHJhc28gbmEgZGV2b2x1w6fDo28gZGEgbG9jYcOnw6NvLCBkZXZlIHNlciBiZW0gZXN0dWRhZGEuDQoNCg0KQXDDs3MsIHJhbGl6YW5kbyBhbGd1bWFzIGFncmVnYcOnw7VlcywgaW5pY2lhbG1lbnRlLCByZWxhY2lvbmFuZG8tc2UgYSBmcmVxdcOqbmNpYSBjb20gYWxndW1hcyB2YXJpw6F2ZWlzLCBwb2RlLXNlIGNvbmNsdWlyIHF1ZSwgYSBjYXRlZ29yaWEgbsOjbyDDqSB1bWEgdmFyacOhdmVsIHJlbGV2YW50ZSBwYXJhIGEgZXNjb2xoYSBkbyBmaWxtZS4NCg0KDQoNCg0KKio1IC0gRGFzaGJvYXJkLioqDQpGYXplciBjb20gcG93ZXIgQkkNCg0KDQojICoqUmVzcG9uZGVuZG8gw6BzIHF1ZXN0w7VlcyBkZSBuZcOzZ2Npby4qKg0KDQoqKjEgLSBtb3N0cmFyIHNlIGV4aXN0ZW0gcG9zc8OtdmVpcyBjb3JyZWxhw6fDtWVzIGVudHJlIGfDqm5lcm9zIGRvcyBmaWxtZXMsIG9zIGF0b3JlcyBuZWxlcyBwcmVzZW50ZXMgZSBhIGZyZXF1w6puY2lhIGRlIGxvY2HDp8Ojby4qKg0KDQpBcMOzcyBjb21wdXRhciBhIGZyZXF1w6puY2lhIGRlIGxvY2HDp8OjbyBkZSBjYWRhIGNhdGVnb3JpYSwgY29tcHV0b3Utc2UgYSB2YXJpYWJpbGlkYWRlIGRlc3RhcyBmcmVxdcOqbmNpYXMgKHV0aWxpem91LXNlIG8gZGVzdmlvIHBhZHLDo28gY29tbyBLUEkpLiBPIHF1ZSBzZSBjb25jbHVpciDDqSBxdWUsIGV4aXN0ZSB2YXJpw6JuY2lhIG5hIGZyZXF1w6puY2lhIGRlIGxvY2HDp8OjbyBlbnRyZSBvcyBnw6puZXJvcywgbWFzLCBuZW5odW0gZG9zIGfDqm5lcm9zIGFwcmVzZW50b3UgZGlmZXJlbsOnYXMgZXN0YXRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZhcy4gRGFkYSBhIG3DqWRpYSBkZSBsb2Nhw6fDo28gcG9yIGNhdGVnb3JpYSwgdG9kYXMgYXMgZnJlcXXDqm5jaWFzIGVuY29udHJhbS1zZSBkZW50cm8gZGUgdW0gaW50ZXJ2YWxvICdub3JtYWwnICgyIGRlc3Zpb3MtcGFkcsOjbykuDQoNCmBgYHtyfQ0KDQpkYWRvc0dlbmVybyA8LSBtZXJnZURhdGFDYXRlZ29yeSgpDQoNCmNvbG5hbWVzKGRhZG9zR2VuZXJvKSA8LSBjKCJjYXRlZ29yeV9pZCIsICJ0aWNrZXRHZW5lcm8iLCAidG90YWxBbW91bnQiLCAibkxvY2Fjb2VlcyIsICJtZWRpYVRheGEiLCAibWVkaWFNdWx0YSIsICJtZWRpYUF0cmFzbyIgKQ0KcGxvdENvbHNHZW5lcm8oIm5Mb2NhY29lZXMiKQ0KDQpgYGANCg0KDQoNCkNvbnR1ZG8sIG91dHJhcyBxdWVzdMO1ZXMgZm9yYW0gcGVyY2V2aWRhcywgZW0gcmVsYcOnw6NvIGFvIGfDqm5lcm8gZG9zIGZpbG1lczoNCg0KVG90YWwgcmVjZWl0YSBwb3IgY2F0ZWdvcmlhDQpgYGB7cn0NCnBsb3RDb2xzR2VuZXJvKCJ0b3RhbEFtb3VudCIpDQpgYGANCg0KTcOpZGlhIGRlIG11bHRhICgkKQ0KYGBge3J9DQpwbG90Q29sc0dlbmVybygibWVkaWFNdWx0YSIpDQpgYGANCg0KTcOpZGlhIGRpYXMgZGUgYXRhc28NCmBgYHtyfQ0KcGxvdENvbHNHZW5lcm8oIm1lZGlhQXRyYXNvIikNCmBgYA0KDQoNCg0KKioyLiBBIGVtcHJlc2EgdGFtYsOpbSBxdWVyIGVudGVuZGVyIG1lbGhvciBzZXVzIGRhZG9zIHBhcmEgYXVtZW50YXIgbyB0aWNrZXQgbcOpZGlvIGRhcyBsb2Nhw6fDtWVzIGUgcmVkdXppciBvIGF0cmFzbyBtw6lkaW8gbmEgZGV2b2x1w6fDo28gZG9zIGZpbG1lcywgZG9pcyBvYmpldGl2b3MgY29uc2lkZXJhZG9zIGVzdHJhdMOpZ2ljb3Mgbm8gY3VydG8gcHJhem8qKg0KDQoNCg0KYGBge3J9DQptZXNzYWdlKCJPIHRpY2tldCBtw6lkaW8gZGFzIGxvY2HDp8O1ZXMgw6kgZGUgUiQiLCByb3VuZChtZWFuKGRhZG9zJGFtb3VudCksIDIpLCIuIErDoSwgbyB0aWNrZXQgbcOpZGlvIHBvciBjbGllbnRlIGUgZGUgUiQiLCByb3VuZChtZWFuKHRvdGFsQ2xpZW50ZSR0b3RhbENsaWVudGUpLCAyKSkNCg0KYGBgDQpQcmltZWlyYW1lbnRlLCBmYXotc2UgbmVjZXNzw6FyaW8gZW50ZW5kZXIgbyBpbXBhY3RvIGdlcmFkbyBwZWxvcyBhdHJhc29zLg0KDQpQcm9wb3LDp8OjbyBkYSBmcmVxdcOqbmNpYSBkZSBhdHJhc2Fkb3MgZSBwb250dWFpczoNCmBgYHtyfQ0KcHJvcEF0cmFzYWRvcygpDQoNCmBgYA0KDQoNClByb3BvcsOnw6NvIG5hIHJlY2VpdGEgZW50cmUgYXRyYXNhZG9lIGUgcG9udHVhaXM6DQpgYGB7cn0NCnByb3BBbW91bnRBdHJhc2Fkb3MoKQ0KYGBgDQoNCg0KQXBhcmVudGVtZW50ZSwgZXhpc3RlIHVtYSBjb3JyZWxhw6fDo28gcG9zaXRpdmEgZW50cmUgbyBhdHJhc28gZSBhIHJlY2VpdGENCmBgYHtyfQ0KDQojI0NvcnJlbGHDp8Ojbw0KbGFiZWxzIDwtIGRhZG9zICU+JSBzZWxlY3Qod2hlcmUoaXMubnVtZXJpYykpICU+JSBjb2xuYW1lcygpDQoNCg0KI0NhbGN1bGFuZG8gY29ycmVsYcOnw7Vlcw0KY29ycyA8LSBjb3IoZGFkb3NbLCBsYWJlbHNdKQ0KDQojcGxvdGFuZG8NCnBsb3RfY29yKGNvcnMpDQoNCmBgYA0KDQpWaXN1YWxpemFuZG8NCmBgYHtyfQ0KDQpzY2F0dGVyUGxvdCgiYXRyYXNvIiwgImFtb3VudCIpDQoNCmBgYA0KUG9ydGFudG8sIMOgIG1lZGlkYSBxdWUgbyBhdHJhc28gYXVtZW50YSwgbyB2YWxvciBwYWdvIHBlbG8gY2xpZW50ZSB0YW1iw6ltIGF1bWVudGEuDQoNClZhbW9zIHJlY2FsY3VsYXIgb3MgdGlja2V0cywgc2VwYXJhbmRvIG9zIGF0cmFzYWRvcyBkb3MgcG9udHVhaXMuDQoNCg0KYGBge3J9DQpwbG90VGlja2V0cygpDQpgYGANCg0KDQpgYGB7cn0NCm1lc3NhZ2UoIk8gdGlja2V0IG3DqWRpbyBkYXMgbG9jYcOnw7VlcyBlbSBxdWUgbsOjbyBob3V2ZSBhdHJhc2FkbyDDqSBkZSBSJCIsIHJvdW5kKG1lYW4oZGFkb3NbZGFkb3MkYXRyYXNhZG8gPT0gRkFMU0UsICJhbW91bnQiXSksIDIpLCIuIErDoSwgbyB0aWNrZXQgbcOpZGlvIHBvciBjbGllbnRlIGUgZGUgUiQiLCByb3VuZChtZWFuKHRvdGFsQ2xpZW50ZVBvbnR1YWwkdG90YWxDbGllbnRlKSwgMikpDQoNCm1lc3NhZ2UoIk8gdGlja2V0IG3DqWRpbyBkYXMgbG9jYcOnw7VlcyDDqSBkZSBSJCIsIHJvdW5kKG1lYW4oZGFkb3NbZGFkb3MkYXRyYXNhZG8gPT0gVFJVRSwgImFtb3VudCJdKSwgMiksIi4gSsOhLCBvIHRpY2tldCBtw6lkaW8gcG9yIGNsaWVudGUgZSBkZSBSJCIsIHJvdW5kKG1lYW4odG90YWxDbGllbnRlQXRyYXNhZG8kdG90YWxDbGllbnRlKSwgMikpDQoNCg0KYGBgDQoNCkEgcHJvcG9yw6fDo28gbG9jYcOnw7VlcyBjb20gYXRyYXNvIGUgcG9udHVhbGlkYWRlIG5hIGRldm9sdcOnw6NvIMOpIGRlLCBwcmF0aWNhbWVudGUsIDUwJS4gQ29udHVkbywgYXMgbXVsdGFzIGdlcmFkb3MgcGVsb3MgYXRyYXNvcyBhanVkYXIgYSBtZWxob3JhciBvcyBzZWd1aW50ZXMgaW5kaWNhZG9yZXM6DQoNCi0gRmF0dXJhbWVudG8gKGEgcmVjZWl0YSBnZXJhZGEgcGVsYXMgbG9jYcOnw7VlcyBjb20gYXRyYXNvIG5hIGRldm9sdcOnw6NvIHPDo28gcmVzcG9uc8OhdmVsIHBvciA2MiUgZG8gZmF0dXJhbWVudG8gdG90YWwpOw0KLSBUaWNrZXQgTcOpZGlvIChwb3IgY2xpZW50ZSBlIHBvciBsb2Nhw6fDo28pIGdlcmFkbyBuYXMgbG9jYcOnw7VlcyBjb20gYXRyYXNvLCDDqSBkZSBxdWFzZSBvIGRvYnJvIGRvIHZhbG9yIGdlcmFkbyBwZWxhcyBsb2Nhw6fDtWVzIGRldm9sdmlkYXMgY29tIHBvbnR1YWxpZGFkZS4NCg0KQXNzaW0gc2VuZG8sIGNvbW8gYmFzZSBub3MsIGRhZG9zLCBhZG90YXIgbWVkaWRhcyBwYXJhIGNvbnRpbmdlbmNpYXIgbyBhdHJhc28gbmEgZGV2b2x1w6fDo28gbsOjbyBzZXLDoSBmaW5hbmNlaXJhbWVudGUgcG9zaXRpdmEgcGFyYSBhIGVtcHJlc2EuDQoNClBhcmEgYXVtZW50YXIgbyB0aWNrZXQsIGEgZW1wcmVzYSBkZXZlIGFkb3RhciBvdXRyYXMgZXN0cmF0w6lnaWFzLCBjb21vLCBzdWdlcmlyIHVtYSBsb2Nhw6fDo28gZHVwbGEuIE8gc2VndW5kbyB0w610dWxvIHBvZGUgc2VyIHN1Z2VyaWRvIGNvbSBiYXNlIGVtIHNpbWlsYXJpZGFkZXMgZGUgZ8OqbmVyby4NCg0KIyAqKk1vZGVsbyBkZSByZWNvbWVuZGHDp8OjbyBiYXNlYWRvIGVtIGNhdGVnb3JpYSoqDQoNCmBgYHtyfQ0KDQpyZWdyYXMgPSByZWFkLmNzdigifi9Fc3R1ZG9zL2Rlc2FmaW8vZGlzY29yYW1hL3JlZ3Jhcy5jc3YiKQ0KcmVncmFzID0gcmVncmFzWywgYygyLDMpXQ0KY29sbmFtZXMocmVncmFzKSA9IGMoIlF1ZW0gYWx1Z3VlbCIsICJQb2RlIGFsdWdhciIpDQpyZWdyYXMNCmBgYA0KDQoNCg0KDQoNCg==