Sistema de conteo automático de flujo de personas por medio de visión artificial

Un problema típico en una ciudad tan poblada como lo es Bogotá es la densidad de personas que concurren a sitios de carácter público, muchos sitios carecen de sistemas de control de aforo de personas, debido al costo de implementación y mantenimiento, por ello se pensó en una solución a partir de di...

Full description

Autores:
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2016
Institución:
Universidad Distrital Francisco José de Caldas
Repositorio:
RIUD: repositorio U. Distrital
Idioma:
spa
OAI Identifier:
oai:repository.udistrital.edu.co:11349/23597
Acceso en línea:
http://hdl.handle.net/11349/23597
Palabra clave:
Procesamiento digital
visión artificial
Detección de peatones
OpenCV
Ingeniería en Control - Tesis y Disertaciones Académicas
Visión artificial
Procesamiento digital de imágenes
Visión por computador.
digital processing
artificial vision
Pedestrian Detection
OpenCV
Rights
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional
id UDISTRITA2_955b3bda18c508238428ad6a2093eb77
oai_identifier_str oai:repository.udistrital.edu.co:11349/23597
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Sistema de conteo automático de flujo de personas por medio de visión artificial
dc.title.titleenglish.spa.fl_str_mv Automatic system for people flow counting through artificial vision
title Sistema de conteo automático de flujo de personas por medio de visión artificial
spellingShingle Sistema de conteo automático de flujo de personas por medio de visión artificial
Procesamiento digital
visión artificial
Detección de peatones
OpenCV
Ingeniería en Control - Tesis y Disertaciones Académicas
Visión artificial
Procesamiento digital de imágenes
Visión por computador.
digital processing
artificial vision
Pedestrian Detection
OpenCV
title_short Sistema de conteo automático de flujo de personas por medio de visión artificial
title_full Sistema de conteo automático de flujo de personas por medio de visión artificial
title_fullStr Sistema de conteo automático de flujo de personas por medio de visión artificial
title_full_unstemmed Sistema de conteo automático de flujo de personas por medio de visión artificial
title_sort Sistema de conteo automático de flujo de personas por medio de visión artificial
dc.contributor.advisor.spa.fl_str_mv Pérez Pereira, Miguel Ricardo
dc.subject.spa.fl_str_mv Procesamiento digital
visión artificial
Detección de peatones
OpenCV
topic Procesamiento digital
visión artificial
Detección de peatones
OpenCV
Ingeniería en Control - Tesis y Disertaciones Académicas
Visión artificial
Procesamiento digital de imágenes
Visión por computador.
digital processing
artificial vision
Pedestrian Detection
OpenCV
dc.subject.lemb.spa.fl_str_mv Ingeniería en Control - Tesis y Disertaciones Académicas
Visión artificial
Procesamiento digital de imágenes
Visión por computador.
dc.subject.keyword.spa.fl_str_mv digital processing
artificial vision
Pedestrian Detection
OpenCV
description Un problema típico en una ciudad tan poblada como lo es Bogotá es la densidad de personas que concurren a sitios de carácter público, muchos sitios carecen de sistemas de control de aforo de personas, debido al costo de implementación y mantenimiento, por ello se pensó en una solución a partir de dispositivos no mecánicos. Desde el área del Procesamiento digital de señales y Visión artificial se propuso implementar un contador de personas versátil, capaz de trabajar en tiempo real, y sobre cualquier tipo de fuente de video, basado en soluciones de código abierto de tal forma que no haya restricción de ningún tipo a la hora de usar, modificar, o comercializar la solución. Se implementaron dos algoritmos diferentes para identificación de peatones, los algoritmos fueron programados sobre Python y librerías OpenCV donde mediante pruebas de desempeño se identificó el algoritmo más óptimo en cuanto a uso de recursos de hardware y precisión para realizar un conteo de personas sobre un entorno real controlado. Al final se tiene como resultado dos algoritmos de identificación que se pueden llevar a otras aplicaciones como seguridad y vigilancia sobre múltiples plataformas gracias al lenguaje de programación el cual puede ser portado fácilmente sin restricciones de ningún tipo.
publishDate 2016
dc.date.created.spa.fl_str_mv 2016-06-15
dc.date.accessioned.none.fl_str_mv 2020-05-05T16:42:59Z
dc.date.available.none.fl_str_mv 2020-05-05T16:42:59Z
dc.type.degree.spa.fl_str_mv Creación o Interpretación
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/23597
url http://hdl.handle.net/11349/23597
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/23597/7/GarciaPiraguaAndresMauricio2016.pdf.jpg
http://repository.udistrital.edu.co/bitstream/11349/23597/3/license_url
http://repository.udistrital.edu.co/bitstream/11349/23597/4/license_text
http://repository.udistrital.edu.co/bitstream/11349/23597/5/license_rdf
http://repository.udistrital.edu.co/bitstream/11349/23597/6/license.txt
http://repository.udistrital.edu.co/bitstream/11349/23597/1/GarciaPiraguaAndresMauricio2016.mp4
http://repository.udistrital.edu.co/bitstream/11349/23597/2/GarciaPiraguaAndresMauricio2016.pdf
bitstream.checksum.fl_str_mv 71e05fedce77354b9333edde8369022c
4afdbb8c545fd630ea7db775da747b2f
ef48816a10f2d45f2e2fee2f478e2faf
9da0b6dfac957114c6a7714714b86306
b204d61d4cc8bf0ee3a2b0e84c5755dd
60edef151a207036f201f72d3556d57d
156d1b7b5bb214b16fd449c13c4f15bb
bitstream.checksumAlgorithm.fl_str_mv MD5
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_ 1818102589699391488
spelling Pérez Pereira, Miguel RicardoMoreno Gómez, William AlexanderGarcía Piragua, Andrés Mauricio2020-05-05T16:42:59Z2020-05-05T16:42:59Z2016-06-15http://hdl.handle.net/11349/23597Un problema típico en una ciudad tan poblada como lo es Bogotá es la densidad de personas que concurren a sitios de carácter público, muchos sitios carecen de sistemas de control de aforo de personas, debido al costo de implementación y mantenimiento, por ello se pensó en una solución a partir de dispositivos no mecánicos. Desde el área del Procesamiento digital de señales y Visión artificial se propuso implementar un contador de personas versátil, capaz de trabajar en tiempo real, y sobre cualquier tipo de fuente de video, basado en soluciones de código abierto de tal forma que no haya restricción de ningún tipo a la hora de usar, modificar, o comercializar la solución. Se implementaron dos algoritmos diferentes para identificación de peatones, los algoritmos fueron programados sobre Python y librerías OpenCV donde mediante pruebas de desempeño se identificó el algoritmo más óptimo en cuanto a uso de recursos de hardware y precisión para realizar un conteo de personas sobre un entorno real controlado. Al final se tiene como resultado dos algoritmos de identificación que se pueden llevar a otras aplicaciones como seguridad y vigilancia sobre múltiples plataformas gracias al lenguaje de programación el cual puede ser portado fácilmente sin restricciones de ningún tipo.A typical problem in such populated as it is Bogotá city is the density of people attending sites public, many sites lack control systems capacity of people because the cost of implementation and maintenance, so think of a solution from non-mechanical devices. Since the area of digital signal processing and artificial vision we set to implement a versatile counter, able to work in real time, and any type of video source, based on open source solutions so that there is no restriction to use, modify, or implement in market the solution. Two different algorithms for identifying pedestrians were implemented, the algorithms are programmed in Python and libraries OpenCV where by performance tests the most optimal algorithm identified regarding use of hardware resources and precision for a count of people on a real environment checked. Eventually results in two identification algorithms that can lead to other applications such as security and surveillance on multiple platforms thanks to the programming language that can be easily ported without any restrictionspdfspaAtribución-NoComercial-SinDerivadas 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Procesamiento digitalvisión artificialDetección de peatonesOpenCVIngeniería en Control - Tesis y Disertaciones AcadémicasVisión artificialProcesamiento digital de imágenesVisión por computador.digital processingartificial visionPedestrian DetectionOpenCVSistema de conteo automático de flujo de personas por medio de visión artificialAutomatic system for people flow counting through artificial visionCreación o Interpretacióninfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fTHUMBNAILGarciaPiraguaAndresMauricio2016.pdf.jpgGarciaPiraguaAndresMauricio2016.pdf.jpgIM Thumbnailimage/jpeg7921http://repository.udistrital.edu.co/bitstream/11349/23597/7/GarciaPiraguaAndresMauricio2016.pdf.jpg71e05fedce77354b9333edde8369022cMD57open accessCC-LICENSElicense_urllicense_urltext/plain; charset=utf-849http://repository.udistrital.edu.co/bitstream/11349/23597/3/license_url4afdbb8c545fd630ea7db775da747b2fMD53open accesslicense_textlicense_texttext/html; charset=utf-822064http://repository.udistrital.edu.co/bitstream/11349/23597/4/license_textef48816a10f2d45f2e2fee2f478e2fafMD54open accesslicense_rdflicense_rdfapplication/rdf+xml; charset=utf-823148http://repository.udistrital.edu.co/bitstream/11349/23597/5/license_rdf9da0b6dfac957114c6a7714714b86306MD55metadata only accessLICENSElicense.txtlicense.txttext/plain; charset=utf-85896http://repository.udistrital.edu.co/bitstream/11349/23597/6/license.txtb204d61d4cc8bf0ee3a2b0e84c5755ddMD56open accessORIGINALGarciaPiraguaAndresMauricio2016.mp4GarciaPiraguaAndresMauricio2016.mp4Anexoapplication/octet-stream4252101http://repository.udistrital.edu.co/bitstream/11349/23597/1/GarciaPiraguaAndresMauricio2016.mp460edef151a207036f201f72d3556d57dMD51open accessGarciaPiraguaAndresMauricio2016.pdfGarciaPiraguaAndresMauricio2016.pdfTrabajo de gradoapplication/pdf2808406http://repository.udistrital.edu.co/bitstream/11349/23597/2/GarciaPiraguaAndresMauricio2016.pdf156d1b7b5bb214b16fd449c13c4f15bbMD52open access11349/23597oai:repository.udistrital.edu.co:11349/235972023-06-09 16:13:30.748open accessRepositorio Institucional Universidad Distrital - RIUDrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyAgREUgQ09OVEVOSURPUyBFTiBFTCBSRVBPU0lUT1JJTyBJTlNUSVRVQ0lPTkFMIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTApUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gIHBhcmEgcHVibGljYWNpw7NuIGRlIG9icmFzIGVuIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMgUklVRC4KCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCAgY29uZmllcm8gKGVyaW1vcykgYSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB1bmEgbGljZW5jaWEgcGFyYSB1c28gIG5vIGV4Y2x1c2l2YSwgbGltaXRhZGEgeSBncmF0dWl0YSBzb2JyZSBsYSBvYnJhIHF1ZSAgaW50ZWdyYXLDoSAgZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBhY3VlcmRvIGEgbGFzIHNpZ3VpZW50ZXMgcmVnbGFzLCAgbGFzIGN1YWxlcyBkZWNsYXJvIChhbW9zKSBjb25vY2VyIHkgYWNlcHRhcjoKCmEpIEVzdGFyw6EgdmlnZW50ZSBhIHBhcnRpciBkZSBsYSBmZWNoYSAgZW4gcXVlIHNlIGluY2x1eWEgIGVuIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgeSBoYXN0YSAgcG9yIHVuIHBsYXpvIGRlICBkaWV6ICgxMCkgIEHDsW9zLCAgcHJvcnJvZ2FibGUgIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyAgbGEgY3VhbCBwb2Ryw6EgICBkYXJzZSAgcG9yIHRlcm1pbmFkYSAgcHJldmlhICBzb2xpY2l0dWQgICBhIGxhIFVuaXZlcnNpZGFkIHBvciBlc2NyaXRvIGNvbiB1bmEgYW50ZWxhY2nDs24gZGUgZG9zICgyKSBtZXNlcyBhbnRlcyBkZWwgdmVuY2ltaWVudG8gZGVsIHBsYXpvICBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLiAgCgpiKSBMYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyBwb2Ryw6EgIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSAgcG9yIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwsICBMYSBVbml2ZXJzaWRhZCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsICBkb2N1bWVudG8gYXBhcmV6Y2EgcmVmZXJlbmNpYWRvIGVuIG1vdG9yZXMgZGUgYsO6c3F1ZWRhIG8gcmVwb3NpdG9yaW9zICBkaWZlcmVudGVzIGFsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwsIHVuYSB2ZXogZWwob3MpIGF1dG9yKGVzKSAgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUmVwb3NpdG9yaW8gZGUgbGEgVW5pdmVyc2lkYWQsIGRhZG8gcXVlICBsYSBtaXNtYSBzZXLDoSBwdWJsaWNhZGEgZW4gIEludGVybmV0LiAKCmMpIExhIGF1dG9yaXphY2nDs24gc2UgaGFjZSBhIHTDrXR1bG8gZ3JhdHVpdG8sIHBvciBsbyB0YW50bywgbG9zIGF1dG9yZXMgcmVudW5jaWFuIGEgcmVjaWJpciBiZW5lZmljaW8gYWxndW5vIHBvciBsYSBwdWJsaWNhY2nDs24sIGRpc3RyaWJ1Y2nDs24sIGNvbXVuaWNhY2nDs24gIHDDumJsaWNhIHkgY3VhbHF1aWVyIG90cm8gdXNvIHF1ZSBzZSBoYWdhIGVuIGxvcyB0w6lybWlub3MgZGUgbGEgcHJlc2VudGUgbGljZW5jaWEgeSBkZSBsYSBsaWNlbmNpYSAgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKSBMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgc29uICBvYnJhKHMpIG9yaWdpbmFsKGVzKSBzb2JyZSBsYSAgY3VhbChlcykgIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zICBkZXJlY2hvcyBkZSBhdXRvciwgYXN1bWVuIHRvdGFsIHJlc3BvbnNhYmlsaWRhZCBwb3IgZWwgY29udGVuaWRvIGRlIHN1IG9icmEgYW50ZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IGFudGUgdGVyY2Vyb3MuIEVuIHRvZG8gY2FzbyBsYSBVbml2ZXJzaWRhZCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkgTGEgIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHBvZHLDoSAgaW5jbHVpciBsYSBvYnJhIGVuIGxvcyDDrW5kaWNlcyB5IGJ1c2NhZG9yZXMgcXVlIGVzdGltZW4gbmVjZXNhcmlvcyBwYXJhIG1heGltaXphciBsYSB2aXNpYmlsaWRhZCBlbCB1c28geSBlbCBpbXBhY3RvIGRlIGxhIHByb2R1Y2Npw7NuIGNpZW50w61maWNhLCBhcnTDrXN0aWNhIHkgYWNhZMOpbWljYSBlbiBsYSBjb211bmlkYWQgbG9jYWwsIG5hY2lvbmFsIG8gaW50ZXJuYWNpb25hbC4gCgpmKSBMYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyBwb2Ryw6EgY29udmVydGlyIGxhIG9icmEgIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluICBkZSBzdSBwcmVzZXJ2YWNpw7NuIGVuIGVsIHRpZW1wbyBxdWUgbGEgcHJlc2VudGUgbGljZW5jaWEgeSBsYSBkZSBzdXMgcHLDs3Jyb2dhcy4KQ29uIGJhc2UgZW4gbG8gYW50ZXJpb3IgYXV0b3JpesOzIGxhIHB1YmxpY2FjacOzbiB5IGNvbnN1bHRhIGRlIGxhIG9icmEgIHRpdHVsYWRhIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KCiBBIGZhdm9yIGRlbCAgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5ICBkZSBzdXMgdXN1YXJpb3MsICAgY3V5byhzKSAgYXV0b3IoZXMpIHNvbjogCkF1dG9yCUFwZWxsaWRvcwlOb21icmVzCjEJCQoyCQkKMwkJCgphKSBBdXRvcml6byBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGF1dG9yaXphZG9zIGVuIGxvcyBsaXRlcmFsZXMgYW50ZXJpb3JlcywgIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMgZW4gbGFzIOKAnENvbmRpY2lvbmVzIGRlIHVzbyBkZSBlc3RyaWN0byBjdW1wbGltaWVudG/igJ0gZGUgbG9zIHJlY3Vyc29zIHB1YmxpY2Fkb3MgZW4gUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBSSVVELCBjdXlvIHRleHRvIGNvbXBsZXRvIHNlIHB1ZWRlIGNvbnN1bHRhciBlbiBodHRwOi8vcmVwb3NpdG9yeS51ZGlzdHJpdGFsLmVkdS5jby8KCmIpIENvbm96Y28geSBhY2VwdG8gcXVlIG90b3JnbyB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIG9idGVuaWRvIHVuYSBjb3BpYS4KCmMpICBNYW5pZmllc3RvIG1pIHRvdGFsIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSB1c28geSBwdWJsaWNhY2nDs24gZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyBxdWUgc2UgZGVzY3JpYmVuIHkgZXhwbGljYW4gZW4gZWwgcHJlc2VudGUgZG9jdW1lbnRvLgoKZykgUXVlIGNvbm96Y28gICBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyByZWxhdGl2byBhIHByb3BpZWRhZCAgaW50ZWxlY3R1YWwgcmVndWxhZGEgcG9yIGVsIEFjdWVyZG8gMDA0IGRlIDIwMTIgZGVsIENTVSwgQWN1ZXJkbyAwMjMgZGUgMjAxMiBkZWwgQ1NVIHNvYnJlIFBvbMOtdGljYSBFZGl0b3JpYWwsIEFjdWVyZG8gMDI2ICBkZWwgMzEgZGUganVsaW8gZGUgMjAxMiBzb2JyZSBlbCBwcm9jZWRpbWllbnRvIHBhcmEgbGEgcHVibGljYWNpw7NuIGRlIHRlc2lzIGRlIHBvc3RncmFkbyBkZSBsb3MgZXN0dWRpYW50ZXMgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsICBBY3VlcmRvIDAzMCBkZWwgMDMgZGUgZGljaWVtYnJlIGRlIDIwMTMgcG9yIG1lZGlvIGRlbCBjdWFsIHNlIGNyZWEgZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0by4gRXN0b3MgZG9jdW1lbnRvcyBwb2Ryw6FuIHNlciBjb25zdWx0YWRvcyB5IGRlc2NhcmdhZG9zIGVuIGVsIHBvcnRhbCB3ZWIgZGUgbGEgYmlibGlvdGVjYSBodHRwOi8vc2lzdGVtYWRlYmlibGlvdGVjYXMudWRpc3RyaXRhbC5lZHUuY28vICAKClNJIEVMIERPQ1VNRU5UTyBTRSBCQVNBIEVOIFVOIFRSQUJBSk8gUVVFIEhBIFNJRE8gUEFUUk9DSU5BRE8gTyBBUE9ZQURPIFBPUiBVTkEgQUdFTkNJQSBPIFVOQSBPUkdBTklaQUNJw5NOLCBDT04gRVhDRVBDScOTTiBERSBMQSBVTklWRVJTSURBRCBESVNUUklUQUwgRlJBTkNJU0NPIEpPU0UgREUgQ0FMREFTLCBMT1MgQVVUT1JFUyBHQVJBTlRJWkFOIFFVRSBTRSBIQSBDVU1QTElETyBDT04gTE9TIApERVJFQ0hPUyBZIE9CTElHQUNJT05FUyBSRVFVRVJJRE9TIFBPUiBFTCBSRVNQRUNUSVZPIENPTlRSQVRPIE8gQUNVRVJETy4KRW4gY29uc3RhbmNpYSBkZSBsbyBhbnRlcmlvciwgZmlybW8gKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50byBhIGxvcyAKCkZJUk1BIERFIExPUyBUSVRVTEFSRVMgREUgREVSRUNIT1MgREUgQVVUT1IKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIEF1dG9yIChlcyk6CkF1dG9yCUNvcnJlbyBFbGVjdHLDs25pY28gCjEJCjIJCjMJCgpOb3RhOiBFbiBjYXNvIHF1ZSBubyBlc3TDqSBkZSBhY3VlcmRvIGNvbiBsYXMgY29uZGljaW9uZXMgZGUgbGEgcHJlc2VudGUgbGljZW5jaWEsIGp1c3RpZmlxdWUgbG9zIG1vdGl2b3MgcG9yIGxvcyBjdWFsZXMgZWwgZG9jdW1lbnRvIHkgc3VzIGFuZXhvcyBubyBwdWVkZW4gc2VyIHB1YmxpY2Fkb3MgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyBSSVVECg==