Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos

En este proyecto se lleva a cabo el desarrollo de un procedimiento basado en el algoritmo Faster RCNN ResNet 101 para la clasificación de un inventario y el registro del mismo en una base de datos, además para poder comparar los resultados obtenidos se guardó una porción de base de datos para su pos...

Full description

Autores:
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2021
Institución:
Universidad Distrital Francisco José de Caldas
Repositorio:
RIUD: repositorio U. Distrital
Idioma:
spa
OAI Identifier:
oai:repository.udistrital.edu.co:11349/29099
Acceso en línea:
http://hdl.handle.net/11349/29099
Palabra clave:
Inventario
Aprendizaje de máquina
Redes convolucionales
Detección de objetos
Inteligencia computacional
Ingeniería Electrónica - Tesis y disertaciones académicas
Redes neurales (Computadores)
Inteligencia artificial
Complejidad computacional
Inventarios - Automatización
Procesamiento electrónico de datos
Inventary
Convolutional network
Machine learning
Object detection
Computacional intelligence
Rights
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional
id UDISTRITA2_1544665d6482165e39f145f696f86b17
oai_identifier_str oai:repository.udistrital.edu.co:11349/29099
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
dc.title.titleenglish.spa.fl_str_mv Inventory classifier through a neuronal network convolutional with synchronization to a database
title Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
spellingShingle Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
Inventario
Aprendizaje de máquina
Redes convolucionales
Detección de objetos
Inteligencia computacional
Ingeniería Electrónica - Tesis y disertaciones académicas
Redes neurales (Computadores)
Inteligencia artificial
Complejidad computacional
Inventarios - Automatización
Procesamiento electrónico de datos
Inventary
Convolutional network
Machine learning
Object detection
Computacional intelligence
title_short Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
title_full Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
title_fullStr Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
title_full_unstemmed Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
title_sort Clasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datos
dc.contributor.advisor.none.fl_str_mv Gaona-Barrera, Andres
dc.subject.spa.fl_str_mv Inventario
Aprendizaje de máquina
Redes convolucionales
Detección de objetos
Inteligencia computacional
topic Inventario
Aprendizaje de máquina
Redes convolucionales
Detección de objetos
Inteligencia computacional
Ingeniería Electrónica - Tesis y disertaciones académicas
Redes neurales (Computadores)
Inteligencia artificial
Complejidad computacional
Inventarios - Automatización
Procesamiento electrónico de datos
Inventary
Convolutional network
Machine learning
Object detection
Computacional intelligence
dc.subject.lemb.spa.fl_str_mv Ingeniería Electrónica - Tesis y disertaciones académicas
Redes neurales (Computadores)
Inteligencia artificial
Complejidad computacional
Inventarios - Automatización
Procesamiento electrónico de datos
dc.subject.keyword.spa.fl_str_mv Inventary
Convolutional network
Machine learning
Object detection
Computacional intelligence
description En este proyecto se lleva a cabo el desarrollo de un procedimiento basado en el algoritmo Faster RCNN ResNet 101 para la clasificación de un inventario y el registro del mismo en una base de datos, además para poder comparar los resultados obtenidos se guardó una porción de base de datos para su posvalidación. El algoritmo Faster RCNN ResNet 101 ha sido implementado en problemas de detección de objetos, obteniendo buenos resultados con modelos de baja complejidad y mediana complejidad, motivo por el cual se ha generado un creciente interés en aplicar este algoritmo en detección y clasificación de objetos. Además, no se presenta aplicación del algoritmo en problemas de inventario de tiendas, por lo cual es el motivo del presente proyecto. Para llevar a cabo la clasificación de productos, es necesario realizar la recolección de una base de datos, teniendo en cuenta la división para el entrenamiento, validación y posvalidación. Esta base de datos se obtiene por medio de dos cámaras profesionales etiquetando las imágenes con Labelimg y procesando las imágenes para aumentar la información subministrada por la base de datos. Luego se seleccionan los parámetros de entrada del sistema detector de objetos. Con base al 70% de la base de datos, se lleva a cabo el entrenamiento y validación del modelo, por medio de redes convolucionales y redes de propuestas de relación, por medio del modelo preentrenado Faster RCNN ResNet 101. Se realiza una variación de un parámetro propio “coeficiente de aprendizaje” para encontrar el modelo clasificador. Los resultados muestran que es posible realizar una detección de objetos por medio del modelo preentrenado con undesempeño aproximado del 96.2 %, pero es necesario realizar una base de datos con las posibles fallas humanas, como la mayor cantidad de ruidos con el fin de obtener un modelo eficiente, dado que el desempeño del modelo tiene una relación directa con los ruidos en la base de datos. En cuanto al conteo de los productos, se generó un módulo a la salida del modelo de detección de objetos, el cual muestra el número de productos por clase con una eficacia del 88.6%, Finalmente se subieron los datos FireBase, una base de datos dinámica con diversas herramientas de conexión en plataformas.
publishDate 2021
dc.date.created.none.fl_str_mv 2021-10-25
dc.date.accessioned.none.fl_str_mv 2022-05-24T20:24:14Z
dc.date.available.none.fl_str_mv 2022-05-24T20:24:14Z
dc.type.degree.spa.fl_str_mv Monografía
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/bachelorThesis
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_7a1f
format http://purl.org/coar/resource_type/c_7a1f
dc.identifier.uri.none.fl_str_mv http://hdl.handle.net/11349/29099
url http://hdl.handle.net/11349/29099
dc.language.iso.spa.fl_str_mv spa
language spa
dc.rights.*.fl_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional
dc.rights.coar.fl_str_mv http://purl.org/coar/access_right/c_abf2
dc.rights.uri.*.fl_str_mv http://creativecommons.org/licenses/by-nc-nd/4.0/
dc.rights.acceso.spa.fl_str_mv Abierto (Texto Completo)
rights_invalid_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional
http://creativecommons.org/licenses/by-nc-nd/4.0/
Abierto (Texto Completo)
http://purl.org/coar/access_right/c_abf2
dc.format.mimetype.spa.fl_str_mv pdf
institution Universidad Distrital Francisco José de Caldas
bitstream.url.fl_str_mv http://repository.udistrital.edu.co/bitstream/11349/29099/1/Avance%20monografia%2004oct2021.pdf
http://repository.udistrital.edu.co/bitstream/11349/29099/9/Licencia%20de%20uso%20y%20publicacion%20editable.pdf
http://repository.udistrital.edu.co/bitstream/11349/29099/10/license.txt
http://repository.udistrital.edu.co/bitstream/11349/29099/7/license_rdf
http://repository.udistrital.edu.co/bitstream/11349/29099/11/Avance%20monografia%2004oct2021.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/29099/12/Licencia%20de%20uso%20y%20publicacion%20editable.pdf.jpg
bitstream.checksum.fl_str_mv dbc9126e1d3e3c578b70345ccfcec431
781357cac458fc53c973d05211381b20
997daf6c648c962d566d7b082dac908d
217700a34da79ed616c2feb68d4c5e06
daeac21488ab998dfdc9f87251d0ec79
7804b0cc77e5cdf4ec9c9288f2a97896
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Institucional Universidad Distrital - RIUD
repository.mail.fl_str_mv repositorio@udistrital.edu.co
_version_ 1803712671850168320
spelling Gaona-Barrera, Andreswill be generated::orcid::0000-0002-3966-5646600Avella Castro, Juan CamiloMendéz Hernández, Álvaro Javier2022-05-24T20:24:14Z2022-05-24T20:24:14Z2021-10-25http://hdl.handle.net/11349/29099En este proyecto se lleva a cabo el desarrollo de un procedimiento basado en el algoritmo Faster RCNN ResNet 101 para la clasificación de un inventario y el registro del mismo en una base de datos, además para poder comparar los resultados obtenidos se guardó una porción de base de datos para su posvalidación. El algoritmo Faster RCNN ResNet 101 ha sido implementado en problemas de detección de objetos, obteniendo buenos resultados con modelos de baja complejidad y mediana complejidad, motivo por el cual se ha generado un creciente interés en aplicar este algoritmo en detección y clasificación de objetos. Además, no se presenta aplicación del algoritmo en problemas de inventario de tiendas, por lo cual es el motivo del presente proyecto. Para llevar a cabo la clasificación de productos, es necesario realizar la recolección de una base de datos, teniendo en cuenta la división para el entrenamiento, validación y posvalidación. Esta base de datos se obtiene por medio de dos cámaras profesionales etiquetando las imágenes con Labelimg y procesando las imágenes para aumentar la información subministrada por la base de datos. Luego se seleccionan los parámetros de entrada del sistema detector de objetos. Con base al 70% de la base de datos, se lleva a cabo el entrenamiento y validación del modelo, por medio de redes convolucionales y redes de propuestas de relación, por medio del modelo preentrenado Faster RCNN ResNet 101. Se realiza una variación de un parámetro propio “coeficiente de aprendizaje” para encontrar el modelo clasificador. Los resultados muestran que es posible realizar una detección de objetos por medio del modelo preentrenado con undesempeño aproximado del 96.2 %, pero es necesario realizar una base de datos con las posibles fallas humanas, como la mayor cantidad de ruidos con el fin de obtener un modelo eficiente, dado que el desempeño del modelo tiene una relación directa con los ruidos en la base de datos. En cuanto al conteo de los productos, se generó un módulo a la salida del modelo de detección de objetos, el cual muestra el número de productos por clase con una eficacia del 88.6%, Finalmente se subieron los datos FireBase, una base de datos dinámica con diversas herramientas de conexión en plataformas.In this project, the development of a procedure based on the algorithm is carried out Faster RCNN ResNet 101 for classifying an inventory and recording it in a database, in addition to being able to compare the results obtained, adatabase portion for post-validation. The Faster RCNN ResNet 101 algorithm has been implemented in detection problems of objects, obtaining good results with models of low complexity and medium complexity, which is why there has been a growing interest in applying this algorith in detection and classification of objects. Furthermore, no application of the algorithm is presented in Store inventory problems, which is why it is the reason for this project. To carry out the classification of products, it is necessary to carry out the collection of a database, taking into account the division for training, validation and post-validation. This database is obtained by means of two professional cameras by labeling the images with Labelimg and processing the images to increase the information provided by the database. The input parameters of the object detection system are then selected. With base 70% of the database, the training and validation of the model is carried out, for through convolutional networks and networks of relationship proposals, through the model Pretrained Faster RCNN ResNet 101. A variation of an own parameter "learning coefficient" is carried out to find the classifier model. The results show that it is possible to perform a detection of objects through the pretrained model with an approximate performance of 96.2%, but it is necessary to make a database with possible human failures, such as the greater amount of noise in order to obtain an efficient model, since the performance of the model has a direct relationship with the noises in the database. Regarding the counting of the products, a module was generated at the output of the object detection, which shows the number of products per class with an efficiency of the 88.6%, Finally the data was uploaded to FireBase, a dynamic database with various connection tools on platforms.pdfspaAtribución-NoComercial-SinDerivadas 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2InventarioAprendizaje de máquinaRedes convolucionalesDetección de objetosInteligencia computacionalIngeniería Electrónica - Tesis y disertaciones académicasRedes neurales (Computadores)Inteligencia artificialComplejidad computacionalInventarios - AutomatizaciónProcesamiento electrónico de datosInventaryConvolutional networkMachine learningObject detectionComputacional intelligenceClasificador de inventario por medio de una red neuronal convolucional con sincronización a una base de datosInventory classifier through a neuronal network convolutional with synchronization to a databaseMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fORIGINALAvance monografia 04oct2021.pdfAvance monografia 04oct2021.pdfAvellaCastroJuan_MéndezÁlvaro2021.pdfapplication/pdf3382853http://repository.udistrital.edu.co/bitstream/11349/29099/1/Avance%20monografia%2004oct2021.pdfdbc9126e1d3e3c578b70345ccfcec431MD51open accessLicencia de uso y publicacion editable.pdfLicencia de uso y publicacion editable.pdfLicencia de uso y publicaciónapplication/pdf816168http://repository.udistrital.edu.co/bitstream/11349/29099/9/Licencia%20de%20uso%20y%20publicacion%20editable.pdf781357cac458fc53c973d05211381b20MD59metadata only accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/29099/10/license.txt997daf6c648c962d566d7b082dac908dMD510open accessCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8811http://repository.udistrital.edu.co/bitstream/11349/29099/7/license_rdf217700a34da79ed616c2feb68d4c5e06MD57open accessTHUMBNAILAvance monografia 04oct2021.pdf.jpgAvance monografia 04oct2021.pdf.jpgIM Thumbnailimage/jpeg6422http://repository.udistrital.edu.co/bitstream/11349/29099/11/Avance%20monografia%2004oct2021.pdf.jpgdaeac21488ab998dfdc9f87251d0ec79MD511open accessLicencia de uso y publicacion editable.pdf.jpgLicencia de uso y publicacion editable.pdf.jpgIM Thumbnailimage/jpeg13227http://repository.udistrital.edu.co/bitstream/11349/29099/12/Licencia%20de%20uso%20y%20publicacion%20editable.pdf.jpg7804b0cc77e5cdf4ec9c9288f2a97896MD512open access11349/29099oai:repository.udistrital.edu.co:11349/290992023-06-13 14:07:27.671open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK