Framework para el Aprendizaje de Redes Neuronales Profundas

El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este...

Full description

Autores:
Anzola Avila, Alejandro
Moreno Silva, Juan Andres
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2020
Institución:
Escuela Colombiana de Ingeniería Julio Garavito
Repositorio:
Repositorio Institucional ECI
Idioma:
spa
OAI Identifier:
oai:repositorio.escuelaing.edu.co:001/1236
Acceso en línea:
https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428
https://repositorio.escuelaing.edu.co/handle/001/1236
Palabra clave:
Inteligencia artificial
aprendizaje profundo
Modelos Hidrológicos
Framework
Programación Orientada a Objetos
Recursos de Aprendizaje
Artificial Intelligence
Deep Learning
Hidrology Model
Framework
Object Oriented Programming
Learning resources
Rights
openAccess
License
Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito
id ESCUELAIG2_b4043dcdea47b31ad5086a60f55ffee3
oai_identifier_str oai:repositorio.escuelaing.edu.co:001/1236
network_acronym_str ESCUELAIG2
network_name_str Repositorio Institucional ECI
repository_id_str
dc.title.spa.fl_str_mv Framework para el Aprendizaje de Redes Neuronales Profundas
title Framework para el Aprendizaje de Redes Neuronales Profundas
spellingShingle Framework para el Aprendizaje de Redes Neuronales Profundas
Inteligencia artificial
aprendizaje profundo
Modelos Hidrológicos
Framework
Programación Orientada a Objetos
Recursos de Aprendizaje
Artificial Intelligence
Deep Learning
Hidrology Model
Framework
Object Oriented Programming
Learning resources
title_short Framework para el Aprendizaje de Redes Neuronales Profundas
title_full Framework para el Aprendizaje de Redes Neuronales Profundas
title_fullStr Framework para el Aprendizaje de Redes Neuronales Profundas
title_full_unstemmed Framework para el Aprendizaje de Redes Neuronales Profundas
title_sort Framework para el Aprendizaje de Redes Neuronales Profundas
dc.creator.fl_str_mv Anzola Avila, Alejandro
Moreno Silva, Juan Andres
dc.contributor.advisor.spa.fl_str_mv Diaz Rozo, Maria Irma (dir)
dc.contributor.author.spa.fl_str_mv Anzola Avila, Alejandro
Moreno Silva, Juan Andres
dc.subject.spa.fl_str_mv Inteligencia artificial
aprendizaje profundo
Modelos Hidrológicos
Framework
Programación Orientada a Objetos
Recursos de Aprendizaje
topic Inteligencia artificial
aprendizaje profundo
Modelos Hidrológicos
Framework
Programación Orientada a Objetos
Recursos de Aprendizaje
Artificial Intelligence
Deep Learning
Hidrology Model
Framework
Object Oriented Programming
Learning resources
dc.subject.keywords.spa.fl_str_mv Artificial Intelligence
Deep Learning
Hidrology Model
Framework
Object Oriented Programming
Learning resources
description El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este campo. Dentro de las grandes fortalezas que ofrece esta tecnología es la de poder resolver una amplia cantidad de problemas de diferentes dominios y áreas del conocimiento, e incluso es posible reusar el conocimiento y el modelo obtenido al resolver un problema en problemas de dominios similares. Uno de los principales actores en esta revolución son las redes neuronales, que pertenecen al campo del aprendizaje automático. Esta tecnología nos permite resolver una infinidad de problemas, desde clasificar números hasta generar código dado una instrucción en lenguaje natural. Sin embargo, esta tecnología tiene una curva de aprendizaje elevada. Nuestra solución a este problema es ofrecer recursos de aprendizaje de redes neuronales para que el estudiante pueda aprender conceptos bases a través de la experimentación y la extensión de los mismos. Los recursos desarrollados son (i) un framework de aprendizaje (marco de trabajo) y (ii) un conjunto de casos problema-solución. El framework (marco de trabajo) permite que los estudiantes puedan construir y probar modelos de redes neuronales. Este framework está diseñado con el fin de ser una ayuda para la comprensión de conceptos claves a novatos interesadas en el campo, siguiendo lineamientos de buenas practicas de ingeniería de software. El framework está pensado para representar los conceptos base de inteligencia artificial, de manera suficientemente general como para poder extenderlo para implementar diferentes modelos de redes neuronales. Para esto, el framework cuenta con distintos componentes extensibles que corresponden a los principales conceptos de redes neuronales. Dentro de estos componentes se encuentran: los tipos de redes neuronales (profundas, recurrentes y convolucionales); las funciones de activación y costo; los mecanismos de regularización y optimización, entre otros. En el conjunto de casos problema-solución se trabajaron tres problemas clásicos y un problema especializado en el área de hidrología. Los problemas clásicos seleccionados fueron la clasificación de dígitos escritos a mano con redes densas y convolucionales y la clasificación de textos (positivos ó negativos) con redes recurrentes. El problema en hidrología fue la predicción de un caudal en el río Magdalena, en este trabajo se realizaron dos modelos con el fin de evaluarlas: un perceptrón multicapas (MLP por sus siglas en inglés (MultiLayerPerceptron) y un modelo secuencial de capas con memoria (LSTM por sus siglas en inglés (LongShort Term Memory) ) con el fin de evaluarlas. Los casos desarrollados nos permitieron, además de generar recursos de aprendizaje, probar la versatilidad del framework. En tres de los cuatro casos se comprobó el desempeño adecuado del framework. El caso que no fue posible implementar fue el de redes neuronales recurrentes por problemas de alcance; sin embargo, están consideradas en el diseño de la estructura del framework. En la implementación de los casos se evidenció que el framework trabaja alineado con la filosofía de buenas practicas de desarrollo de software. En particular, en la implementación del problema en hidrología, se demostró que esta especialmente diseñado para tener fácil extensibilidad. Una de las métricas de desempeño que se tomaron fueron los tiempos de entrenamiento, aunque no es parte de los objetivos, de forma que se tuviera una forma de comparación en ese aspecto. No fue inesperado encontrar que el desempeño en Keras supero considerablemente a la implementación hecha en el framework. Finalmente, uno de los aspectos claves del framework es que fue diseñado con modelos supervisados en mente, lo cual permite extenderlo con modelos supervisados diferentes a las redes neuronales. Como trabajo futuro se desea incluir las lineas de aprendizaje no-supervisado ó aprendizaje reforzado.
publishDate 2020
dc.date.accessioned.spa.fl_str_mv 2020-08-08T03:14:06Z
dc.date.available.spa.fl_str_mv 2020-08-08T03:14:06Z
dc.date.issued.spa.fl_str_mv 2020
dc.date.accessioned.none.fl_str_mv 2021-10-01T16:03:49Z
dc.date.available.none.fl_str_mv 2021-10-01T16:03:49Z
dc.type.spa.fl_str_mv Trabajo de grado - Pregrado
dc.type.coarversion.fl_str_mv http://purl.org/coar/version/c_970fb48d4fbd8a85
dc.type.version.spa.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
dc.type.content.spa.fl_str_mv Text
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/bachelorThesis
dc.type.redcol.spa.fl_str_mv http://purl.org/redcol/resource_type/TP
format http://purl.org/coar/resource_type/c_7a1f
status_str publishedVersion
dc.identifier.uri.spa.fl_str_mv https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428
dc.identifier.uri.none.fl_str_mv https://repositorio.escuelaing.edu.co/handle/001/1236
url https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428
https://repositorio.escuelaing.edu.co/handle/001/1236
dc.language.iso.spa.fl_str_mv spa
language spa
dc.rights.spa.fl_str_mv Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito
dc.rights.coar.fl_str_mv http://purl.org/coar/access_right/c_abf2
dc.rights.uri.spa.fl_str_mv https://creativecommons.org/licenses/by-nc/4.0/
dc.rights.accessrights.spa.fl_str_mv info:eu-repo/semantics/openAccess
dc.rights.creativecommons.spa.fl_str_mv Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)
rights_invalid_str_mv Derechos Reservados - Escuela Colombiana de Ingeniería Julio Garavito
https://creativecommons.org/licenses/by-nc/4.0/
Atribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)
http://purl.org/coar/access_right/c_abf2
eu_rights_str_mv openAccess
dc.format.mimetype.spa.fl_str_mv application/pdf
dc.publisher.spa.fl_str_mv Escuela Colombiana de Ingeniería Julio Garavito
dc.publisher.program.spa.fl_str_mv Ingeniería de Sistemas
institution Escuela Colombiana de Ingeniería Julio Garavito
bitstream.url.fl_str_mv https://repositorio.escuelaing.edu.co/bitstream/001/1236/1/Anzola%20Avila%2c%20Alejandro-2020.pdf
https://repositorio.escuelaing.edu.co/bitstream/001/1236/2/Anexo%201.zip
https://repositorio.escuelaing.edu.co/bitstream/001/1236/3/Autorizacion.pdf
https://repositorio.escuelaing.edu.co/bitstream/001/1236/4/Anexo%202.%20zip
https://repositorio.escuelaing.edu.co/bitstream/001/1236/5/license.txt
https://repositorio.escuelaing.edu.co/bitstream/001/1236/8/Anzola%20Avila%2c%20Alejandro-2020.pdf.txt
https://repositorio.escuelaing.edu.co/bitstream/001/1236/10/Autorizacion.pdf.txt
https://repositorio.escuelaing.edu.co/bitstream/001/1236/9/Anzola%20Avila%2c%20Alejandro-2020.pdf.jpg
https://repositorio.escuelaing.edu.co/bitstream/001/1236/11/Autorizacion.pdf.jpg
bitstream.checksum.fl_str_mv a2feabdf8989ffb0607e65c4cbb55882
0a93ed7ea281a3171b21cb2e65f80ef2
eafc6321362cbc23e7bb9b28571c1ae8
8e573e3c986af97c38204b37a85c8a83
8a4605be74aa9ea9d79846c1fba20a33
3875a6edecab7465e4c184672cb30dc8
315449d571fa37015046fb849178657d
36d1bdd005b94f6062b2658674c96155
86c0142ada9b5d9e33fb7e817f299360
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Escuela Colombiana de Ingeniería Julio Garavito
repository.mail.fl_str_mv repositorio.eci@escuelaing.edu.co
_version_ 1814355626166321152
spelling Diaz Rozo, Maria Irma (dir)854f4cab51c8f26a556d8f680cd24045300Anzola Avila, Alejandrof8aff2b2e8a0a334cad07f8d0513a218600Moreno Silva, Juan Andresf1a98bb6cdc29519cca4446b0a432f066002020-08-08T03:14:06Z2021-10-01T16:03:49Z2020-08-08T03:14:06Z2021-10-01T16:03:49Z2020https://catalogo.escuelaing.edu.co/cgi-bin/koha/opac-detail.pl?biblionumber=22428https://repositorio.escuelaing.edu.co/handle/001/1236El aprendizaje automático es un campo de la inteligencia artificial que se ha desarrollado exponencialmente en los últimos años gracias a la inmensa cantidad de datos disponibles, al enorme poder de procesamiento con el que ahora se cuenta y a las innovaciones tecnológicas que se han logrado en este campo. Dentro de las grandes fortalezas que ofrece esta tecnología es la de poder resolver una amplia cantidad de problemas de diferentes dominios y áreas del conocimiento, e incluso es posible reusar el conocimiento y el modelo obtenido al resolver un problema en problemas de dominios similares. Uno de los principales actores en esta revolución son las redes neuronales, que pertenecen al campo del aprendizaje automático. Esta tecnología nos permite resolver una infinidad de problemas, desde clasificar números hasta generar código dado una instrucción en lenguaje natural. Sin embargo, esta tecnología tiene una curva de aprendizaje elevada. Nuestra solución a este problema es ofrecer recursos de aprendizaje de redes neuronales para que el estudiante pueda aprender conceptos bases a través de la experimentación y la extensión de los mismos. Los recursos desarrollados son (i) un framework de aprendizaje (marco de trabajo) y (ii) un conjunto de casos problema-solución. El framework (marco de trabajo) permite que los estudiantes puedan construir y probar modelos de redes neuronales. Este framework está diseñado con el fin de ser una ayuda para la comprensión de conceptos claves a novatos interesadas en el campo, siguiendo lineamientos de buenas practicas de ingeniería de software. El framework está pensado para representar los conceptos base de inteligencia artificial, de manera suficientemente general como para poder extenderlo para implementar diferentes modelos de redes neuronales. Para esto, el framework cuenta con distintos componentes extensibles que corresponden a los principales conceptos de redes neuronales. Dentro de estos componentes se encuentran: los tipos de redes neuronales (profundas, recurrentes y convolucionales); las funciones de activación y costo; los mecanismos de regularización y optimización, entre otros. En el conjunto de casos problema-solución se trabajaron tres problemas clásicos y un problema especializado en el área de hidrología. Los problemas clásicos seleccionados fueron la clasificación de dígitos escritos a mano con redes densas y convolucionales y la clasificación de textos (positivos ó negativos) con redes recurrentes. El problema en hidrología fue la predicción de un caudal en el río Magdalena, en este trabajo se realizaron dos modelos con el fin de evaluarlas: un perceptrón multicapas (MLP por sus siglas en inglés (MultiLayerPerceptron) y un modelo secuencial de capas con memoria (LSTM por sus siglas en inglés (LongShort Term Memory) ) con el fin de evaluarlas. Los casos desarrollados nos permitieron, además de generar recursos de aprendizaje, probar la versatilidad del framework. En tres de los cuatro casos se comprobó el desempeño adecuado del framework. El caso que no fue posible implementar fue el de redes neuronales recurrentes por problemas de alcance; sin embargo, están consideradas en el diseño de la estructura del framework. En la implementación de los casos se evidenció que el framework trabaja alineado con la filosofía de buenas practicas de desarrollo de software. En particular, en la implementación del problema en hidrología, se demostró que esta especialmente diseñado para tener fácil extensibilidad. Una de las métricas de desempeño que se tomaron fueron los tiempos de entrenamiento, aunque no es parte de los objetivos, de forma que se tuviera una forma de comparación en ese aspecto. No fue inesperado encontrar que el desempeño en Keras supero considerablemente a la implementación hecha en el framework. Finalmente, uno de los aspectos claves del framework es que fue diseñado con modelos supervisados en mente, lo cual permite extenderlo con modelos supervisados diferentes a las redes neuronales. Como trabajo futuro se desea incluir las lineas de aprendizaje no-supervisado ó aprendizaje reforzado.Machine Learning is a field of artificial intelligence that has been developing exponentially in the last few years due to the immense amount of data, processing power, and technology innovations. Among the great strengths that this technology offers is the vast amount of problems from different domains and knowledge fields. It is even possible to reuse knowledge and models obtained after solving a problem from a similar field. One of the main actors in this revolution is the neural networks technology, which is part of the field of machine learning. This technology lets us solve an infinite amount of problems, from classifying written numbers to source code generation from natural language. However, this technology has a very steep learning curve. Our solution to this problem is to offer neural network learning resources to help students learn base concepts through experimentation and extension. The developed resources are (i) a learning framework and (ii) a set of problem-solution cases. The framework lets students build and test neural network models. This framework is designed to aid newcomers interested in the field to understand base concepts, following software engineering best practices. This framework is built to represent artificial intelligence base concepts, in a way general enough to be extensible to different neural network models. To achieve this, the framework has various extensible components that correspond to different main concepts of neural networks. Among these components are (i) neural network types (deep, recurrent, and convolutional); (ii) activation and loss functions; and (iii) regularization and optimization mechanisms. In the set of problem-solution cases, there are three classic problems and one specialized problem in the field of hydrology. The classic problems selected are handwritten digits with dense and convolutional networks, and positive-negative text classification with recurrent networks. The hydrology problem was the prediction of flow in the Magdalena river; in this work, we made two models to evaluate them: a multilayer perceptron (MLP for short) and a Long-short Term Memory (LSTM for short) for evaluation. The cases developed allowed us to test the versatility of our framework in addition to having learning resources. In three of the four cases, the performance of the framework was verified and deemed appropriate. The case that could not be implemented was the one that required recurrent neural networks due to encountered scope problems; however, recurrent neural networks are considered in the framework structure's design. In the implementation of the cases, it could be seen that the framework works aligned with the philosophy of good software development practices. In particular, in the implementation of the hydrology problem, it was shown that it is easy to extend. One of the performance metrics that were taken was training times to have a way of comparing them, although it is not part of our objectives. It was not unexpected to find that Keras' performance is considerably superior to the implementation made in our framework. Finally, one of our framework's key aspects is that it was designed with only supervised models in mind, which only allows it to be extended to supervised models other than neural networks. The addition of unsupervised learning or reinforced learning is future work.PregradoIngeniero(a) de Sistemasapplication/pdfspaEscuela Colombiana de Ingeniería Julio GaravitoIngeniería de SistemasDerechos Reservados - Escuela Colombiana de Ingeniería Julio Garavitohttps://creativecommons.org/licenses/by-nc/4.0/info:eu-repo/semantics/openAccessAtribución-NoComercial 4.0 Internacional (CC BY-NC 4.0)http://purl.org/coar/access_right/c_abf2Inteligencia artificialaprendizaje profundoModelos HidrológicosFrameworkProgramación Orientada a ObjetosRecursos de AprendizajeArtificial IntelligenceDeep LearningHidrology ModelFrameworkObject Oriented ProgrammingLearning resourcesFramework para el Aprendizaje de Redes Neuronales ProfundasTrabajo de grado - Pregradoinfo:eu-repo/semantics/publishedVersionhttp://purl.org/coar/resource_type/c_7a1fTextinfo:eu-repo/semantics/bachelorThesishttp://purl.org/redcol/resource_type/TPhttp://purl.org/coar/version/c_970fb48d4fbd8a85ORIGINALAnzola Avila, Alejandro-2020.pdfapplication/pdf9555466https://repositorio.escuelaing.edu.co/bitstream/001/1236/1/Anzola%20Avila%2c%20Alejandro-2020.pdfa2feabdf8989ffb0607e65c4cbb55882MD51open accessAnexo 1.zipCodigo fuenteapplication/octet-stream20649239https://repositorio.escuelaing.edu.co/bitstream/001/1236/2/Anexo%201.zip0a93ed7ea281a3171b21cb2e65f80ef2MD52open accessAutorizacion.pdfapplication/pdf193481https://repositorio.escuelaing.edu.co/bitstream/001/1236/3/Autorizacion.pdfeafc6321362cbc23e7bb9b28571c1ae8MD53metadata only accessAnexo 2. zipapplication/octet-stream3251695https://repositorio.escuelaing.edu.co/bitstream/001/1236/4/Anexo%202.%20zip8e573e3c986af97c38204b37a85c8a83MD54open accessLICENSElicense.txttext/plain1748https://repositorio.escuelaing.edu.co/bitstream/001/1236/5/license.txt8a4605be74aa9ea9d79846c1fba20a33MD55open accessTEXTAnzola Avila, Alejandro-2020.pdf.txtAnzola Avila, Alejandro-2020.pdf.txtExtracted texttext/plain179115https://repositorio.escuelaing.edu.co/bitstream/001/1236/8/Anzola%20Avila%2c%20Alejandro-2020.pdf.txt3875a6edecab7465e4c184672cb30dc8MD58open accessAutorizacion.pdf.txtAutorizacion.pdf.txtExtracted texttext/plain3826https://repositorio.escuelaing.edu.co/bitstream/001/1236/10/Autorizacion.pdf.txt315449d571fa37015046fb849178657dMD510metadata only accessTHUMBNAILAnzola Avila, Alejandro-2020.pdf.jpgAnzola Avila, Alejandro-2020.pdf.jpgGenerated Thumbnailimage/jpeg6458https://repositorio.escuelaing.edu.co/bitstream/001/1236/9/Anzola%20Avila%2c%20Alejandro-2020.pdf.jpg36d1bdd005b94f6062b2658674c96155MD59open accessAutorizacion.pdf.jpgAutorizacion.pdf.jpgGenerated Thumbnailimage/jpeg13574https://repositorio.escuelaing.edu.co/bitstream/001/1236/11/Autorizacion.pdf.jpg86c0142ada9b5d9e33fb7e817f299360MD511metadata only access001/1236oai:repositorio.escuelaing.edu.co:001/12362021-10-01 17:25:06.555open accessRepositorio Escuela Colombiana de Ingeniería Julio Garavitorepositorio.eci@escuelaing.edu.coTk9URTogUExBQ0UgWU9VUiBPV04gTElDRU5TRSBIRVJFClRoaXMgc2FtcGxlIGxpY2Vuc2UgaXMgcHJvdmlkZWQgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seS4KCk5PTi1FWENMVVNJVkUgRElTVFJJQlVUSU9OIExJQ0VOU0UKCkJ5IHNpZ25pbmcgYW5kIHN1Ym1pdHRpbmcgdGhpcyBsaWNlbnNlLCB5b3UgKHRoZSBhdXRob3Iocykgb3IgY29weXJpZ2h0Cm93bmVyKSBncmFudHMgdG8gRFNwYWNlIFVuaXZlcnNpdHkgKERTVSkgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHQgdG8gcmVwcm9kdWNlLAp0cmFuc2xhdGUgKGFzIGRlZmluZWQgYmVsb3cpLCBhbmQvb3IgZGlzdHJpYnV0ZSB5b3VyIHN1Ym1pc3Npb24gKGluY2x1ZGluZwp0aGUgYWJzdHJhY3QpIHdvcmxkd2lkZSBpbiBwcmludCBhbmQgZWxlY3Ryb25pYyBmb3JtYXQgYW5kIGluIGFueSBtZWRpdW0sCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYXVkaW8gb3IgdmlkZW8uCgpZb3UgYWdyZWUgdGhhdCBEU1UgbWF5LCB3aXRob3V0IGNoYW5naW5nIHRoZSBjb250ZW50LCB0cmFuc2xhdGUgdGhlCnN1Ym1pc3Npb24gdG8gYW55IG1lZGl1bSBvciBmb3JtYXQgZm9yIHRoZSBwdXJwb3NlIG9mIHByZXNlcnZhdGlvbi4KCllvdSBhbHNvIGFncmVlIHRoYXQgRFNVIG1heSBrZWVwIG1vcmUgdGhhbiBvbmUgY29weSBvZiB0aGlzIHN1Ym1pc3Npb24gZm9yCnB1cnBvc2VzIG9mIHNlY3VyaXR5LCBiYWNrLXVwIGFuZCBwcmVzZXJ2YXRpb24uCgpZb3UgcmVwcmVzZW50IHRoYXQgdGhlIHN1Ym1pc3Npb24gaXMgeW91ciBvcmlnaW5hbCB3b3JrLCBhbmQgdGhhdCB5b3UgaGF2ZQp0aGUgcmlnaHQgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb250YWluZWQgaW4gdGhpcyBsaWNlbnNlLiBZb3UgYWxzbyByZXByZXNlbnQKdGhhdCB5b3VyIHN1Ym1pc3Npb24gZG9lcyBub3QsIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlLCBpbmZyaW5nZSB1cG9uCmFueW9uZSdzIGNvcHlyaWdodC4KCklmIHRoZSBzdWJtaXNzaW9uIGNvbnRhaW5zIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8gbm90IGhvbGQgY29weXJpZ2h0LAp5b3UgcmVwcmVzZW50IHRoYXQgeW91IGhhdmUgb2J0YWluZWQgdGhlIHVucmVzdHJpY3RlZCBwZXJtaXNzaW9uIG9mIHRoZQpjb3B5cmlnaHQgb3duZXIgdG8gZ3JhbnQgRFNVIHRoZSByaWdodHMgcmVxdWlyZWQgYnkgdGhpcyBsaWNlbnNlLCBhbmQgdGhhdApzdWNoIHRoaXJkLXBhcnR5IG93bmVkIG1hdGVyaWFsIGlzIGNsZWFybHkgaWRlbnRpZmllZCBhbmQgYWNrbm93bGVkZ2VkCndpdGhpbiB0aGUgdGV4dCBvciBjb250ZW50IG9mIHRoZSBzdWJtaXNzaW9uLgoKSUYgVEhFIFNVQk1JU1NJT04gSVMgQkFTRUQgVVBPTiBXT1JLIFRIQVQgSEFTIEJFRU4gU1BPTlNPUkVEIE9SIFNVUFBPUlRFRApCWSBBTiBBR0VOQ1kgT1IgT1JHQU5JWkFUSU9OIE9USEVSIFRIQU4gRFNVLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEhBVkUKRlVMRklMTEVEIEFOWSBSSUdIVCBPRiBSRVZJRVcgT1IgT1RIRVIgT0JMSUdBVElPTlMgUkVRVUlSRUQgQlkgU1VDSApDT05UUkFDVCBPUiBBR1JFRU1FTlQuCgpEU1Ugd2lsbCBjbGVhcmx5IGlkZW50aWZ5IHlvdXIgbmFtZShzKSBhcyB0aGUgYXV0aG9yKHMpIG9yIG93bmVyKHMpIG9mIHRoZQpzdWJtaXNzaW9uLCBhbmQgd2lsbCBub3QgbWFrZSBhbnkgYWx0ZXJhdGlvbiwgb3RoZXIgdGhhbiBhcyBhbGxvd2VkIGJ5IHRoaXMKbGljZW5zZSwgdG8geW91ciBzdWJtaXNzaW9uLgo=