Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados

La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes s...

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/26732
Acceso en línea:
http://hdl.handle.net/11349/26732
Palabra clave:
Reconocimiento facial
OpenCV
FaceRecognition
Video Vigilancia
Biometría
Procesamiento de Imagen
Ingeniería en Control - Tesis y disertaciones académicas
Reconocimiento de rostros humanos (Informática)
Identificación biométrica
Vigilancia electrónica
Videovigilancia - Seguridad ciudadana
Software libre - Implementación
Python (Lenguaje de programación de computadores)
Face recognition
OpenCV
Biometrics
Video surveillance
Image Processing
Rights
License
Atribución-NoComercial 4.0 Internacional
id UDISTRITA2_d2bc381d450c225d51e08d4b22b34f65
oai_identifier_str oai:repository.udistrital.edu.co:11349/26732
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
dc.title.titleenglish.spa.fl_str_mv Face detection, extraction and recognition system in scenes with a maximum of 4 people, for residential video surveillance applications using free software tools, indoors
title Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
spellingShingle Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
Reconocimiento facial
OpenCV
FaceRecognition
Video Vigilancia
Biometría
Procesamiento de Imagen
Ingeniería en Control - Tesis y disertaciones académicas
Reconocimiento de rostros humanos (Informática)
Identificación biométrica
Vigilancia electrónica
Videovigilancia - Seguridad ciudadana
Software libre - Implementación
Python (Lenguaje de programación de computadores)
Face recognition
OpenCV
Biometrics
Video surveillance
Image Processing
title_short Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
title_full Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
title_fullStr Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
title_full_unstemmed Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
title_sort Sistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerrados
dc.contributor.advisor.spa.fl_str_mv Pérez Pereira, Miguel Ricardo
dc.subject.spa.fl_str_mv Reconocimiento facial
OpenCV
FaceRecognition
Video Vigilancia
Biometría
Procesamiento de Imagen
topic Reconocimiento facial
OpenCV
FaceRecognition
Video Vigilancia
Biometría
Procesamiento de Imagen
Ingeniería en Control - Tesis y disertaciones académicas
Reconocimiento de rostros humanos (Informática)
Identificación biométrica
Vigilancia electrónica
Videovigilancia - Seguridad ciudadana
Software libre - Implementación
Python (Lenguaje de programación de computadores)
Face recognition
OpenCV
Biometrics
Video surveillance
Image Processing
dc.subject.lemb.spa.fl_str_mv Ingeniería en Control - Tesis y disertaciones académicas
Reconocimiento de rostros humanos (Informática)
Identificación biométrica
Vigilancia electrónica
Videovigilancia - Seguridad ciudadana
Software libre - Implementación
Python (Lenguaje de programación de computadores)
dc.subject.keyword.spa.fl_str_mv Face recognition
OpenCV
Biometrics
Video surveillance
Image Processing
description La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes serán afectados por personas inescrupulosas, el desarrollo de sistemas de seguridad ha avanzado mucho, y uno de los campos más nuevos y que ha manifestado este avance es el reconocimiento facial, dicho campo, proporciona la capacidad de detectar y reconocer rostros humanos en video automáticamente, generando una señal de alarma o control, ya sea para alertar a la persona o permitirle el ingreso. Los desarrollos actuales que cuentan con la característica de reconocer múltiples rostros en video, suelen tener elevados costos, debido a que son implementados en plataformas que no están basadas en software libre, lo que aumenta el costo debido a licencias de pago por uso, Además de esto, se presenta una escasez de estudios que demuestren cuán eficiente es un sistema que esté desarrollado en software libre, y que cuente con la detección facial al interactuar con múltiples rostros, que sea confiable para la protección de bienes, y que cuente con la capacidad de identificar personas que deseen acceder a lugares de residencia sin contar con la respectiva autorización. En esta investigación se encontrará en primera instancia una contextualización teórica de los tipos de algoritmos y librerías para detección y reconocimiento facial que existen en Python, dichas librerías son las denominadas OpenCV y Face-Recognition, en vista de que no se tiene un estudio que muestre distancia máxima de detección, tiempos de ejecución y ángulos de operación, entre otros, en esta investigación se decidió hacer pruebas a ambos algoritmos para determinar cuál es más efectivo o cuál se ajusta mejor al sistemas de videovigilancia propuesto en esta investigación. A continuación, se mostrará el algoritmo propuesto por los investigadores el cual fusiona diferentes programas y librerías que permiten la detección, extracción y reconocimiento de múltiples rostros en tiempo real, además, se mostrará la interfaz gráfica de usuario (GUI) que permite la total manipulación de este sistema, por último, se mostrará las pruebas que realizaron al sistema en dos ambientes diferentes, uno residencial y uno comercial. Es de aclarar, que todo el sistema fue desarrollado en el lenguaje de programación Python el cual es libre.
publishDate 2021
dc.date.accessioned.none.fl_str_mv 2021-09-30T17:32:47Z
dc.date.available.none.fl_str_mv 2021-09-30T17:32:47Z
dc.date.created.spa.fl_str_mv 2021-09-23
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/26732
url http://hdl.handle.net/11349/26732
dc.language.iso.spa.fl_str_mv spa
language spa
dc.rights.*.fl_str_mv Atribución-NoComercial 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/4.0/
dc.rights.acceso.spa.fl_str_mv Abierto (Texto Completo)
rights_invalid_str_mv Atribución-NoComercial 4.0 Internacional
http://creativecommons.org/licenses/by-nc/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/26732/1/CortesMartinezCristianSteven2021.pdf
http://repository.udistrital.edu.co/bitstream/11349/26732/5/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf
http://repository.udistrital.edu.co/bitstream/11349/26732/6/license_rdf
http://repository.udistrital.edu.co/bitstream/11349/26732/7/license.txt
http://repository.udistrital.edu.co/bitstream/11349/26732/8/CortesMartinezCristianSteven2021.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/26732/9/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg
bitstream.checksum.fl_str_mv 7fde0e72168ba20863f3690c44df6146
68a8c170d25595327aeb3fd6068a1299
40513e59b5d1327fcca263d3c2a2e44a
997daf6c648c962d566d7b082dac908d
809a75485ec435d87e482abf4a94db2d
70bb0d6c6e1c565770ac7eb0d0b85662
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_ 1814110982112280576
spelling Pérez Pereira, Miguel RicardoCortés Martínez, Cristian StevenVásquez Bohórquez, David Fernando2021-09-30T17:32:47Z2021-09-30T17:32:47Z2021-09-23http://hdl.handle.net/11349/26732La protección de las personas y sus bienes es un punto que se busca mejorar día tras día, el avance de la tecnología permite que el campo de la seguridad electrónica sea cada vez más efectiva para brindar un confort a los usuarios, quitando esa carga mental de estar pensando que ellos o sus bienes serán afectados por personas inescrupulosas, el desarrollo de sistemas de seguridad ha avanzado mucho, y uno de los campos más nuevos y que ha manifestado este avance es el reconocimiento facial, dicho campo, proporciona la capacidad de detectar y reconocer rostros humanos en video automáticamente, generando una señal de alarma o control, ya sea para alertar a la persona o permitirle el ingreso. Los desarrollos actuales que cuentan con la característica de reconocer múltiples rostros en video, suelen tener elevados costos, debido a que son implementados en plataformas que no están basadas en software libre, lo que aumenta el costo debido a licencias de pago por uso, Además de esto, se presenta una escasez de estudios que demuestren cuán eficiente es un sistema que esté desarrollado en software libre, y que cuente con la detección facial al interactuar con múltiples rostros, que sea confiable para la protección de bienes, y que cuente con la capacidad de identificar personas que deseen acceder a lugares de residencia sin contar con la respectiva autorización. En esta investigación se encontrará en primera instancia una contextualización teórica de los tipos de algoritmos y librerías para detección y reconocimiento facial que existen en Python, dichas librerías son las denominadas OpenCV y Face-Recognition, en vista de que no se tiene un estudio que muestre distancia máxima de detección, tiempos de ejecución y ángulos de operación, entre otros, en esta investigación se decidió hacer pruebas a ambos algoritmos para determinar cuál es más efectivo o cuál se ajusta mejor al sistemas de videovigilancia propuesto en esta investigación. A continuación, se mostrará el algoritmo propuesto por los investigadores el cual fusiona diferentes programas y librerías que permiten la detección, extracción y reconocimiento de múltiples rostros en tiempo real, además, se mostrará la interfaz gráfica de usuario (GUI) que permite la total manipulación de este sistema, por último, se mostrará las pruebas que realizaron al sistema en dos ambientes diferentes, uno residencial y uno comercial. Es de aclarar, que todo el sistema fue desarrollado en el lenguaje de programación Python el cual es libre.The protection of people and their property is a point that seeks to improve day after day, the advancement of technology allows the field of electronic security to be increasingly effective to provide comfort to users, removing that mental burden of be thinking that they or their property will be affected by unscrupulous people, the development of security systems has advanced a lot, and one of the newest fields and that has manifested this advance is facial recognition, said field, provides the ability to detect and recognize human faces on video automatically, generating an alarm or control signal, either to alert the person or allow entry. Current developments that have the feature of recognizing multiple faces on video tend to have high costs, because they are implemented on platforms that are not based on free software, which increases the cost due to pay-per-use licenses. This, there is a shortage of studies that demonstrate how efficient is a system that is developed in free software, and that has facial detection when interacting with multiple faces, that is reliable for the protection of assets, and that has the capacity to identify people who wish to access places of residence without having the respective authorization. In this research, a theoretical contextualization of the types of algorithms and libraries for facial detection and recognition that exist in Python will be found in the first instance, these libraries are called OpenCV and Face-Recognition, since there is no study that shows maximum detection distance, execution times and operating angles, among others, in this investigation it was decided to test both algorithms to determine which one is more effective or which one best fits the video surveillance systems proposed in this investigation. Next, the algorithm proposed by the researchers will be shown, which merges different programs and libraries that allow the detection, extraction and recognition of multiple faces in real time, in addition, the graphical user interface (GUI) that allows total manipulation will be displayed. of this system, finally, the tests carried out on the system in two different environments, one residential and one commercial, will be shown. It should be clarified that the entire system was developed in the Python programming language, which is free.pdfspaAtribución-NoComercial 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Reconocimiento facialOpenCVFaceRecognitionVideo VigilanciaBiometríaProcesamiento de ImagenIngeniería en Control - Tesis y disertaciones académicasReconocimiento de rostros humanos (Informática)Identificación biométricaVigilancia electrónicaVideovigilancia - Seguridad ciudadanaSoftware libre - ImplementaciónPython (Lenguaje de programación de computadores)Face recognitionOpenCVBiometricsVideo surveillanceImage ProcessingSistema de detección, extracción y reconocimiento de rostros en escenas de máximo 4 personas, para aplicaciones de videovigilancia residencial utilizando herramientas de software libre, en lugares cerradosFace detection, extraction and recognition system in scenes with a maximum of 4 people, for residential video surveillance applications using free software tools, indoorsMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fORIGINALCortesMartinezCristianSteven2021.pdfCortesMartinezCristianSteven2021.pdfTrabajo de gradoapplication/pdf2763013http://repository.udistrital.edu.co/bitstream/11349/26732/1/CortesMartinezCristianSteven2021.pdf7fde0e72168ba20863f3690c44df6146MD51open accessLicencia y autorización de los autores para publicar.pdfLicencia y autorización de los autores para publicar.pdfapplication/pdf340221http://repository.udistrital.edu.co/bitstream/11349/26732/5/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf68a8c170d25595327aeb3fd6068a1299MD55metadata only accessCC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8920http://repository.udistrital.edu.co/bitstream/11349/26732/6/license_rdf40513e59b5d1327fcca263d3c2a2e44aMD56open accessLICENSElicense.txtlicense.txttext/plain; charset=utf-87167http://repository.udistrital.edu.co/bitstream/11349/26732/7/license.txt997daf6c648c962d566d7b082dac908dMD57open accessTHUMBNAILCortesMartinezCristianSteven2021.pdf.jpgCortesMartinezCristianSteven2021.pdf.jpgIM Thumbnailimage/jpeg7793http://repository.udistrital.edu.co/bitstream/11349/26732/8/CortesMartinezCristianSteven2021.pdf.jpg809a75485ec435d87e482abf4a94db2dMD58open accessLicencia y autorización de los autores para publicar.pdf.jpgLicencia y autorización de los autores para publicar.pdf.jpgIM Thumbnailimage/jpeg13139http://repository.udistrital.edu.co/bitstream/11349/26732/9/Licencia%20y%20autorizaci%c3%b3n%20de%20los%20autores%20para%20publicar.pdf.jpg70bb0d6c6e1c565770ac7eb0d0b85662MD59open access11349/26732oai:repository.udistrital.edu.co:11349/267322023-12-19 12:23:00.914metadata only accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK