PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR

El presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de...

Full description

Autores:
Ramírez Osorio, David Stiven
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2024
Institución:
Universidad Católica de Pereira
Repositorio:
Repositorio Institucional - RIBUC
Idioma:
spa
OAI Identifier:
oai:repositorio.ucp.edu.co:10785/16616
Acceso en línea:
https://hdl.handle.net/10785/16616
https://repositorio.ucp.edu.co/home
Palabra clave:
2. Ingeniería y Tecnología
CHATBOT
ENERGÍA SOLAR
PNL
CHATBO
SOLAR ENERGY
Rights
openAccess
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
id RepoRIBUC2_50e189c4f17c9b717668a91217969848
oai_identifier_str oai:repositorio.ucp.edu.co:10785/16616
network_acronym_str RepoRIBUC2
network_name_str Repositorio Institucional - RIBUC
repository_id_str
dc.title.none.fl_str_mv PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
title PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
spellingShingle PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
2. Ingeniería y Tecnología
CHATBOT
ENERGÍA SOLAR
PNL
CHATBO
SOLAR ENERGY
title_short PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
title_full PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
title_fullStr PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
title_full_unstemmed PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
title_sort PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR
dc.creator.fl_str_mv Ramírez Osorio, David Stiven
dc.contributor.advisor.none.fl_str_mv Rubiana Pavía, Rafael Ricardo
dc.contributor.author.none.fl_str_mv Ramírez Osorio, David Stiven
dc.contributor.corporatename.none.fl_str_mv Universidad Católica de Pereira
dc.contributor.jury.none.fl_str_mv Quitero Prada, Andrés
dc.contributor.none.fl_str_mv Rubiano Pavía, Rafael Ricardo
dc.subject.ocde.none.fl_str_mv 2. Ingeniería y Tecnología
topic 2. Ingeniería y Tecnología
CHATBOT
ENERGÍA SOLAR
PNL
CHATBO
SOLAR ENERGY
dc.subject.proposal.spa.fl_str_mv CHATBOT
ENERGÍA SOLAR
PNL
dc.subject.proposal.eng.fl_str_mv CHATBO
SOLAR ENERGY
description El presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de la arquitectura del sistema para integrar tecnologías complementarias, la programación del chatbot conforme a los requerimientos y el diseño establecidos, y la ejecución de pruebas exhaustivas que aseguren su correcta operación y usabilidad. El problema abordado radica en las limitaciones de los chatbots basados en reglas, que requieren el desarrollo previo de todas las opciones y presentan dificultades para comprender el lenguaje natural. Mediante el uso de capacidades avanzadas de procesamiento de lenguaje natural, el chatbot propuesto busca superar estos desafíos, proporcionando una herramienta eficiente y flexible para la cotización de servicios de energía solar.
publishDate 2024
dc.date.issued.none.fl_str_mv 2024-11-29
dc.date.accessioned.none.fl_str_mv 2025-04-09T14:43:38Z
dc.date.available.none.fl_str_mv 2025-04-09T14:43:38Z
dc.type.none.fl_str_mv Trabajo de grado - Pregrado
dc.type.coar.none.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
dc.type.coarversion.none.fl_str_mv http://purl.org/coar/version/c_970fb48d4fbd8a85
dc.type.content.none.fl_str_mv Text
dc.type.driver.none.fl_str_mv info:eu-repo/semantics/bachelorThesis
dc.type.redcol.none.fl_str_mv http://purl.org/redcol/resource_type/TP
dc.type.version.none.fl_str_mv info:eu-repo/semantics/publishedVersion
format http://purl.org/coar/resource_type/c_7a1f
status_str publishedVersion
dc.identifier.citation.none.fl_str_mv Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616
dc.identifier.uri.none.fl_str_mv https://hdl.handle.net/10785/16616
dc.identifier.instname.none.fl_str_mv Universidad Católica de Pereira
dc.identifier.repourl.none.fl_str_mv https://repositorio.ucp.edu.co/home
identifier_str_mv Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616
Universidad Católica de Pereira
url https://hdl.handle.net/10785/16616
https://repositorio.ucp.edu.co/home
dc.language.iso.none.fl_str_mv spa
language spa
dc.relation.references.none.fl_str_mv S. K. Freire, “Conversational Assistants in Knowledge-Intensive Contexts: Interactions with LLM- versus Intent-based Systems”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://deepmind.google/technologies/gemini-last
T. Eloundou, S. Manning, P. Mishkin, y D. Rock, “GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models”, 2023.
“Chatbot Evolution: ChatGPT Vs. Rule-based - Analytics Vidhya”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://www.analyticsvidhya.com/blog/2023/05/chatbot-evolution-chatgpt-vs-rule-based/
IBM, “IBM: empresas de Latinoamérica aceleraron el uso de Inteligencia Artificial en 67%”, https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67
P. Lewis et al., “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”, en Advances in Neural Information Processing Systems (NeurIPS), 2020, pp. 9459–9474.
S. A. Florez Galeano y N. O. Escobar ceballos, “Diseño de una arquitectura conversacional por texto que consuma servicios cognitivos de NLP y Machine Learning para la interacción con Chatbots mediante el uso de lenguaje natural”. [En línea]. Disponible en: https://hdl.handle.net/11059/13862
H. A. Martínez Torres, “Propuesta de Chatbot para mejorar los servicios digitales de la Biblioteca Octavio Arizmendi Posada de la Universidad de La Sabana”, septiembre de 2022, Universidad de La Sabana. [En línea]. Disponible en: http://hdl.handle.net/10818/52557
N. Garcia Bocanegra y Presencial, “Implementación de un sistema virtual (chatbot) para la atención al cliente sobre la información de trámites al ciudadano por medio de interacciones conversacionales, para la Secretaría de Educación de la ciudad de Girardot en el año 2022”, may 2022, Consultado: el 20 de septiembre de 2024. [En línea]. Disponible en: http://repository.unipiloto.edu.co/handle/20.500.12277/11613
F. Andrei, G. Ornelas, A. : Maestro, R. Armando, y G. Castro, “INFOTEC CENTRO DE INVESTIGACIÓN E INNOVACIÓN EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN DIRECCIÓN ADJUNTA DE INNOVACIÓN Y CONOCIMIENTO GERENCIA DE CAPITAL HUMANO POSGRADOS ‘DISEÑO E IMPLEMENTACIÓN DE UN ASISTENTE VIRTUAL (CHATBOT) PARA OFRECER ATENCIÓN A LOS CLIENTES DE UNA AEROLÍNEA MEXICANA POR MEDIO DE SUS CANALES CONVERSACIONALES’”.
A. Vaswani et al., “Attention Is All You Need”, jun. 2017.
Russell S y Norvig P, Artificial Intelligence: A Modern Approach, 3rd ed. Prentice Hall, 2010.
D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.
B. Copeland et al., “The Essential Turing”, sep. 2004, doi: 10.1093/oso/9780198250791.001.0001.
A. HODGES, Alan Turing: The Enigma., REV-Revised. Princeton University Press, 1983. doi: 10.2307/j.ctvc77913.
I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.
J. Weizenbaum, “ELIZA—a computer program for the study of natural language communication between man and machine”, Commun. ACM, vol. 9, núm. 1, pp. 36–45, ene. 1966, doi: 10.1145/365153.365168.
“Jeopardy! - Wikipedia”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://en.wikipedia.org/wiki/Jeopardy!
OpenAI, “GPT-4 Technical Report”, OpenAI, 2023. [En línea]. Disponible en: https://cdn.openai.com/papers/gpt-4.pdf
C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUC
D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.
S. , & N. P. Russell, “Artificial Intelligence: A Modern Approach (3ra ed.)”.
A. Vaswani et al., “Attention Is All You Need”, jun. 2017.
T. B. Brown et al., “Language Models are Few-Shot Learners”, Adv Neural Inf Process Syst, vol. 2020-December, may 2020, Consultado: el 26 de septiembre de 2024. [En línea]. Disponible en: https://arxiv.org/abs/2005.14165v4
S. Bird, E. Klein, y E. Loper, Natural Language Processing with Python: Analyzing Text with the Natural Language Toolkit. O’Reilly Media, 2009. [En línea]. Disponible en: https://books.google.com.co/books?id=KGIbfiiP1i4C
J. Hirschberg y C. Manning, “Advances in natural language processing”, Science, vol. 349, pp. 261–266, jul. 2015, doi: 10.1126/science.aaa8685.
T. Bolukbasi, K.-W. Chang, J. Zou, V. Saligrama, y A. Kalai, “Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1607.06520
E. Strubell, A. Ganesh, y A. McCallum, “Energy and Policy Considerations for Deep Learning in NLP”, 2019. [En línea]. Disponible en: https://arxiv.org/abs/1906.02243
Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.
C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUC
Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.
I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.
T. Mikolov, K. Chen, G. Corrado, y J. Dean, “Efficient Estimation of Word Representations in Vector Space”, 2013. [En línea]. Disponible en: https://arxiv.org/abs/1301.3781
D. Bahdanau, K. Cho, y Y. Bengio, “Neural Machine Translation by Jointly Learning to Align and Translate”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1409.0473
S. Hochreiter y J. Schmidhuber, “Long Short-term Memory”, Neural Comput, vol. 9, pp. 1735–1780, dic. 1997, doi: 10.1162/neco.1997.9.8.1735.
J. Devlin, M.-W. Chang, K. Lee, K. T. Google, y A. I. Language, “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/tensorflow/tensor2tensor
R. S. Pressman, “Software Engineering: A Practitioner’s Approach”, 1982. [En línea]. Disponible en: https://api.semanticscholar.org/CorpusID:109130516
“¿Qué es una aplicación web? - Explicación de las aplicaciones web - AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/web-application/
“Lenguajes de Programación”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://repositorio-uapa.cuaieed.unam.mx/repositorio/moodle/pluginfile.php/2655/mod_resource/content/1/UAPA-Lenguajes-Programacion/index.html
M. Buttu, El gran libro de Python, 1st ed. Marcombo, 2020. [En línea]. Disponible en: https://www.perlego.com/book/2152364/el-gran-libro-de-python-pdf
“¿Qué son las herramientas para desarrolladores?: Explicación sobre las herramientas para desarrolladores: AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/developer-tools/
“Framework: qué es y para qué sirve, significado, ejemplos, características y tipos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://ebac.mx/blog/frameworks
M. Grinberg, Flask Web Development: Developing Web Applications with Python. O’Reilly, 2018. [En línea]. Disponible en: https://books.google.com.co/books?id=cV34swEACAAJ
“Documentation for Visual Studio Code”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://code.visualstudio.com/Docs
“Qué es un IDE - Concepto, características y ejemplos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://platzi.com/blog/que-es-ide-editor-de-texto/
“Git - git Documentation”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://git-scm.com/docs/git/es
“GitHub · GitHub”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/github
G. Coulouris, J. Dollimore, T. Kindberg, y G. Blair, Distributed Systems: Concepts and Design, 5th ed. USA: Addison-Wesley Publishing Company, 2011.
L. Richardson, M. Amundsen, y S. Ruby, RESTful Web APIs. O’Reilly Media, Inc., 2013.
W. E. Shotts, The Linux command line: a complete introduction. USA: No Starch Press, 2012.
A. Stellman y J. Greene, Learning Agile: Understanding Scrum, XP, Lean, and Kanban. O’Reilly, 2014. [En línea]. Disponible en: https://books.google.com.co/books?id=T7BhngEACAAJ
Notion, “Notion”, https://www.notion.so/.
Voiceflow, “Voiceflow”, https://www.voiceflow.com/.
OpenAI, “OpenAI”, https://openai.com/api/.
Google, “Google Cloud”, https://cloud.google.com/.
Airtable, “Airtable”, https://www.airtable.com/.
OpenAI, “Vector embeddings”, https://platform.openai.com/docs/guides/embeddings.
OpenAI, “Function Calling Documentation”, https://platform.openai.com/docs/assistants/tools/function-calling.
OpenAI, “OpenAI Documentation: Assistants Tools”, https://platform.openai.com/docs/assistants/tools.
Heroku, “Heroku”, https://www.heroku.com/.
OpenAI, “OpenAI swarm”, https://github.com/openai/swarm.
dc.rights.license.none.fl_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
dc.rights.accessrights.none.fl_str_mv info:eu-repo/semantics/openAccess
dc.rights.coar.none.fl_str_mv http://purl.org/coar/access_right/c_abf2
rights_invalid_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
http://purl.org/coar/access_right/c_abf2
eu_rights_str_mv openAccess
dc.format.extent.none.fl_str_mv 210
dc.format.mimetype.none.fl_str_mv application/pdf
dc.publisher.none.fl_str_mv Universidad Católica de Pereira
dc.publisher.faculty.none.fl_str_mv Facultad de Ciencias Básicas e Ingeniería
dc.publisher.place.none.fl_str_mv Pereira, Risaralda - Colombia
dc.publisher.program.none.fl_str_mv Ingeniería de Sistemas y Telecomunicaciones
publisher.none.fl_str_mv Universidad Católica de Pereira
institution Universidad Católica de Pereira
bitstream.url.fl_str_mv https://repositorio.ucp.edu.co/bitstreams/e234a4db-d80a-47f5-a08d-1efc788b86c7/download
https://repositorio.ucp.edu.co/bitstreams/81340ffd-32b2-446b-a3ee-2ccdd93e105a/download
https://repositorio.ucp.edu.co/bitstreams/73b61b7d-872e-418a-9418-0472d2277fc7/download
https://repositorio.ucp.edu.co/bitstreams/c2aa296c-9fba-4bd0-8fd1-4ba9ff882887/download
bitstream.checksum.fl_str_mv af4c420a0053ca2621ff29543bad7841
4d85c501cc4e844295f144d4c78d0831
21d96a2a564df95ab7eef0ddc82307ff
73a5432e0b76442b22b026844140d683
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Institucional de la Universidad Católica de Pereira - RIBUC
repository.mail.fl_str_mv bdigital@metabiblioteca.com
_version_ 1831929499587969024
spelling Rubiano Pavía, Rafael RicardoRubiana Pavía, Rafael RicardoRamírez Osorio, David StivenUniversidad Católica de PereiraQuitero Prada, Andrés2025-04-09T14:43:38Z2025-04-09T14:43:38Z2024-11-29Ramírez Osorio, D. (2024). PROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLAR. Universidad Católica de Pereira. Disponible en: https://hdl.handle.net/10785/16616https://hdl.handle.net/10785/16616Universidad Católica de Pereirahttps://repositorio.ucp.edu.co/homeEl presente proyecto de grado tiene como objetivo desarrollar un prototipo de chatbot para realizar cotizaciones de servicios de energía solar, implementando la API de OpenAI. Se establecen objetivos específicos que incluyen la definición de requerimientos funcionales y no funcionales, el diseño de la arquitectura del sistema para integrar tecnologías complementarias, la programación del chatbot conforme a los requerimientos y el diseño establecidos, y la ejecución de pruebas exhaustivas que aseguren su correcta operación y usabilidad. El problema abordado radica en las limitaciones de los chatbots basados en reglas, que requieren el desarrollo previo de todas las opciones y presentan dificultades para comprender el lenguaje natural. Mediante el uso de capacidades avanzadas de procesamiento de lenguaje natural, el chatbot propuesto busca superar estos desafíos, proporcionando una herramienta eficiente y flexible para la cotización de servicios de energía solar.This thesis aims to develop a chatbot prototype for quoting solar energy services, implementing the OpenAI API. Specific objectives include defining functional and non-functional requirements, designing the system architecture to integrate complementary technologies, programming the chatbot according to the established requirements and design, and running exhaustive tests to ensure its correct operation and usability. The problem addressed lies in the limitations of rule-based chatbots, which require prior development of all options and present difficulties in understanding natural language. By using advanced natural language processing capabilities, the proposed chatbot seeks to overcome these challenges, providing an efficient and flexible tool for quoting solar energy services.CONTENIDO .................................................................................................................... 3 LISTA DE FIGURAS ......................................................................................................... 7 LISTA DE TABLAS ......................................................................................................... 11 RESUMEN ...................................................................................................................... 12 1. PLANTEAMIENTO DEL PROBLEMA ..................................................................... 13 1.1. Consecuencias: ................................................................................................ 13 1.2. Causas: ............................................................................................................ 14 2. FORMULACIÓN DEL PROBLEMA ......................................................................... 15 3. OBJETIVO GENERAL ............................................................................................. 16 3.1. Objetivos Específicos ....................................................................................... 16 4. MODALIDAD ........................................................................................................... 17 5. CONTEXTO ............................................................................................................. 18 6. ALCANCE ................................................................................................................ 19 7. ANTECEDENTES .................................................................................................... 20 7.1. Antecedentes Regionales ................................................................................. 20 7.2. Antecedentes Nacionales ................................................................................. 20 7.3. Antecedentes Internacionales .......................................................................... 24 8. MARCO TEÓRICO .................................................................................................. 25 8.1. Introducción a la Inteligencia Artificial y Procesamiento de Lenguaje Natural (PLN) 25 8.1.1. Historia y Evolución de la Inteligencia Artificial ......................................... 25 8.1.1.1. Orígenes de la IA ............................................................................... 25 8.1.1.2. Primeros Avances y Programas Pioneros ......................................... 27 8.1.1.3. Avances Modernos ............................................................................ 30 8.2. Componentes Principales del Procesamiento de Lenguaje Natural (PLN) ...... 32 8.3. Modelos de Lenguaje ....................................................................................... 38 8.3.1. Definición de Modelos de Lenguaje .......................................................... 39 8.3.2. Evolución de los Modelos de Lenguaje ..................................................... 42 8.3.3. Arquitectura de Transformadores .............................................................. 45 4 8.4. Elección del LLM .............................................................................................. 48 8.5. Ingeniería de software ...................................................................................... 48 8.5.1. Sistema web .............................................................................................. 48 8.5.2. Lenguaje de programación ........................................................................ 49 8.5.3. Python ....................................................................................................... 49 8.5.4. Herramientas para desarrollo web ............................................................ 50 8.5.5. Framework ................................................................................................ 50 8.5.6. Flask .......................................................................................................... 51 8.5.7. Visual studio code ..................................................................................... 51 8.5.8. IDE ............................................................................................................ 52 8.5.9. GIT ............................................................................................................ 52 8.5.10. GITHUB ..................................................................................................... 52 8.5.11. Log ............................................................................................................ 53 8.5.12. API ............................................................................................................. 53 8.5.13. JSON ......................................................................................................... 53 8.5.14. API KEY .................................................................................................... 53 8.5.15. Bash .......................................................................................................... 54 8.5.16. Script ......................................................................................................... 54 8.5.17. Shell .......................................................................................................... 54 8.5.18. Terminal .................................................................................................... 54 8.5.19. Agile .......................................................................................................... 54 8.5.20. Kanban ...................................................................................................... 55 9. METODOLOGÍA ...................................................................................................... 58 9.1. Aplicación de la Metodología ............................................................................ 58 9.1.1. Iteración 1 – Análisis y Diseño .................................................................. 59 9.1.2. Iteración 2 - Configuración de APIs y Servicios ........................................ 60 9.1.3. Iteración 3 - Desarrollo del Agente Conversacional .................................. 61 9.1.4. Iteración 4 – Desarrollo Backend .............................................................. 61 9.1.5. Iteración 5 - Despliegue ........................................................................... 62 10. DESARROLLO DEL PROYECTO ....................................................................... 64 10.1. Análisis .......................................................................................................... 64 10.1.1. Levantamiento de requerimientos ............................................................. 64 10.1.1.1. Especificación de casos de uso. ........................................................ 64 10.1.1.2. Recopilación de requisitos detallados ................................................ 67 10.2. Diseño ........................................................................................................... 67 10.2.1. Arquitectura general del sistema .............................................................. 68 10.2.2. Selección componentes del sistema ......................................................... 70 10.2.2.1. Detalle componentes del Sistema ...................................................... 71 10.2.2.2. Estructura del Proyecto ...................................................................... 77 10.2.3. Diseño de flujos de conversación .............................................................. 78 10.2.3.1. Consultas genéricas al Chatbot ......................................................... 79 10.2.3.2. Consulta relacionada a paneles solares ............................................ 80 5 10.2.3.3. Consulta a potencial Solar de una dirección ...................................... 82 10.2.3.4. Almacenar datos para posterior contacto .......................................... 83 10.3. Desarrollo del chatbot ................................................................................... 86 10.3.1. Implementación de diálogos y respuestas predeterminadas .................... 87 10.3.1.1. Diagrama del flujo .............................................................................. 88 10.3.1.2. Diagrama en VoiceFlow ..................................................................... 89 10.3.2. Configuración de APIs y obtención de API Keys ...................................... 90 10.3.2.1. Open-IA .............................................................................................. 91 10.3.2.2. Google Cloud ..................................................................................... 94 10.3.2.3. Solar API ............................................................................................ 96 10.3.2.4. Geocoding API ................................................................................... 97 10.3.2.5. Google Sheets ................................................................................... 98 10.3.3. Definición de servicios y URLs específicos para las APIs externas ........ 103 10.3.3.1. API OpenAI ...................................................................................... 103 10.3.3.2. Geocoding API ................................................................................. 104 10.3.3.3. Solar API: buildingInsights:findClosest ............................................ 104 10.3.3.4. Google Sheets API ........................................................................... 105 10.3.4. Configuración y entrenamiento el agente de GPT4-1106-preview ......... 108 10.3.5. Optimización de prompts para el caso de uso ........................................ 114 10.3.5.1. Versión 1 .......................................................................................... 117 10.3.5.2. Versión 2 .......................................................................................... 120 10.3.5.3. Versión 3 .......................................................................................... 123 10.3.5.4. Versión 4 .......................................................................................... 126 10.3.6. Configuración de ambientes .................................................................... 131 10.3.6.1. Configuración Ambiente local .......................................................... 132 10.3.6.2. Configuración del framework ........................................................... 132 10.3.6.3. Configuración ambiente productivo .................................................. 135 10.4. Desarrollo del Backend ............................................................................... 140 10.4.1. Desarrollo de los repositorios .................................................................. 140 10.4.1.1. Módulo de Geolocalización – geocoding_repository ........................ 141 10.4.1.2. Módulo de gestión de datos del usuario - google_sheets_respository 141 10.4.1.3. Módulo de procesamiento de lenguaje natural – openai_repository 142 10.4.1.4. Módulo de cotización solar - solarapi_repository ............................. 146 10.4.2. Desarrollo de Casos de uso .................................................................... 148 10.4.2.1. Obtener el potencial Solar – get_solar_potential ............................. 148 10.4.2.2. Procesamiento del potencial Solar - parse_financial_analysis ........ 152 10.4.2.3. Almacenamiento de datos del usuario - save_data_customer ........ 154 10.4.3. Desarrollo de servicios ............................................................................ 156 10.4.3.1. Servicio Chatbot – chatbot_service .................................................. 158 10.4.1. Desarrollo de controladores .................................................................... 165 10.5. Despliegue .................................................................................................. 171 10.5.1. Estableciendo fuente de datos ................................................................ 172 6 10.5.2. Estableciendo variables de entorno en Heroku ....................................... 174 10.5.3. Despliegue .............................................................................................. 177 11. PLANIFICACIÓN DEL PROYECTO .................................................................. 183 12. PRUEBAS Y RESULTADOS ............................................................................. 184 13. CONCLUSIONES .............................................................................................. 199 14. RECOMENDACIONES ...................................................................................... 201 15. BIBLIOGRAFIA .................................................................................................. 202 16. ANEXOS ............................................................................................................ 206 16.1. Anexo 1 ....................................................................................................... 206 16.2. Anexo. 2 ...................................................................................................... 210PregradoIngeniero de Sistemas y Telecomunicaciones210application/pdfspaUniversidad Católica de PereiraFacultad de Ciencias Básicas e IngenieríaPereira, Risaralda - ColombiaIngeniería de Sistemas y TelecomunicacionesPROTOTIPO DE CHATBOT QUE CONSUME LA API DE OPEN-IA PARA COTIZACIONES DE ENERGIA SOLARTrabajo de grado - Pregradohttp://purl.org/coar/resource_type/c_7a1fhttp://purl.org/coar/version/c_970fb48d4fbd8a85Textinfo:eu-repo/semantics/bachelorThesishttp://purl.org/redcol/resource_type/TPinfo:eu-repo/semantics/publishedVersionAtribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)info:eu-repo/semantics/openAccesshttp://purl.org/coar/access_right/c_abf2S. K. Freire, “Conversational Assistants in Knowledge-Intensive Contexts: Interactions with LLM- versus Intent-based Systems”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://deepmind.google/technologies/gemini-lastT. Eloundou, S. Manning, P. Mishkin, y D. Rock, “GPTs are GPTs: An Early Look at the Labor Market Impact Potential of Large Language Models”, 2023.“Chatbot Evolution: ChatGPT Vs. Rule-based - Analytics Vidhya”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://www.analyticsvidhya.com/blog/2023/05/chatbot-evolution-chatgpt-vs-rule-based/IBM, “IBM: empresas de Latinoamérica aceleraron el uso de Inteligencia Artificial en 67%”, https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://latam.newsroom.ibm.com/2024-03-20-IBM-empresas-de-Latinoamerica-aceleraron-el-uso-de-Inteligencia-Artificial-en-67P. Lewis et al., “Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks”, en Advances in Neural Information Processing Systems (NeurIPS), 2020, pp. 9459–9474.S. A. Florez Galeano y N. O. Escobar ceballos, “Diseño de una arquitectura conversacional por texto que consuma servicios cognitivos de NLP y Machine Learning para la interacción con Chatbots mediante el uso de lenguaje natural”. [En línea]. Disponible en: https://hdl.handle.net/11059/13862H. A. Martínez Torres, “Propuesta de Chatbot para mejorar los servicios digitales de la Biblioteca Octavio Arizmendi Posada de la Universidad de La Sabana”, septiembre de 2022, Universidad de La Sabana. [En línea]. Disponible en: http://hdl.handle.net/10818/52557N. Garcia Bocanegra y Presencial, “Implementación de un sistema virtual (chatbot) para la atención al cliente sobre la información de trámites al ciudadano por medio de interacciones conversacionales, para la Secretaría de Educación de la ciudad de Girardot en el año 2022”, may 2022, Consultado: el 20 de septiembre de 2024. [En línea]. Disponible en: http://repository.unipiloto.edu.co/handle/20.500.12277/11613F. Andrei, G. Ornelas, A. : Maestro, R. Armando, y G. Castro, “INFOTEC CENTRO DE INVESTIGACIÓN E INNOVACIÓN EN TECNOLOGÍAS DE LA INFORMACIÓN Y COMUNICACIÓN DIRECCIÓN ADJUNTA DE INNOVACIÓN Y CONOCIMIENTO GERENCIA DE CAPITAL HUMANO POSGRADOS ‘DISEÑO E IMPLEMENTACIÓN DE UN ASISTENTE VIRTUAL (CHATBOT) PARA OFRECER ATENCIÓN A LOS CLIENTES DE UNA AEROLÍNEA MEXICANA POR MEDIO DE SUS CANALES CONVERSACIONALES’”.A. Vaswani et al., “Attention Is All You Need”, jun. 2017.Russell S y Norvig P, Artificial Intelligence: A Modern Approach, 3rd ed. Prentice Hall, 2010.D. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.B. Copeland et al., “The Essential Turing”, sep. 2004, doi: 10.1093/oso/9780198250791.001.0001.A. HODGES, Alan Turing: The Enigma., REV-Revised. Princeton University Press, 1983. doi: 10.2307/j.ctvc77913.I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.J. Weizenbaum, “ELIZA—a computer program for the study of natural language communication between man and machine”, Commun. ACM, vol. 9, núm. 1, pp. 36–45, ene. 1966, doi: 10.1145/365153.365168.“Jeopardy! - Wikipedia”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://en.wikipedia.org/wiki/Jeopardy!OpenAI, “GPT-4 Technical Report”, OpenAI, 2023. [En línea]. Disponible en: https://cdn.openai.com/papers/gpt-4.pdfC. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUCD. Jurafsky y J. Martin, Speech and Language Processing: An Introduction to Natural Language Processing, Computational Linguistics, and Speech Recognition, vol. 2. 2008.S. , & N. P. Russell, “Artificial Intelligence: A Modern Approach (3ra ed.)”.A. Vaswani et al., “Attention Is All You Need”, jun. 2017.T. B. Brown et al., “Language Models are Few-Shot Learners”, Adv Neural Inf Process Syst, vol. 2020-December, may 2020, Consultado: el 26 de septiembre de 2024. [En línea]. Disponible en: https://arxiv.org/abs/2005.14165v4S. Bird, E. Klein, y E. Loper, Natural Language Processing with Python: Analyzing Text with the Natural Language Toolkit. O’Reilly Media, 2009. [En línea]. Disponible en: https://books.google.com.co/books?id=KGIbfiiP1i4CJ. Hirschberg y C. Manning, “Advances in natural language processing”, Science, vol. 349, pp. 261–266, jul. 2015, doi: 10.1126/science.aaa8685.T. Bolukbasi, K.-W. Chang, J. Zou, V. Saligrama, y A. Kalai, “Man is to Computer Programmer as Woman is to Homemaker? Debiasing Word Embeddings”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1607.06520E. Strubell, A. Ganesh, y A. McCallum, “Energy and Policy Considerations for Deep Learning in NLP”, 2019. [En línea]. Disponible en: https://arxiv.org/abs/1906.02243Y. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.C. Manning y H. Schütze, Foundations of Statistical Natural Language Processing. MIT Press, 1999. [En línea]. Disponible en: https://books.google.com.co/books?id=YiFDxbEX3SUCY. Bengio, R. Ducharme, y P. Vincent, A Neural Probabilistic Language Model, vol. 3. 2000. doi: 10.1162/153244303322533223.I. Goodfellow, Y. Bengio, y A. Courville, Deep Learning. MIT Press, 2016.T. Mikolov, K. Chen, G. Corrado, y J. Dean, “Efficient Estimation of Word Representations in Vector Space”, 2013. [En línea]. Disponible en: https://arxiv.org/abs/1301.3781D. Bahdanau, K. Cho, y Y. Bengio, “Neural Machine Translation by Jointly Learning to Align and Translate”, 2016. [En línea]. Disponible en: https://arxiv.org/abs/1409.0473S. Hochreiter y J. Schmidhuber, “Long Short-term Memory”, Neural Comput, vol. 9, pp. 1735–1780, dic. 1997, doi: 10.1162/neco.1997.9.8.1735.J. Devlin, M.-W. Chang, K. Lee, K. T. Google, y A. I. Language, “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”, Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/tensorflow/tensor2tensorR. S. Pressman, “Software Engineering: A Practitioner’s Approach”, 1982. [En línea]. Disponible en: https://api.semanticscholar.org/CorpusID:109130516“¿Qué es una aplicación web? - Explicación de las aplicaciones web - AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/web-application/“Lenguajes de Programación”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://repositorio-uapa.cuaieed.unam.mx/repositorio/moodle/pluginfile.php/2655/mod_resource/content/1/UAPA-Lenguajes-Programacion/index.htmlM. Buttu, El gran libro de Python, 1st ed. Marcombo, 2020. [En línea]. Disponible en: https://www.perlego.com/book/2152364/el-gran-libro-de-python-pdf“¿Qué son las herramientas para desarrolladores?: Explicación sobre las herramientas para desarrolladores: AWS”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://aws.amazon.com/es/what-is/developer-tools/“Framework: qué es y para qué sirve, significado, ejemplos, características y tipos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://ebac.mx/blog/frameworksM. Grinberg, Flask Web Development: Developing Web Applications with Python. O’Reilly, 2018. [En línea]. Disponible en: https://books.google.com.co/books?id=cV34swEACAAJ“Documentation for Visual Studio Code”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://code.visualstudio.com/Docs“Qué es un IDE - Concepto, características y ejemplos”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://platzi.com/blog/que-es-ide-editor-de-texto/“Git - git Documentation”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://git-scm.com/docs/git/es“GitHub · GitHub”. Consultado: el 19 de septiembre de 2024. [En línea]. Disponible en: https://github.com/githubG. Coulouris, J. Dollimore, T. Kindberg, y G. Blair, Distributed Systems: Concepts and Design, 5th ed. USA: Addison-Wesley Publishing Company, 2011.L. Richardson, M. Amundsen, y S. Ruby, RESTful Web APIs. O’Reilly Media, Inc., 2013.W. E. Shotts, The Linux command line: a complete introduction. USA: No Starch Press, 2012.A. Stellman y J. Greene, Learning Agile: Understanding Scrum, XP, Lean, and Kanban. O’Reilly, 2014. [En línea]. Disponible en: https://books.google.com.co/books?id=T7BhngEACAAJNotion, “Notion”, https://www.notion.so/.Voiceflow, “Voiceflow”, https://www.voiceflow.com/.OpenAI, “OpenAI”, https://openai.com/api/.Google, “Google Cloud”, https://cloud.google.com/.Airtable, “Airtable”, https://www.airtable.com/.OpenAI, “Vector embeddings”, https://platform.openai.com/docs/guides/embeddings.OpenAI, “Function Calling Documentation”, https://platform.openai.com/docs/assistants/tools/function-calling.OpenAI, “OpenAI Documentation: Assistants Tools”, https://platform.openai.com/docs/assistants/tools.Heroku, “Heroku”, https://www.heroku.com/.OpenAI, “OpenAI swarm”, https://github.com/openai/swarm.2. Ingeniería y TecnologíaCHATBOTENERGÍA SOLARPNLCHATBOSOLAR ENERGYPublicationTEXTDDMIST300.txtDDMIST300.txtExtracted texttext/plain101539https://repositorio.ucp.edu.co/bitstreams/e234a4db-d80a-47f5-a08d-1efc788b86c7/downloadaf4c420a0053ca2621ff29543bad7841MD54THUMBNAILDDMIST300.jpgDDMIST300.jpgGenerated Thumbnailimage/jpeg6105https://repositorio.ucp.edu.co/bitstreams/81340ffd-32b2-446b-a3ee-2ccdd93e105a/download4d85c501cc4e844295f144d4c78d0831MD55ORIGINALDDMIST300DDMIST300application/pdf21765028https://repositorio.ucp.edu.co/bitstreams/73b61b7d-872e-418a-9418-0472d2277fc7/download21d96a2a564df95ab7eef0ddc82307ffMD52LICENSElicense.txtlicense.txttext/plain; charset=utf-815543https://repositorio.ucp.edu.co/bitstreams/c2aa296c-9fba-4bd0-8fd1-4ba9ff882887/download73a5432e0b76442b22b026844140d683MD5310785/16616oai:repositorio.ucp.edu.co:10785/166162025-04-10 03:00:44.546open.accesshttps://repositorio.ucp.edu.coRepositorio Institucional de la Universidad Católica de Pereira - RIBUCbdigital@metabiblioteca.comPHA+TEEgT0JSQSAoVEFMIFkgQ09NTyBTRSBERUZJTkUgTcOBUyBBREVMQU5URSkgU0UgT1RPUkdBIEJBSk8gTE9TIFRFUk1JTk9TIERFIEVTVEEgTElDRU5DSUEgUMOaQkxJQ0EgREUgQ1JFQVRJVkUgQ09NTU9OUyAo4oCcTFBDQ+KAnSBPIOKAnExJQ0VOQ0lB4oCdKS4gTEEgT0JSQSBFU1TDgSBQUk9URUdJREEgUE9SIERFUkVDSE9TIERFIEFVVE9SIFkvVSBPVFJBUyBMRVlFUyBBUExJQ0FCTEVTLiBRVUVEQSBQUk9ISUJJRE8gQ1VBTFFVSUVSIFVTTyBRVUUgU0UgSEFHQSBERSBMQSBPQlJBIFFVRSBOTyBDVUVOVEUgQ09OIExBIEFVVE9SSVpBQ0nDk04gUEVSVElORU5URSBERSBDT05GT1JNSURBRCBDT04gTE9TIFTDiVJNSU5PUyBERSBFU1RBIExJQ0VOQ0lBIFkgREUgTEEgTEVZIERFIERFUkVDSE8gREUgQVVUT1IuPC9wPgo8cD5NRURJQU5URSBFTCBFSkVSQ0lDSU8gREUgQ1VBTFFVSUVSQSBERSBMT1MgREVSRUNIT1MgUVVFIFNFIE9UT1JHQU4gRU4gRVNUQSBMSUNFTkNJQSwgVVNURUQgQUNFUFRBIFkgQUNVRVJEQSBRVUVEQVIgT0JMSUdBRE8gRU4gTE9TIFRFUk1JTk9TIFFVRSBTRSBTRcORQUxBTiBFTiBFTExBLiBFTCBMSUNFTkNJQU5URSBDT05DRURFIEEgVVNURUQgTE9TIERFUkVDSE9TIENPTlRFTklET1MgRU4gRVNUQSBMSUNFTkNJQSBDT05ESUNJT05BRE9TIEEgTEEgQUNFUFRBQ0nDk04gREUgU1VTIFRFUk1JTk9TIFkgQ09ORElDSU9ORVMuPC9wPgo8b2wgdHlwZT0iMSI+CiAgPGxpPgogICAgRGVmaW5pY2lvbmVzCiAgICA8b2wgdHlwZT1hPgogICAgICA8bGk+T2JyYSBDb2xlY3RpdmEgZXMgdW5hIG9icmEsIHRhbCBjb21vIHVuYSBwdWJsaWNhY2nDs24gcGVyacOzZGljYSwgdW5hIGFudG9sb2fDrWEsIG8gdW5hIGVuY2ljbG9wZWRpYSwgZW4gbGEgcXVlIGxhIG9icmEgZW4gc3UgdG90YWxpZGFkLCBzaW4gbW9kaWZpY2FjacOzbiBhbGd1bmEsIGp1bnRvIGNvbiB1biBncnVwbyBkZSBvdHJhcyBjb250cmlidWNpb25lcyBxdWUgY29uc3RpdHV5ZW4gb2JyYXMgc2VwYXJhZGFzIGUgaW5kZXBlbmRpZW50ZXMgZW4gc8OtIG1pc21hcywgc2UgaW50ZWdyYW4gZW4gdW4gdG9kbyBjb2xlY3Rpdm8uIFVuYSBPYnJhIHF1ZSBjb25zdGl0dXllIHVuYSBvYnJhIGNvbGVjdGl2YSBubyBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgKGNvbW8gc2UgZGVmaW5lIGFiYWpvKSBwYXJhIGxvcyBwcm9ww7NzaXRvcyBkZSBlc3RhIGxpY2VuY2lhLiBhcXVlbGxhIHByb2R1Y2lkYSBwb3IgdW4gZ3J1cG8gZGUgYXV0b3JlcywgZW4gcXVlIGxhIE9icmEgc2UgZW5jdWVudHJhIHNpbiBtb2RpZmljYWNpb25lcywganVudG8gY29uIHVuYSBjaWVydGEgY2FudGlkYWQgZGUgb3RyYXMgY29udHJpYnVjaW9uZXMsIHF1ZSBjb25zdGl0dXllbiBlbiBzw60gbWlzbW9zIHRyYWJham9zIHNlcGFyYWRvcyBlIGluZGVwZW5kaWVudGVzLCBxdWUgc29uIGludGVncmFkb3MgYWwgdG9kbyBjb2xlY3Rpdm8sIHRhbGVzIGNvbW8gcHVibGljYWNpb25lcyBwZXJpw7NkaWNhcywgYW50b2xvZ8OtYXMgbyBlbmNpY2xvcGVkaWFzLjwvbGk+CiAgICAgIDxsaT5PYnJhIERlcml2YWRhIHNpZ25pZmljYSB1bmEgb2JyYSBiYXNhZGEgZW4gbGEgb2JyYSBvYmpldG8gZGUgZXN0YSBsaWNlbmNpYSBvIGVuIMOpc3RhIHkgb3RyYXMgb2JyYXMgcHJlZXhpc3RlbnRlcywgdGFsZXMgY29tbyB0cmFkdWNjaW9uZXMsIGFycmVnbG9zIG11c2ljYWxlcywgZHJhbWF0aXphY2lvbmVzLCDigJxmaWNjaW9uYWxpemFjaW9uZXPigJ0sIHZlcnNpb25lcyBwYXJhIGNpbmUsIOKAnGdyYWJhY2lvbmVzIGRlIHNvbmlkb+KAnSwgcmVwcm9kdWNjaW9uZXMgZGUgYXJ0ZSwgcmVzw7ptZW5lcywgY29uZGVuc2FjaW9uZXMsIG8gY3VhbHF1aWVyIG90cmEgZW4gbGEgcXVlIGxhIG9icmEgcHVlZGEgc2VyIHRyYW5zZm9ybWFkYSwgY2FtYmlhZGEgbyBhZGFwdGFkYSwgZXhjZXB0byBhcXVlbGxhcyBxdWUgY29uc3RpdHV5YW4gdW5hIG9icmEgY29sZWN0aXZhLCBsYXMgcXVlIG5vIHNlcsOhbiBjb25zaWRlcmFkYXMgdW5hIG9icmEgZGVyaXZhZGEgcGFyYSBlZmVjdG9zIGRlIGVzdGEgbGljZW5jaWEuIChQYXJhIGV2aXRhciBkdWRhcywgZW4gZWwgY2FzbyBkZSBxdWUgbGEgT2JyYSBzZWEgdW5hIGNvbXBvc2ljacOzbiBtdXNpY2FsIG8gdW5hIGdyYWJhY2nDs24gc29ub3JhLCBwYXJhIGxvcyBlZmVjdG9zIGRlIGVzdGEgTGljZW5jaWEgbGEgc2luY3Jvbml6YWNpw7NuIHRlbXBvcmFsIGRlIGxhIE9icmEgY29uIHVuYSBpbWFnZW4gZW4gbW92aW1pZW50byBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgcGFyYSBsb3MgZmluZXMgZGUgZXN0YSBsaWNlbmNpYSkuPC9saT4KICAgICAgPGxpPkxpY2VuY2lhbnRlLCBlcyBlbCBpbmRpdmlkdW8gbyBsYSBlbnRpZGFkIHRpdHVsYXIgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIHF1ZSBvZnJlY2UgbGEgT2JyYSBlbiBjb25mb3JtaWRhZCBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuPC9saT4KICAgICAgPGxpPkF1dG9yIG9yaWdpbmFsLCBlcyBlbCBpbmRpdmlkdW8gcXVlIGNyZcOzIGxhIE9icmEuPC9saT4KICAgICAgPGxpPk9icmEsIGVzIGFxdWVsbGEgb2JyYSBzdXNjZXB0aWJsZSBkZSBwcm90ZWNjacOzbiBwb3IgZWwgcsOpZ2ltZW4gZGUgRGVyZWNobyBkZSBBdXRvciB5IHF1ZSBlcyBvZnJlY2lkYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGVzdGEgbGljZW5jaWE8L2xpPgogICAgICA8bGk+VXN0ZWQsIGVzIGVsIGluZGl2aWR1byBvIGxhIGVudGlkYWQgcXVlIGVqZXJjaXRhIGxvcyBkZXJlY2hvcyBvdG9yZ2Fkb3MgYWwgYW1wYXJvIGRlIGVzdGEgTGljZW5jaWEgeSBxdWUgY29uIGFudGVyaW9yaWRhZCBubyBoYSB2aW9sYWRvIGxhcyBjb25kaWNpb25lcyBkZSBsYSBtaXNtYSByZXNwZWN0byBhIGxhIE9icmEsIG8gcXVlIGhheWEgb2J0ZW5pZG8gYXV0b3JpemFjacOzbiBleHByZXNhIHBvciBwYXJ0ZSBkZWwgTGljZW5jaWFudGUgcGFyYSBlamVyY2VyIGxvcyBkZXJlY2hvcyBhbCBhbXBhcm8gZGUgZXN0YSBMaWNlbmNpYSBwZXNlIGEgdW5hIHZpb2xhY2nDs24gYW50ZXJpb3IuPC9saT4KICAgIDwvb2w+CiAgPC9saT4KICA8YnIvPgogIDxsaT4KICAgIERlcmVjaG9zIGRlIFVzb3MgSG9ucmFkb3MgeSBleGNlcGNpb25lcyBMZWdhbGVzLgogICAgPHA+TmFkYSBlbiBlc3RhIExpY2VuY2lhIHBvZHLDoSBzZXIgaW50ZXJwcmV0YWRvIGNvbW8gdW5hIGRpc21pbnVjacOzbiwgbGltaXRhY2nDs24gbyByZXN0cmljY2nDs24gZGUgbG9zIGRlcmVjaG9zIGRlcml2YWRvcyBkZWwgdXNvIGhvbnJhZG8geSBvdHJhcyBsaW1pdGFjaW9uZXMgbyBleGNlcGNpb25lcyBhIGxvcyBkZXJlY2hvcyBkZWwgYXV0b3IgYmFqbyBlbCByw6lnaW1lbiBsZWdhbCB2aWdlbnRlIG8gZGVyaXZhZG8gZGUgY3VhbHF1aWVyIG90cmEgbm9ybWEgcXVlIHNlIGxlIGFwbGlxdWUuPC9wPgogIDwvbGk+CiAgPGxpPgogICAgQ29uY2VzacOzbiBkZSBsYSBMaWNlbmNpYS4KICAgIDxwPkJham8gbG9zIHTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIGVsIExpY2VuY2lhbnRlIG90b3JnYSBhIFVzdGVkIHVuYSBsaWNlbmNpYSBtdW5kaWFsLCBsaWJyZSBkZSByZWdhbMOtYXMsIG5vIGV4Y2x1c2l2YSB5IHBlcnBldHVhIChkdXJhbnRlIHRvZG8gZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yKSBwYXJhIGVqZXJjZXIgZXN0b3MgZGVyZWNob3Mgc29icmUgbGEgT2JyYSB0YWwgeSBjb21vIHNlIGluZGljYSBhIGNvbnRpbnVhY2nDs246PC9wPgogICAgPG9sIHR5cGU9ImEiPgogICAgICA8bGk+UmVwcm9kdWNpciBsYSBPYnJhLCBpbmNvcnBvcmFyIGxhIE9icmEgZW4gdW5hIG8gbcOhcyBPYnJhcyBDb2xlY3RpdmFzLCB5IHJlcHJvZHVjaXIgbGEgT2JyYSBpbmNvcnBvcmFkYSBlbiBsYXMgT2JyYXMgQ29sZWN0aXZhcy48L2xpPgogICAgICA8bGk+RGlzdHJpYnVpciBjb3BpYXMgbyBmb25vZ3JhbWFzIGRlIGxhcyBPYnJhcywgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYSwgaW5jbHV5w6luZG9sYXMgY29tbyBpbmNvcnBvcmFkYXMgZW4gT2JyYXMgQ29sZWN0aXZhcywgc2Vnw7puIGNvcnJlc3BvbmRhLjwvbGk+CiAgICAgIDxsaT5EaXN0cmlidWlyIGNvcGlhcyBkZSBsYXMgT2JyYXMgRGVyaXZhZGFzIHF1ZSBzZSBnZW5lcmVuLCBleGhpYmlybGFzIHDDumJsaWNhbWVudGUsIGVqZWN1dGFybGFzIHDDumJsaWNhbWVudGUgeS9vIHBvbmVybGFzIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhLjwvbGk+CiAgICA8L29sPgogICAgPHA+TG9zIGRlcmVjaG9zIG1lbmNpb25hZG9zIGFudGVyaW9ybWVudGUgcHVlZGVuIHNlciBlamVyY2lkb3MgZW4gdG9kb3MgbG9zIG1lZGlvcyB5IGZvcm1hdG9zLCBhY3R1YWxtZW50ZSBjb25vY2lkb3MgbyBxdWUgc2UgaW52ZW50ZW4gZW4gZWwgZnV0dXJvLiBMb3MgZGVyZWNob3MgYW50ZXMgbWVuY2lvbmFkb3MgaW5jbHV5ZW4gZWwgZGVyZWNobyBhIHJlYWxpemFyIGRpY2hhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBtZWRpZGEgcXVlIHNlYW4gdMOpY25pY2FtZW50ZSBuZWNlc2FyaWFzIHBhcmEgZWplcmNlciBsb3MgZGVyZWNob3MgZW4gb3RybyBtZWRpbyBvIGZvcm1hdG9zLCBwZXJvIGRlIG90cmEgbWFuZXJhIHVzdGVkIG5vIGVzdMOhIGF1dG9yaXphZG8gcGFyYSByZWFsaXphciBvYnJhcyBkZXJpdmFkYXMuIFRvZG9zIGxvcyBkZXJlY2hvcyBubyBvdG9yZ2Fkb3MgZXhwcmVzYW1lbnRlIHBvciBlbCBMaWNlbmNpYW50ZSBxdWVkYW4gcG9yIGVzdGUgbWVkaW8gcmVzZXJ2YWRvcywgaW5jbHV5ZW5kbyBwZXJvIHNpbiBsaW1pdGFyc2UgYSBhcXVlbGxvcyBxdWUgc2UgbWVuY2lvbmFuIGVuIGxhcyBzZWNjaW9uZXMgNChkKSB5IDQoZSkuPC9wPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBSZXN0cmljY2lvbmVzLgogICAgPHA+TGEgbGljZW5jaWEgb3RvcmdhZGEgZW4gbGEgYW50ZXJpb3IgU2VjY2nDs24gMyBlc3TDoSBleHByZXNhbWVudGUgc3VqZXRhIHkgbGltaXRhZGEgcG9yIGxhcyBzaWd1aWVudGVzIHJlc3RyaWNjaW9uZXM6PC9wPgogICAgPG9sIHR5cGU9ImEiPgogICAgICA8bGk+VXN0ZWQgcHVlZGUgZGlzdHJpYnVpciwgZXhoaWJpciBww7pibGljYW1lbnRlLCBlamVjdXRhciBww7pibGljYW1lbnRlLCBvIHBvbmVyIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhIGxhIE9icmEgc8OzbG8gYmFqbyBsYXMgY29uZGljaW9uZXMgZGUgZXN0YSBMaWNlbmNpYSwgeSBVc3RlZCBkZWJlIGluY2x1aXIgdW5hIGNvcGlhIGRlIGVzdGEgbGljZW5jaWEgbyBkZWwgSWRlbnRpZmljYWRvciBVbml2ZXJzYWwgZGUgUmVjdXJzb3MgZGUgbGEgbWlzbWEgY29uIGNhZGEgY29waWEgZGUgbGEgT2JyYSBxdWUgZGlzdHJpYnV5YSwgZXhoaWJhIHDDumJsaWNhbWVudGUsIGVqZWN1dGUgcMO6YmxpY2FtZW50ZSBvIHBvbmdhIGEgZGlzcG9zaWNpw7NuIHDDumJsaWNhLiBObyBlcyBwb3NpYmxlIG9mcmVjZXIgbyBpbXBvbmVyIG5pbmd1bmEgY29uZGljacOzbiBzb2JyZSBsYSBPYnJhIHF1ZSBhbHRlcmUgbyBsaW1pdGUgbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEgbyBlbCBlamVyY2ljaW8gZGUgbG9zIGRlcmVjaG9zIGRlIGxvcyBkZXN0aW5hdGFyaW9zIG90b3JnYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gTm8gZXMgcG9zaWJsZSBzdWJsaWNlbmNpYXIgbGEgT2JyYS4gVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RvcyB0b2RvcyBsb3MgYXZpc29zIHF1ZSBoYWdhbiByZWZlcmVuY2lhIGEgZXN0YSBMaWNlbmNpYSB5IGEgbGEgY2zDoXVzdWxhIGRlIGxpbWl0YWNpw7NuIGRlIGdhcmFudMOtYXMuIFVzdGVkIG5vIHB1ZWRlIGRpc3RyaWJ1aXIsIGV4aGliaXIgcMO6YmxpY2FtZW50ZSwgZWplY3V0YXIgcMO6YmxpY2FtZW50ZSwgbyBwb25lciBhIGRpc3Bvc2ljacOzbiBww7pibGljYSBsYSBPYnJhIGNvbiBhbGd1bmEgbWVkaWRhIHRlY25vbMOzZ2ljYSBxdWUgY29udHJvbGUgZWwgYWNjZXNvIG8gbGEgdXRpbGl6YWNpw7NuIGRlIGVsbGEgZGUgdW5hIGZvcm1hIHF1ZSBzZWEgaW5jb25zaXN0ZW50ZSBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuIExvIGFudGVyaW9yIHNlIGFwbGljYSBhIGxhIE9icmEgaW5jb3Jwb3JhZGEgYSB1bmEgT2JyYSBDb2xlY3RpdmEsIHBlcm8gZXN0byBubyBleGlnZSBxdWUgbGEgT2JyYSBDb2xlY3RpdmEgYXBhcnRlIGRlIGxhIG9icmEgbWlzbWEgcXVlZGUgc3VqZXRhIGEgbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEuIFNpIFVzdGVkIGNyZWEgdW5hIE9icmEgQ29sZWN0aXZhLCBwcmV2aW8gYXZpc28gZGUgY3VhbHF1aWVyIExpY2VuY2lhbnRlIGRlYmUsIGVuIGxhIG1lZGlkYSBkZSBsbyBwb3NpYmxlLCBlbGltaW5hciBkZSBsYSBPYnJhIENvbGVjdGl2YSBjdWFscXVpZXIgcmVmZXJlbmNpYSBhIGRpY2hvIExpY2VuY2lhbnRlIG8gYWwgQXV0b3IgT3JpZ2luYWwsIHNlZ8O6biBsbyBzb2xpY2l0YWRvIHBvciBlbCBMaWNlbmNpYW50ZSB5IGNvbmZvcm1lIGxvIGV4aWdlIGxhIGNsw6F1c3VsYSA0KGMpLjwvbGk+CiAgICAgIDxsaT5Vc3RlZCBubyBwdWVkZSBlamVyY2VyIG5pbmd1bm8gZGUgbG9zIGRlcmVjaG9zIHF1ZSBsZSBoYW4gc2lkbyBvdG9yZ2Fkb3MgZW4gbGEgU2VjY2nDs24gMyBwcmVjZWRlbnRlIGRlIG1vZG8gcXVlIGVzdMOpbiBwcmluY2lwYWxtZW50ZSBkZXN0aW5hZG9zIG8gZGlyZWN0YW1lbnRlIGRpcmlnaWRvcyBhIGNvbnNlZ3VpciB1biBwcm92ZWNobyBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYS4gRWwgaW50ZXJjYW1iaW8gZGUgbGEgT2JyYSBwb3Igb3RyYXMgb2JyYXMgcHJvdGVnaWRhcyBwb3IgZGVyZWNob3MgZGUgYXV0b3IsIHlhIHNlYSBhIHRyYXbDqXMgZGUgdW4gc2lzdGVtYSBwYXJhIGNvbXBhcnRpciBhcmNoaXZvcyBkaWdpdGFsZXMgKGRpZ2l0YWwgZmlsZS1zaGFyaW5nKSBvIGRlIGN1YWxxdWllciBvdHJhIG1hbmVyYSBubyBzZXLDoSBjb25zaWRlcmFkbyBjb21vIGVzdGFyIGRlc3RpbmFkbyBwcmluY2lwYWxtZW50ZSBvIGRpcmlnaWRvIGRpcmVjdGFtZW50ZSBhIGNvbnNlZ3VpciB1biBwcm92ZWNobyBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYSwgc2llbXByZSBxdWUgbm8gc2UgcmVhbGljZSB1biBwYWdvIG1lZGlhbnRlIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBlbiByZWxhY2nDs24gY29uIGVsIGludGVyY2FtYmlvIGRlIG9icmFzIHByb3RlZ2lkYXMgcG9yIGVsIGRlcmVjaG8gZGUgYXV0b3IuPC9saT4KICAgICAgPGxpPlNpIHVzdGVkIGRpc3RyaWJ1eWUsIGV4aGliZSBww7pibGljYW1lbnRlLCBlamVjdXRhIHDDumJsaWNhbWVudGUgbyBlamVjdXRhIHDDumJsaWNhbWVudGUgZW4gZm9ybWEgZGlnaXRhbCBsYSBPYnJhIG8gY3VhbHF1aWVyIE9icmEgRGVyaXZhZGEgdSBPYnJhIENvbGVjdGl2YSwgVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RhIHRvZGEgbGEgaW5mb3JtYWNpw7NuIGRlIGRlcmVjaG8gZGUgYXV0b3IgZGUgbGEgT2JyYSB5IHByb3BvcmNpb25hciwgZGUgZm9ybWEgcmF6b25hYmxlIHNlZ8O6biBlbCBtZWRpbyBvIG1hbmVyYSBxdWUgVXN0ZWQgZXN0w6kgdXRpbGl6YW5kbzogKGkpIGVsIG5vbWJyZSBkZWwgQXV0b3IgT3JpZ2luYWwgc2kgZXN0w6EgcHJvdmlzdG8gKG8gc2V1ZMOzbmltbywgc2kgZnVlcmUgYXBsaWNhYmxlKSwgeS9vIChpaSkgZWwgbm9tYnJlIGRlIGxhIHBhcnRlIG8gbGFzIHBhcnRlcyBxdWUgZWwgQXV0b3IgT3JpZ2luYWwgeS9vIGVsIExpY2VuY2lhbnRlIGh1YmllcmVuIGRlc2lnbmFkbyBwYXJhIGxhIGF0cmlidWNpw7NuICh2LmcuLCB1biBpbnN0aXR1dG8gcGF0cm9jaW5hZG9yLCBlZGl0b3JpYWwsIHB1YmxpY2FjacOzbikgZW4gbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZWwgTGljZW5jaWFudGUsIHTDqXJtaW5vcyBkZSBzZXJ2aWNpb3MgbyBkZSBvdHJhcyBmb3JtYXMgcmF6b25hYmxlczsgZWwgdMOtdHVsbyBkZSBsYSBPYnJhIHNpIGVzdMOhIHByb3Zpc3RvOyBlbiBsYSBtZWRpZGEgZGUgbG8gcmF6b25hYmxlbWVudGUgZmFjdGlibGUgeSwgc2kgZXN0w6EgcHJvdmlzdG8sIGVsIElkZW50aWZpY2Fkb3IgVW5pZm9ybWUgZGUgUmVjdXJzb3MgKFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcikgcXVlIGVsIExpY2VuY2lhbnRlIGVzcGVjaWZpY2EgcGFyYSBzZXIgYXNvY2lhZG8gY29uIGxhIE9icmEsIHNhbHZvIHF1ZSB0YWwgVVJJIG5vIHNlIHJlZmllcmEgYSBsYSBub3RhIHNvYnJlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBvIGEgbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGVsIGxpY2VuY2lhbWllbnRvIGRlIGxhIE9icmE7IHkgZW4gZWwgY2FzbyBkZSB1bmEgT2JyYSBEZXJpdmFkYSwgYXRyaWJ1aXIgZWwgY3LDqWRpdG8gaWRlbnRpZmljYW5kbyBlbCB1c28gZGUgbGEgT2JyYSBlbiBsYSBPYnJhIERlcml2YWRhICh2LmcuLCAiVHJhZHVjY2nDs24gRnJhbmNlc2EgZGUgbGEgT2JyYSBkZWwgQXV0b3IgT3JpZ2luYWwsIiBvICJHdWnDs24gQ2luZW1hdG9ncsOhZmljbyBiYXNhZG8gZW4gbGEgT2JyYSBvcmlnaW5hbCBkZWwgQXV0b3IgT3JpZ2luYWwiKS4gVGFsIGNyw6lkaXRvIHB1ZWRlIHNlciBpbXBsZW1lbnRhZG8gZGUgY3VhbHF1aWVyIGZvcm1hIHJhem9uYWJsZTsgZW4gZWwgY2Fzbywgc2luIGVtYmFyZ28sIGRlIE9icmFzIERlcml2YWRhcyB1IE9icmFzIENvbGVjdGl2YXMsIHRhbCBjcsOpZGl0byBhcGFyZWNlcsOhLCBjb21vIG3DrW5pbW8sIGRvbmRlIGFwYXJlY2UgZWwgY3LDqWRpdG8gZGUgY3VhbHF1aWVyIG90cm8gYXV0b3IgY29tcGFyYWJsZSB5IGRlIHVuYSBtYW5lcmEsIGFsIG1lbm9zLCB0YW4gZGVzdGFjYWRhIGNvbW8gZWwgY3LDqWRpdG8gZGUgb3RybyBhdXRvciBjb21wYXJhYmxlLjwvbGk+CiAgICAgIDxsaT4KICAgICAgICBQYXJhIGV2aXRhciB0b2RhIGNvbmZ1c2nDs24sIGVsIExpY2VuY2lhbnRlIGFjbGFyYSBxdWUsIGN1YW5kbyBsYSBvYnJhIGVzIHVuYSBjb21wb3NpY2nDs24gbXVzaWNhbDoKICAgICAgICA8b2wgdHlwZT0iaSI+CiAgICAgICAgICA8bGk+UmVnYWzDrWFzIHBvciBpbnRlcnByZXRhY2nDs24geSBlamVjdWNpw7NuIGJham8gbGljZW5jaWFzIGdlbmVyYWxlcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSBhdXRvcml6YXIgbGEgZWplY3VjacOzbiBww7pibGljYSBvIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIHkgZGUgcmVjb2xlY3Rhciwgc2VhIGluZGl2aWR1YWxtZW50ZSBvIGEgdHJhdsOpcyBkZSB1bmEgc29jaWVkYWQgZGUgZ2VzdGnDs24gY29sZWN0aXZhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIHkgZGVyZWNob3MgY29uZXhvcyAocG9yIGVqZW1wbG8sIFNBWUNPKSwgbGFzIHJlZ2Fsw61hcyBwb3IgbGEgZWplY3VjacOzbiBww7pibGljYSBvIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8gV2ViY2FzdCkgbGljZW5jaWFkYSBiYWpvIGxpY2VuY2lhcyBnZW5lcmFsZXMsIHNpIGxhIGludGVycHJldGFjacOzbiBvIGVqZWN1Y2nDs24gZGUgbGEgb2JyYSBlc3TDoSBwcmltb3JkaWFsbWVudGUgb3JpZW50YWRhIHBvciBvIGRpcmlnaWRhIGEgbGEgb2J0ZW5jacOzbiBkZSB1bmEgdmVudGFqYSBjb21lcmNpYWwgbyB1bmEgY29tcGVuc2FjacOzbiBtb25ldGFyaWEgcHJpdmFkYS48L2xpPgogICAgICAgICAgPGxpPlJlZ2Fsw61hcyBwb3IgRm9ub2dyYW1hcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSByZWNvbGVjdGFyLCBpbmRpdmlkdWFsbWVudGUgbyBhIHRyYXbDqXMgZGUgdW5hIHNvY2llZGFkIGRlIGdlc3Rpw7NuIGNvbGVjdGl2YSBkZSBkZXJlY2hvcyBkZSBhdXRvciB5IGRlcmVjaG9zIGNvbmV4b3MgKHBvciBlamVtcGxvLCBsb3MgY29uc2FncmFkb3MgcG9yIGxhIFNBWUNPKSwgdW5hIGFnZW5jaWEgZGUgZGVyZWNob3MgbXVzaWNhbGVzIG8gYWxnw7puIGFnZW50ZSBkZXNpZ25hZG8sIGxhcyByZWdhbMOtYXMgcG9yIGN1YWxxdWllciBmb25vZ3JhbWEgcXVlIFVzdGVkIGNyZWUgYSBwYXJ0aXIgZGUgbGEgb2JyYSAo4oCcdmVyc2nDs24gY292ZXLigJ0pIHkgZGlzdHJpYnV5YSwgZW4gbG9zIHTDqXJtaW5vcyBkZWwgcsOpZ2ltZW4gZGUgZGVyZWNob3MgZGUgYXV0b3IsIHNpIGxhIGNyZWFjacOzbiBvIGRpc3RyaWJ1Y2nDs24gZGUgZXNhIHZlcnNpw7NuIGNvdmVyIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkZXN0aW5hZGEgbyBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuPC9saT4KICAgICAgICA8L29sPgogICAgICA8L2xpPgogICAgICA8bGk+R2VzdGnDs24gZGUgRGVyZWNob3MgZGUgQXV0b3Igc29icmUgSW50ZXJwcmV0YWNpb25lcyB5IEVqZWN1Y2lvbmVzIERpZ2l0YWxlcyAoV2ViQ2FzdGluZykuIFBhcmEgZXZpdGFyIHRvZGEgY29uZnVzacOzbiwgZWwgTGljZW5jaWFudGUgYWNsYXJhIHF1ZSwgY3VhbmRvIGxhIG9icmEgc2VhIHVuIGZvbm9ncmFtYSwgZWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSBhdXRvcml6YXIgbGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGRlIGxhIG9icmEgKHBvciBlamVtcGxvLCB3ZWJjYXN0KSB5IGRlIHJlY29sZWN0YXIsIGluZGl2aWR1YWxtZW50ZSBvIGEgdHJhdsOpcyBkZSB1bmEgc29jaWVkYWQgZGUgZ2VzdGnDs24gY29sZWN0aXZhIGRlIGRlcmVjaG9zIGRlIGF1dG9yIHkgZGVyZWNob3MgY29uZXhvcyAocG9yIGVqZW1wbG8sIEFDSU5QUk8pLCBsYXMgcmVnYWzDrWFzIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8sIHdlYmNhc3QpLCBzdWpldGEgYSBsYXMgZGlzcG9zaWNpb25lcyBhcGxpY2FibGVzIGRlbCByw6lnaW1lbiBkZSBEZXJlY2hvIGRlIEF1dG9yLCBzaSBlc3RhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBlc3TDoSBwcmltb3JkaWFsbWVudGUgZGlyaWdpZGEgYSBvYnRlbmVyIHVuYSB2ZW50YWphIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBSZXByZXNlbnRhY2lvbmVzLCBHYXJhbnTDrWFzIHkgTGltaXRhY2lvbmVzIGRlIFJlc3BvbnNhYmlsaWRhZC4KICAgIDxwPkEgTUVOT1MgUVVFIExBUyBQQVJURVMgTE8gQUNPUkRBUkFOIERFIE9UUkEgRk9STUEgUE9SIEVTQ1JJVE8sIEVMIExJQ0VOQ0lBTlRFIE9GUkVDRSBMQSBPQlJBIChFTiBFTCBFU1RBRE8gRU4gRUwgUVVFIFNFIEVOQ1VFTlRSQSkg4oCcVEFMIENVQUzigJ0sIFNJTiBCUklOREFSIEdBUkFOVMONQVMgREUgQ0xBU0UgQUxHVU5BIFJFU1BFQ1RPIERFIExBIE9CUkEsIFlBIFNFQSBFWFBSRVNBLCBJTVBMw41DSVRBLCBMRUdBTCBPIENVQUxRVUlFUkEgT1RSQSwgSU5DTFVZRU5ETywgU0lOIExJTUlUQVJTRSBBIEVMTEFTLCBHQVJBTlTDjUFTIERFIFRJVFVMQVJJREFELCBDT01FUkNJQUJJTElEQUQsIEFEQVBUQUJJTElEQUQgTyBBREVDVUFDScOTTiBBIFBST1DDk1NJVE8gREVURVJNSU5BRE8sIEFVU0VOQ0lBIERFIElORlJBQ0NJw5NOLCBERSBBVVNFTkNJQSBERSBERUZFQ1RPUyBMQVRFTlRFUyBPIERFIE9UUk8gVElQTywgTyBMQSBQUkVTRU5DSUEgTyBBVVNFTkNJQSBERSBFUlJPUkVTLCBTRUFOIE8gTk8gREVTQ1VCUklCTEVTIChQVUVEQU4gTyBOTyBTRVIgRVNUT1MgREVTQ1VCSUVSVE9TKS4gQUxHVU5BUyBKVVJJU0RJQ0NJT05FUyBOTyBQRVJNSVRFTiBMQSBFWENMVVNJw5NOIERFIEdBUkFOVMONQVMgSU1QTMONQ0lUQVMsIEVOIENVWU8gQ0FTTyBFU1RBIEVYQ0xVU0nDk04gUFVFREUgTk8gQVBMSUNBUlNFIEEgVVNURUQuPC9wPgogIDwvbGk+CiAgPGJyLz4KICA8bGk+CiAgICBMaW1pdGFjacOzbiBkZSByZXNwb25zYWJpbGlkYWQuCiAgICA8cD5BIE1FTk9TIFFVRSBMTyBFWElKQSBFWFBSRVNBTUVOVEUgTEEgTEVZIEFQTElDQUJMRSwgRUwgTElDRU5DSUFOVEUgTk8gU0VSw4EgUkVTUE9OU0FCTEUgQU5URSBVU1RFRCBQT1IgREHDkU8gQUxHVU5PLCBTRUEgUE9SIFJFU1BPTlNBQklMSURBRCBFWFRSQUNPTlRSQUNUVUFMLCBQUkVDT05UUkFDVFVBTCBPIENPTlRSQUNUVUFMLCBPQkpFVElWQSBPIFNVQkpFVElWQSwgU0UgVFJBVEUgREUgREHDkU9TIE1PUkFMRVMgTyBQQVRSSU1PTklBTEVTLCBESVJFQ1RPUyBPIElORElSRUNUT1MsIFBSRVZJU1RPUyBPIElNUFJFVklTVE9TIFBST0RVQ0lET1MgUE9SIEVMIFVTTyBERSBFU1RBIExJQ0VOQ0lBIE8gREUgTEEgT0JSQSwgQVVOIENVQU5ETyBFTCBMSUNFTkNJQU5URSBIQVlBIFNJRE8gQURWRVJUSURPIERFIExBIFBPU0lCSUxJREFEIERFIERJQ0hPUyBEQcORT1MuIEFMR1VOQVMgTEVZRVMgTk8gUEVSTUlURU4gTEEgRVhDTFVTScOTTiBERSBDSUVSVEEgUkVTUE9OU0FCSUxJREFELCBFTiBDVVlPIENBU08gRVNUQSBFWENMVVNJw5NOIFBVRURFIE5PIEFQTElDQVJTRSBBIFVTVEVELjwvcD4KICA8L2xpPgogIDxici8+CiAgPGxpPgogICAgVMOpcm1pbm8uCiAgICA8b2wgdHlwZT0iYSI+CiAgICAgIDxsaT5Fc3RhIExpY2VuY2lhIHkgbG9zIGRlcmVjaG9zIG90b3JnYWRvcyBlbiB2aXJ0dWQgZGUgZWxsYSB0ZXJtaW5hcsOhbiBhdXRvbcOhdGljYW1lbnRlIHNpIFVzdGVkIGluZnJpbmdlIGFsZ3VuYSBjb25kaWNpw7NuIGVzdGFibGVjaWRhIGVuIGVsbGEuIFNpbiBlbWJhcmdvLCBsb3MgaW5kaXZpZHVvcyBvIGVudGlkYWRlcyBxdWUgaGFuIHJlY2liaWRvIE9icmFzIERlcml2YWRhcyBvIENvbGVjdGl2YXMgZGUgVXN0ZWQgZGUgY29uZm9ybWlkYWQgY29uIGVzdGEgTGljZW5jaWEsIG5vIHZlcsOhbiB0ZXJtaW5hZGFzIHN1cyBsaWNlbmNpYXMsIHNpZW1wcmUgcXVlIGVzdG9zIGluZGl2aWR1b3MgbyBlbnRpZGFkZXMgc2lnYW4gY3VtcGxpZW5kbyDDrW50ZWdyYW1lbnRlIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhcyBsaWNlbmNpYXMuIExhcyBTZWNjaW9uZXMgMSwgMiwgNSwgNiwgNywgeSA4IHN1YnNpc3RpcsOhbiBhIGN1YWxxdWllciB0ZXJtaW5hY2nDs24gZGUgZXN0YSBMaWNlbmNpYS48L2xpPgogICAgICA8bGk+U3VqZXRhIGEgbGFzIGNvbmRpY2lvbmVzIHkgdMOpcm1pbm9zIGFudGVyaW9yZXMsIGxhIGxpY2VuY2lhIG90b3JnYWRhIGFxdcOtIGVzIHBlcnBldHVhIChkdXJhbnRlIGVsIHBlcsOtb2RvIGRlIHZpZ2VuY2lhIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZSBsYSBvYnJhKS4gTm8gb2JzdGFudGUgbG8gYW50ZXJpb3IsIGVsIExpY2VuY2lhbnRlIHNlIHJlc2VydmEgZWwgZGVyZWNobyBhIHB1YmxpY2FyIHkvbyBlc3RyZW5hciBsYSBPYnJhIGJham8gY29uZGljaW9uZXMgZGUgbGljZW5jaWEgZGlmZXJlbnRlcyBvIGEgZGVqYXIgZGUgZGlzdHJpYnVpcmxhIGVuIGxvcyB0w6lybWlub3MgZGUgZXN0YSBMaWNlbmNpYSBlbiBjdWFscXVpZXIgbW9tZW50bzsgZW4gZWwgZW50ZW5kaWRvLCBzaW4gZW1iYXJnbywgcXVlIGVzYSBlbGVjY2nDs24gbm8gc2Vydmlyw6EgcGFyYSByZXZvY2FyIGVzdGEgbGljZW5jaWEgbyBxdWUgZGViYSBzZXIgb3RvcmdhZGEgLCBiYWpvIGxvcyB0w6lybWlub3MgZGUgZXN0YSBsaWNlbmNpYSksIHkgZXN0YSBsaWNlbmNpYSBjb250aW51YXLDoSBlbiBwbGVubyB2aWdvciB5IGVmZWN0byBhIG1lbm9zIHF1ZSBzZWEgdGVybWluYWRhIGNvbW8gc2UgZXhwcmVzYSBhdHLDoXMuIExhIExpY2VuY2lhIHJldm9jYWRhIGNvbnRpbnVhcsOhIHNpZW5kbyBwbGVuYW1lbnRlIHZpZ2VudGUgeSBlZmVjdGl2YSBzaSBubyBzZSBsZSBkYSB0w6lybWlubyBlbiBsYXMgY29uZGljaW9uZXMgaW5kaWNhZGFzIGFudGVyaW9ybWVudGUuPC9saT4KICAgIDwvb2w+CiAgPC9saT4KICA8YnIvPgogIDxsaT4KICAgIFZhcmlvcy4KICAgIDxvbCB0eXBlPSJhIj4KICAgICAgPGxpPkNhZGEgdmV6IHF1ZSBVc3RlZCBkaXN0cmlidXlhIG8gcG9uZ2EgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBvIHVuYSBPYnJhIENvbGVjdGl2YSwgZWwgTGljZW5jaWFudGUgb2ZyZWNlcsOhIGFsIGRlc3RpbmF0YXJpbyB1bmEgbGljZW5jaWEgZW4gbG9zIG1pc21vcyB0w6lybWlub3MgeSBjb25kaWNpb25lcyBxdWUgbGEgbGljZW5jaWEgb3RvcmdhZGEgYSBVc3RlZCBiYWpvIGVzdGEgTGljZW5jaWEuPC9saT4KICAgICAgPGxpPlNpIGFsZ3VuYSBkaXNwb3NpY2nDs24gZGUgZXN0YSBMaWNlbmNpYSByZXN1bHRhIGludmFsaWRhZGEgbyBubyBleGlnaWJsZSwgc2Vnw7puIGxhIGxlZ2lzbGFjacOzbiB2aWdlbnRlLCBlc3RvIG5vIGFmZWN0YXLDoSBuaSBsYSB2YWxpZGV6IG5pIGxhIGFwbGljYWJpbGlkYWQgZGVsIHJlc3RvIGRlIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEgeSwgc2luIGFjY2nDs24gYWRpY2lvbmFsIHBvciBwYXJ0ZSBkZSBsb3Mgc3VqZXRvcyBkZSBlc3RlIGFjdWVyZG8sIGFxdcOpbGxhIHNlIGVudGVuZGVyw6EgcmVmb3JtYWRhIGxvIG3DrW5pbW8gbmVjZXNhcmlvIHBhcmEgaGFjZXIgcXVlIGRpY2hhIGRpc3Bvc2ljacOzbiBzZWEgdsOhbGlkYSB5IGV4aWdpYmxlLjwvbGk+CiAgICAgIDxsaT5OaW5nw7puIHTDqXJtaW5vIG8gZGlzcG9zaWNpw7NuIGRlIGVzdGEgTGljZW5jaWEgc2UgZXN0aW1hcsOhIHJlbnVuY2lhZGEgeSBuaW5ndW5hIHZpb2xhY2nDs24gZGUgZWxsYSBzZXLDoSBjb25zZW50aWRhIGEgbWVub3MgcXVlIGVzYSByZW51bmNpYSBvIGNvbnNlbnRpbWllbnRvIHNlYSBvdG9yZ2FkbyBwb3IgZXNjcml0byB5IGZpcm1hZG8gcG9yIGxhIHBhcnRlIHF1ZSByZW51bmNpZSBvIGNvbnNpZW50YS48L2xpPgogICAgICA8bGk+RXN0YSBMaWNlbmNpYSByZWZsZWphIGVsIGFjdWVyZG8gcGxlbm8gZW50cmUgbGFzIHBhcnRlcyByZXNwZWN0byBhIGxhIE9icmEgYXF1w60gbGljZW5jaWFkYS4gTm8gaGF5IGFycmVnbG9zLCBhY3VlcmRvcyBvIGRlY2xhcmFjaW9uZXMgcmVzcGVjdG8gYSBsYSBPYnJhIHF1ZSBubyBlc3TDqW4gZXNwZWNpZmljYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gRWwgTGljZW5jaWFudGUgbm8gc2UgdmVyw6EgbGltaXRhZG8gcG9yIG5pbmd1bmEgZGlzcG9zaWNpw7NuIGFkaWNpb25hbCBxdWUgcHVlZGEgc3VyZ2lyIGVuIGFsZ3VuYSBjb211bmljYWNpw7NuIGVtYW5hZGEgZGUgVXN0ZWQuIEVzdGEgTGljZW5jaWEgbm8gcHVlZGUgc2VyIG1vZGlmaWNhZGEgc2luIGVsIGNvbnNlbnRpbWllbnRvIG11dHVvIHBvciBlc2NyaXRvIGRlbCBMaWNlbmNpYW50ZSB5IFVzdGVkLjwvbGk+CiAgICA8L29sPgogIDwvbGk+CiAgPGJyLz4KPC9vbD4K