Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes

Este documento describe el proceso para realizar la identificación biométrica de una persona a partir de imágenes de la estructura} vascular de los dedos utilizando procesamiento digital de imágenes e inteligencia computacional. Se explica el preprocesamiento de la imagen que consiste en una serie d...

Full description

Autores:
Tijaro Aguilar, Laura Alejandra
Rincón Aldana, Edwin Esdiver
Tipo de recurso:
Trabajo de grado de pregrado
Fecha de publicación:
2023
Institución:
Universidad Distrital Francisco José de Caldas
Repositorio:
RIUD: repositorio U. Distrital
Idioma:
spa
OAI Identifier:
oai:repository.udistrital.edu.co:11349/33145
Acceso en línea:
http://hdl.handle.net/11349/33145
Palabra clave:
Identificación biométrica
Procesamiento digital de imágenes
Red neuronal convolucional
Descomposición de wavelet
Supresión de no máximos
Estructura vascular
Ingeniería Electrónica -- Tesis y disertaciones académicas
Biometría
Identificación vascular
Procesamiento digital de imágenes
Biometric identification
Digital image processing
Convolutional neural network
Wavelet decomposition
Non-maximum suppression
Vascular Structure
Rights
License
Attribution-NonCommercial-NoDerivatives 4.0 Internacional
id UDISTRITA2_9b8a9d9a3b226022d242c27ffd480426
oai_identifier_str oai:repository.udistrital.edu.co:11349/33145
network_acronym_str UDISTRITA2
network_name_str RIUD: repositorio U. Distrital
repository_id_str
dc.title.spa.fl_str_mv Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
dc.title.titleenglish.spa.fl_str_mv Biometric identification of individuals from images of finger vascular structure using digital image processing.
title Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
spellingShingle Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
Identificación biométrica
Procesamiento digital de imágenes
Red neuronal convolucional
Descomposición de wavelet
Supresión de no máximos
Estructura vascular
Ingeniería Electrónica -- Tesis y disertaciones académicas
Biometría
Identificación vascular
Procesamiento digital de imágenes
Biometric identification
Digital image processing
Convolutional neural network
Wavelet decomposition
Non-maximum suppression
Vascular Structure
title_short Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
title_full Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
title_fullStr Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
title_full_unstemmed Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
title_sort Identificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenes
dc.creator.fl_str_mv Tijaro Aguilar, Laura Alejandra
Rincón Aldana, Edwin Esdiver
dc.contributor.advisor.none.fl_str_mv Herrera García, Rodrigo Javier
dc.contributor.author.none.fl_str_mv Tijaro Aguilar, Laura Alejandra
Rincón Aldana, Edwin Esdiver
dc.contributor.orcid.spa.fl_str_mv Herrera García, Rodrigo Javier [0000-0002-7972-5746]
dc.subject.spa.fl_str_mv Identificación biométrica
Procesamiento digital de imágenes
Red neuronal convolucional
Descomposición de wavelet
Supresión de no máximos
Estructura vascular
topic Identificación biométrica
Procesamiento digital de imágenes
Red neuronal convolucional
Descomposición de wavelet
Supresión de no máximos
Estructura vascular
Ingeniería Electrónica -- Tesis y disertaciones académicas
Biometría
Identificación vascular
Procesamiento digital de imágenes
Biometric identification
Digital image processing
Convolutional neural network
Wavelet decomposition
Non-maximum suppression
Vascular Structure
dc.subject.lemb.spa.fl_str_mv Ingeniería Electrónica -- Tesis y disertaciones académicas
Biometría
Identificación vascular
Procesamiento digital de imágenes
dc.subject.keyword.spa.fl_str_mv Biometric identification
Digital image processing
Convolutional neural network
Wavelet decomposition
Non-maximum suppression
Vascular Structure
description Este documento describe el proceso para realizar la identificación biométrica de una persona a partir de imágenes de la estructura} vascular de los dedos utilizando procesamiento digital de imágenes e inteligencia computacional. Se explica el preprocesamiento de la imagen que consiste en una serie de pasos para obtener la región de interés, incluyendo la detección de bordes con el algoritmo de Canny, dilatación de la imagen, rellenado de la imagen y eliminación de píxeles espurios con operadores lógicos XOR y AND, y cierre de la imagen. Además, se describen dos técnicas para mejorar la calidad de la imagen preprocesada: el uso de un filtro Gaussiano para eliminar líneas de ruido y el uso del histograma de ecualización adaptativo limitado en contraste para mejorar el contraste de la imagen. Para el emparejamiento de las imágenes con las personas se utiliza una red neuronal convolucional. Se realiza una limitación del contraste para resaltar el patrón vascular en las imágenes y se aplica un algoritmo de supresión de no máximos para encontrar los píxeles con la mayor intensidad en la imagen. Luego, se descompone la imagen hasta el quinto nivel de wavelet para extraer más características y se utiliza la reconstrucción para comparar qué imágenes se pueden usar para el entrenamiento y validación de la red neuronal convolucional. Se determina que los mejores resultados se obtienen al utilizar las imágenes de aproximación del tercer nivel de descomposición. La precisión del método alcanza el 79.86%. Este enfoque puede ser útil en aplicaciones de seguridad y control de acceso biométrico.
publishDate 2023
dc.date.created.none.fl_str_mv 2023-03-07
dc.date.accessioned.none.fl_str_mv 2024-02-23T20:47:49Z
dc.date.available.none.fl_str_mv 2024-02-23T20:47:49Z
dc.type.spa.fl_str_mv bachelorThesis
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/33145
url http://hdl.handle.net/11349/33145
dc.language.iso.spa.fl_str_mv spa
language spa
dc.rights.*.fl_str_mv Attribution-NonCommercial-NoDerivatives 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 Attribution-NonCommercial-NoDerivatives 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 https://repository.udistrital.edu.co/bitstreams/640aa232-3bec-439b-a7da-8853e6176522/download
https://repository.udistrital.edu.co/bitstreams/c6107695-a1db-47d6-9869-549614d68833/download
https://repository.udistrital.edu.co/bitstreams/2840ba34-e6d7-4afc-ba35-6c47d06b66a7/download
https://repository.udistrital.edu.co/bitstreams/7339d89a-5e57-4486-bd20-95d5074c88fd/download
https://repository.udistrital.edu.co/bitstreams/8b52ed45-9b9e-4bb4-bfde-1459f1fbb578/download
https://repository.udistrital.edu.co/bitstreams/f02c00cb-0ef2-4f99-99b5-39ac78cdbb77/download
bitstream.checksum.fl_str_mv 33bd32bbd02ddac71e41772696667022
e6bda9c5dbed3071c0567294e10eb3b7
3030d3c96b5dbcc2680e29f2b9181a9a
6bbd1d81a1a23170e1385678e3af427f
4460e5956bc1d1639be9ae6146a50347
997daf6c648c962d566d7b082dac908d
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio Universidad Distrital
repository.mail.fl_str_mv repositorio@udistrital.edu.co
_version_ 1828164938524262400
spelling Herrera García, Rodrigo JavierTijaro Aguilar, Laura AlejandraRincón Aldana, Edwin EsdiverHerrera García, Rodrigo Javier [0000-0002-7972-5746]2024-02-23T20:47:49Z2024-02-23T20:47:49Z2023-03-07http://hdl.handle.net/11349/33145Este documento describe el proceso para realizar la identificación biométrica de una persona a partir de imágenes de la estructura} vascular de los dedos utilizando procesamiento digital de imágenes e inteligencia computacional. Se explica el preprocesamiento de la imagen que consiste en una serie de pasos para obtener la región de interés, incluyendo la detección de bordes con el algoritmo de Canny, dilatación de la imagen, rellenado de la imagen y eliminación de píxeles espurios con operadores lógicos XOR y AND, y cierre de la imagen. Además, se describen dos técnicas para mejorar la calidad de la imagen preprocesada: el uso de un filtro Gaussiano para eliminar líneas de ruido y el uso del histograma de ecualización adaptativo limitado en contraste para mejorar el contraste de la imagen. Para el emparejamiento de las imágenes con las personas se utiliza una red neuronal convolucional. Se realiza una limitación del contraste para resaltar el patrón vascular en las imágenes y se aplica un algoritmo de supresión de no máximos para encontrar los píxeles con la mayor intensidad en la imagen. Luego, se descompone la imagen hasta el quinto nivel de wavelet para extraer más características y se utiliza la reconstrucción para comparar qué imágenes se pueden usar para el entrenamiento y validación de la red neuronal convolucional. Se determina que los mejores resultados se obtienen al utilizar las imágenes de aproximación del tercer nivel de descomposición. La precisión del método alcanza el 79.86%. Este enfoque puede ser útil en aplicaciones de seguridad y control de acceso biométrico.This document explains the processes carried out to perform biometric identification of a person from images of the vascular structure of the fingers using digital image processing and computational intelligence. First, the image preprocessing is performed, a series of steps are followed to obtain the region of interest. The first step is edge detection using the Canny algorithm, in the second step, image dilation is performed to eliminate the gaps created when implementing the Canny algorithm. In the third step, the image is filled to complete the area of interest. After this step, those pixels added during dilation should be removed, for which XOR and AND logical operators are used. Implementing these operators leaves some spurious elements in the resulting image, and to suppress these elements, the image closure is used. Finally, masking is performed to remove areas of the image that are not useful for this problem, such as the background. The improvement of the preprocessed image quality is explained, and two techniques are presented that were used to improve the image. The first is the use of a Gaussian filter, which is implemented to remove lines that represent noise in the area of interest and can interfere when identifying veins. The second technique is the use of limited adaptive contrast histogram equalization. The histogram is used to improve image contrast so that veins are more noticeable and easier to identify. Using a convolutional neural network, the images are matched with the individuals. First, contrast is limited to highlight the vascular pattern in the images. After adjusting the contrast, a non-maximum suppression algorithm is created to find the pixels with the highest intensity in the image and represent the vascular pattern. The image is decomposed up to the fifth level of wavelet to extract more features that cannot be detected in the original image size. Then, reconstruction is used, using only the approximation images to compare which images can be used for training and validation of the convolutional neural network. After several tests, the best results are obtained using the approximation images of the third decomposition level. Finally, an accuracy of 79.86% is obtained.pdfspaAttribution-NonCommercial-NoDerivatives 4.0 Internacionalhttp://creativecommons.org/licenses/by-nc-nd/4.0/Abierto (Texto Completo)http://purl.org/coar/access_right/c_abf2Identificación biométricaProcesamiento digital de imágenesRed neuronal convolucionalDescomposición de waveletSupresión de no máximosEstructura vascularIngeniería Electrónica -- Tesis y disertaciones académicasBiometríaIdentificación vascularProcesamiento digital de imágenesBiometric identificationDigital image processingConvolutional neural networkWavelet decompositionNon-maximum suppressionVascular StructureIdentificación biométrica de personas a partir de imágenes de la estructura vascular de los dedos usando procesamiento digital de imágenesBiometric identification of individuals from images of finger vascular structure using digital image processing.bachelorThesisMonografíainfo:eu-repo/semantics/bachelorThesishttp://purl.org/coar/resource_type/c_7a1fTHUMBNAILRinconAldanaEdwinEsdiver,TijaroAguilarLauraAlejandra2023.pdf.jpgRinconAldanaEdwinEsdiver,TijaroAguilarLauraAlejandra2023.pdf.jpgIM Thumbnailimage/jpeg6760https://repository.udistrital.edu.co/bitstreams/640aa232-3bec-439b-a7da-8853e6176522/download33bd32bbd02ddac71e41772696667022MD55Licencia de uso y publicacion.pdf.jpgLicencia de uso y publicacion.pdf.jpgIM Thumbnailimage/jpeg13028https://repository.udistrital.edu.co/bitstreams/c6107695-a1db-47d6-9869-549614d68833/downloade6bda9c5dbed3071c0567294e10eb3b7MD56ORIGINALRinconAldanaEdwinEsdiver,TijaroAguilarLauraAlejandra2023.pdfRinconAldanaEdwinEsdiver,TijaroAguilarLauraAlejandra2023.pdfTrabajo de gradoapplication/pdf5589423https://repository.udistrital.edu.co/bitstreams/2840ba34-e6d7-4afc-ba35-6c47d06b66a7/download3030d3c96b5dbcc2680e29f2b9181a9aMD51Licencia de uso y publicacion.pdfLicencia de uso y publicacion.pdfapplication/pdf241874https://repository.udistrital.edu.co/bitstreams/7339d89a-5e57-4486-bd20-95d5074c88fd/download6bbd1d81a1a23170e1385678e3af427fMD52CC-LICENSElicense_rdflicense_rdfapplication/rdf+xml; charset=utf-8805https://repository.udistrital.edu.co/bitstreams/8b52ed45-9b9e-4bb4-bfde-1459f1fbb578/download4460e5956bc1d1639be9ae6146a50347MD53LICENSElicense.txtlicense.txttext/plain; charset=utf-87167https://repository.udistrital.edu.co/bitstreams/f02c00cb-0ef2-4f99-99b5-39ac78cdbb77/download997daf6c648c962d566d7b082dac908dMD5411349/33145oai:repository.udistrital.edu.co:11349/331452024-02-24 01:01:04.369http://creativecommons.org/licenses/by-nc-nd/4.0/Attribution-NonCommercial-NoDerivatives 4.0 Internacionalopen.accesshttps://repository.udistrital.edu.coRepositorio Universidad Distritalrepositorio@udistrital.edu.coTElDRU5DSUEgWSBBVVRPUklaQUNJw5NOIEVTUEVDSUFMIFBBUkEgUFVCTElDQVIgWSBQRVJNSVRJUiBMQSBDT05TVUxUQSBZIFVTTyBERSBDT05URU5JRE9TIEVOIEVMIFJFUE9TSVRPUklPIElOU1RJVFVDSU9OQUwgREUgTEEgVU5JVkVSU0lEQUQgRElTVFJJVEFMCgpUw6lybWlub3MgeSBjb25kaWNpb25lcyBkZSB1c28gcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyAoUklVRCkKCkNvbW8gdGl0dWxhcihlcykgZGVsKG9zKSBkZXJlY2hvKHMpIGRlIGF1dG9yLCBjb25maWVybyAoZXJpbW9zKSBhIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIChlbiBhZGVsYW50ZSwgTEEgVU5JVkVSU0lEQUQpIHVuYSBsaWNlbmNpYSBwYXJhIHVzbyBubyBleGNsdXNpdmEsIGxpbWl0YWRhIHkgZ3JhdHVpdGEgc29icmUgbGEgb2JyYSBxdWUgaW50ZWdyYXLDoSBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIChlbiBhZGVsYW50ZSwgUklVRCksIGRlIGFjdWVyZG8gYSBsYXMgc2lndWllbnRlcyByZWdsYXMsIGxhcyBjdWFsZXMgZGVjbGFybyAoYW1vcykgY29ub2NlciB5IGFjZXB0YXI6CgphKQlFc3RhcsOhIHZpZ2VudGUgYSBwYXJ0aXIgZGUgbGEgZmVjaGEgZW4gcXVlIHNlIGluY2x1eWEgZW4gZWwgUklVRCB5IGhhc3RhIHBvciB1biBwbGF6byBkZSBkaWV6ICgxMCkgQcOxb3MsIHByb3Jyb2dhYmxlIGluZGVmaW5pZGFtZW50ZSBwb3IgZWwgdGllbXBvIHF1ZSBkdXJlIGVsIGRlcmVjaG8gUGF0cmltb25pYWwgZGVsIGF1dG9yOyBsYSBjdWFsIHBvZHLDoSBkYXJzZSBwb3IgdGVybWluYWRhIHByZXZpYSBzb2xpY2l0dWQgYSBMQSBVTklWRVJTSURBRCBwb3IgZXNjcml0byBjb24gdW5hIGFudGVsYWNpw7NuIGRlIGRvcyAoMikgbWVzZXMgYW50ZXMgZGVsIHZlbmNpbWllbnRvIGRlbCBwbGF6byBpbmljaWFsIG8gZWwgZGUgc3UocykgcHLDs3Jyb2dhKHMpLgoKYikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIHB1YmxpY2FyIGxhIG9icmEgZW4gbGFzIGRpc3RpbnRhcyB2ZXJzaW9uZXMgcmVxdWVyaWRhcyBwb3IgZWwgUklVRCAoZGlnaXRhbCwgaW1wcmVzbywgZWxlY3Ryw7NuaWNvIHUgb3RybyBtZWRpbyBjb25vY2lkbyBvIHBvciBjb25vY2VyKSBMQSBVTklWRVJTSURBRCBubyBzZXLDoSByZXNwb25zYWJsZSBlbiBlbCBldmVudG8gcXVlIGVsIGRvY3VtZW50byBhcGFyZXpjYSByZWZlcmVuY2lhZG8gZW4gbW90b3JlcyBkZSBiw7pzcXVlZGEgbyByZXBvc2l0b3Jpb3MgZGlmZXJlbnRlcyBhbCBSSVVELCB1bmEgdmV6IGVsKG9zKSBhdXRvcihlcykgc29saWNpdGVuIHN1IGVsaW1pbmFjacOzbiBkZWwgUklVRCwgZGFkbyBxdWUgbGEgbWlzbWEgc2Vyw6EgcHVibGljYWRhIGVuIEludGVybmV0LgoKYykJTGEgYXV0b3JpemFjacOzbiBzZSBoYWNlIGEgdMOtdHVsbyBncmF0dWl0bywgcG9yIGxvIHRhbnRvLCBsb3MgYXV0b3JlcyByZW51bmNpYW4gYSByZWNpYmlyIGJlbmVmaWNpbyBhbGd1bm8gcG9yIGxhIHB1YmxpY2FjacOzbiwgZGlzdHJpYnVjacOzbiwgY29tdW5pY2FjacOzbiBww7pibGljYSB5IGN1YWxxdWllciBvdHJvIHVzbyBxdWUgc2UgaGFnYSBlbiBsb3MgdMOpcm1pbm9zIGRlIGxhIHByZXNlbnRlIGxpY2VuY2lhIHkgZGUgbGEgbGljZW5jaWEgZGUgdXNvIGNvbiBxdWUgc2UgcHVibGljYSAoQ3JlYXRpdmUgQ29tbW9ucykuCgpkKQlMb3MgY29udGVuaWRvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQgc29uIG9icmEocykgb3JpZ2luYWwoZXMpIHNvYnJlIGxhIGN1YWwoZXMpIGVsKG9zKSBhdXRvcihlcykgY29tbyB0aXR1bGFyZXMgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yLCBhc3VtZW4gdG90YWwgcmVzcG9uc2FiaWxpZGFkIHBvciBlbCBjb250ZW5pZG8gZGUgc3Ugb2JyYSBhbnRlIExBIFVOSVZFUlNJREFEIHkgYW50ZSB0ZXJjZXJvcy4gRW4gdG9kbyBjYXNvIExBIFVOSVZFUlNJREFEIHNlIGNvbXByb21ldGUgYSBpbmRpY2FyIHNpZW1wcmUgbGEgYXV0b3LDrWEgaW5jbHV5ZW5kbyBlbCBub21icmUgZGVsIGF1dG9yIHkgbGEgZmVjaGEgZGUgcHVibGljYWNpw7NuLgoKZSkJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGluY2x1aXIgbGEgb2JyYSBlbiBsb3Mgw61uZGljZXMgeSBidXNjYWRvcmVzIHF1ZSBlc3RpbWVuIG5lY2VzYXJpb3MgcGFyYSBtYXhpbWl6YXIgbGEgdmlzaWJpbGlkYWQgZWwgdXNvIHkgZWwgaW1wYWN0byBkZSBsYSBwcm9kdWNjacOzbiBjaWVudMOtZmljYSwgYXJ0w61zdGljYSB5IGFjYWTDqW1pY2EgZW4gbGEgY29tdW5pZGFkIGxvY2FsLCBuYWNpb25hbCBvIGludGVybmFjaW9uYWwuCgoKZikJTEEgVU5JVkVSU0lEQUQgcG9kcsOhIGNvbnZlcnRpciBsYSBvYnJhIGEgY3VhbHF1aWVyIG1lZGlvIG8gZm9ybWF0byBjb24gZWwgZmluIGRlIHN1IHByZXNlcnZhY2nDs24gZW4gZWwgdGllbXBvIHF1ZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSB5IGxhIGRlIHN1cyBwcsOzcnJvZ2FzLgoKCkNvbiBiYXNlIGVuIGxvIGFudGVyaW9yIGF1dG9yaXpvKGFtb3MpLCBhIGZhdm9yIGRlbCBSSVVEIHkgZGUgc3VzIHVzdWFyaW9zLCBsYSBwdWJsaWNhY2nDs24geSBjb25zdWx0YSBkZSBsYSBzaWd1aWVudGUgb2JyYToKClRpdHVsbwoKQXV0b3IgICAgICAgQXBlbGxpZG9zICAgICAgICAgTm9tYnJlcwoKMQoKMgoKMwoKCmcpCUF1dG9yaXpvKGFtb3MpLCBxdWUgbGEgb2JyYSBzZWEgcHVlc3RhIGEgZGlzcG9zaWNpw7NuIGRlbCBww7pibGljbyBlbiBsb3MgdMOpcm1pbm9zIGVzdGFibGVjaWRvcyBlbiBsb3MgbGl0ZXJhbGVzIGFudGVyaW9yZXMsIGJham8gbG9zIGzDrW1pdGVzIGRlZmluaWRvcyBwb3IgTEEgVU5JVkVSU0lEQUQsIGVuIGxhcyDigJxDb25kaWNpb25lcyBkZSB1c28gZGUgZXN0cmljdG8gY3VtcGxpbWllbnRv4oCdIGRlIGxvcyByZWN1cnNvcyBwdWJsaWNhZG9zIGVuIGVsIFJJVUQsIGN1eW8gdGV4dG8gY29tcGxldG8gc2UgcHVlZGUgY29uc3VsdGFyIGVuIGh0dHA6Ly9yZXBvc2l0b3J5LnVkaXN0cml0YWwuZWR1LmNvLwoKaCkJQ29ub3pjbyhjZW1vcykgeSBhY2VwdG8oYW1vcykgcXVlIG90b3JnbyhhbW9zKSB1bmEgbGljZW5jaWEgZXNwZWNpYWwgcGFyYSBwdWJsaWNhY2nDs24gZGUgb2JyYXMgZW4gZWwgUmVwb3NpdG9yaW8gSW5zdGl0dWNpb25hbCBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcywgbGljZW5jaWEgICBkZSBsYSBjdWFsIGhlIChoZW1vcykgb2J0ZW5pZG8gdW5hIGNvcGlhLgoKaSkJTWFuaWZpZXN0byhhbW9zKSBtaSAobnVlc3RybykgdG90YWwgYWN1ZXJkbyBjb24gbGFzIGNvbmRpY2lvbmVzIGRlIHVzbyB5IHB1YmxpY2FjacOzbiBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIHF1ZSBzZSBkZXNjcmliZW4geSBleHBsaWNhbiBlbiBlbCBwcmVzZW50ZSBkb2N1bWVudG8uCgpqKQlDb25vemNvKGNlbW9zKSBsYSBub3JtYXRpdmlkYWQgaW50ZXJuYSBkZSAgTEEgVU5JVkVSU0lEQUQ7IGVuIGNvbmNyZXRvLCBlbCBBY3VlcmRvIDAwNCBkZSAyMDEyIGRlbCBDU1UsIEFjdWVyZG8gMDIzIGRlIDIwMTIgZGVsIENTVSBzb2JyZSBQb2zDrXRpY2EgRWRpdG9yaWFsLCBBY3VlcmRvIDAyNiAgZGVsIDMxIGRlIGp1bGlvIGRlIDIwMTIgc29icmUgZWwgcHJvY2VkaW1pZW50byBwYXJhIGxhIHB1YmxpY2FjacOzbiBkZSB0ZXNpcyBkZSBwb3N0Z3JhZG8gZGUgbG9zIGVzdHVkaWFudGVzIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzLCAgQWN1ZXJkbyAwMzAgZGVsIDAzIGRlIGRpY2llbWJyZSBkZSAyMDEzIHBvciBtZWRpbyBkZWwgY3VhbCBzZSBjcmVhIGVsIFJlcG9zaXRvcmlvIEluc3RpdHVjaW9uYWwgZGUgbGEgVW5pdmVyc2lkYWQgRGlzdHJpdGFsIEZyYW5jaXNjbyBKb3PDqSBkZSBDYWxkYXMsIEFjdWVyZG8gMDM4IGRlIDIwMTUgMjAxNSDigJxwb3IgZWwgY3VhbCBzZSBtb2RpZmljYSBlbCBBY3VlcmRvIDAzMSBkZSAyMDE0IGRlIDIwMTQgcXVlIHJlZ2xhbWVudGEgZWwgdHJhYmFqbyBkZSBncmFkbyBwYXJhIGxvcyBlc3R1ZGlhbnRlcyBkZSBwcmVncmFkbyBkZSBsYSBVbml2ZXJzaWRhZCBEaXN0cml0YWwgRnJhbmNpc2NvIEpvc8OpIGRlIENhbGRhcyB5IHNlIGRpY3RhbiBvdHJhcyBkaXJlY3RyaWNlc+KAnSB5IGxhcyBkZW3DoXMgbm9ybWFzIGNvbmNvcmRhbnRlIHkgY29tcGxlbWVudGFyaWFzIHF1ZSByaWdlbiBhbCByZXNwZWN0bywgZXNwZWNpYWxtZW50ZSBsYSBsZXkgMjMgZGUgMTk4MiwgbGEgbGV5IDQ0IGRlIDE5OTMgeSBsYSBkZWNpc2nDs24gQW5kaW5hIDM1MSBkZSAxOTkzLiBFc3RvcyBkb2N1bWVudG9zIHBvZHLDoW4gc2VyIGNvbnN1bHRhZG9zIHkgZGVzY2FyZ2Fkb3MgZW4gZWwgcG9ydGFsIHdlYiBkZSBsYSBiaWJsaW90ZWNhIGh0dHA6Ly9zaXN0ZW1hZGViaWJsaW90ZWNhcy51ZGlzdHJpdGFsLmVkdS5jby8KCmspCUFjZXB0byhhbW9zKSBxdWUgTEEgVU5JVkVSU0lEQUQgbm8gc2UgcmVzcG9uc2FiaWxpemEgcG9yIGxhcyBpbmZyYWNjaW9uZXMgYSBsYSBwcm9waWVkYWQgaW50ZWxlY3R1YWwgbyBEZXJlY2hvcyBkZSBBdXRvciBjYXVzYWRhcyBwb3IgbG9zIHRpdHVsYXJlcyBkZSBsYSBwcmVzZW50ZSBMaWNlbmNpYSB5IGRlY2xhcmFtb3MgcXVlIG1hbnRlbmRyw6kgKGVtb3MpIGluZGVtbmUgYSBMQSBVTklWRVJTSURBRCBwb3IgbGFzIHJlY2xhbWFjaW9uZXMgbGVnYWxlcyBkZSBjdWFscXVpZXIgdGlwbyBxdWUgbGxlZ2FyZW4gYSBwcmVzZW50YXJzZSBwb3IgdmlvbGFjacOzbiBkZSBkZXJlY2hvcyBhIGxhIHByb3BpZWRhZCBpbnRlbGVjdHVhbCBvIGRlIEF1dG9yIHJlbGFjaW9uYWRvcyBjb24gbG9zIGRvY3VtZW50b3MgcmVnaXN0cmFkb3MgZW4gZWwgUklVRC4KCmwpCUVsIChsb3MpIGF1dG9yKGVzKSBtYW5pZmllc3RhKG1vcykgcXVlIGxhIG9icmEgb2JqZXRvIGRlIGxhIHByZXNlbnRlIGF1dG9yaXphY2nDs24gZXMgb3JpZ2luYWwsIGRlIGV4Y2x1c2l2YSBhdXRvcsOtYSwgeSBzZSByZWFsaXrDsyBzaW4gdmlvbGFyIG8gdXN1cnBhciBkZXJlY2hvcyBkZSBhdXRvciBkZSB0ZXJjZXJvczsgZGUgdGFsIHN1ZXJ0ZSwgZW4gY2FzbyBkZSBwcmVzZW50YXJzZSBjdWFscXVpZXIgcmVjbGFtYWNpw7NuIG8gYWNjacOzbiBwb3IgcGFydGUgZGUgdW4gdGVyY2VybyBlbiBjdWFudG8gYSBsb3MgZGVyZWNob3MgZGUgYXV0b3Igc29icmUgbGEgb2JyYSwgZWwgKGxvcykgZXN0dWRpYW50ZShzKSDigJMgYXV0b3IoZXMpIGFzdW1pcsOhKG4pIHRvZGEgbGEgcmVzcG9uc2FiaWxpZGFkIHkgc2FsZHLDoShuKSBlbiBkZWZlbnNhIGRlIGxvcyBkZXJlY2hvcyBhcXXDrSBhdXRvcml6YWRvcy4gUGFyYSB0b2RvcyBsb3MgZWZlY3RvcywgTEEgVU5JVkVSU0lEQUQgYWN0w7phIGNvbW8gdW4gdGVyY2VybyBkZSBidWVuYSBmZS4KCgptKQlFbCAobG9zKSBhdXRvcihlcykgbWFuaWZpZXN0YShtb3MpIHF1ZSBjb25vemNvKGNlbW9zKSBsYSBhdXRvbm9tw61hIHkgbG9zIGRlcmVjaG9zLCBxdWUgcG9zZWUobW9zKSBzb2JyZSBsYSBvYnJhIHksIGNvbW8gdGFsLCBlcyAoc29tb3MpIHJlc3BvbnNhYmxlKHMpIGRlbCBhbGNhbmNlIGp1csOtZGljbyB5IGxlZ2FsLCBkZSBlc2NvZ2VyIGxhIG9wY2nDs24gZGUgbGEgcHVibGljYWNpw7NuIG8gZGUgcmVzdHJpY2Npw7NuIGRlIGxhIHB1YmxpY2FjacOzbiBkZWwgZG9jdW1lbnRvIHJlZ2lzdHJhZG8gZW4gZWwgUklVRC4KCgoKCgoKU0kgRUwgRE9DVU1FTlRPIFNFIEJBU0EgRU4gVU4gVFJBQkFKTyBRVUUgSEEgU0lETyBQQVRST0NJTkFETyBPIEFQT1lBRE8gUE9SIFVOQSBBR0VOQ0lBIE8gVU5BIE9SR0FOSVpBQ0nDk04sIENPTiBFWENFUENJw5NOIERFIExBIFVOSVZFUlNJREFEIERJU1RSSVRBTCBGUkFOQ0lTQ08gSk9TRSBERSBDQUxEQVMsIExPUyBBVVRPUkVTIEdBUkFOVElaQU4gUVVFIFNFIEhBIENVTVBMSURPIENPTiBMT1MKREVSRUNIT1MgWSBPQkxJR0FDSU9ORVMgUkVRVUVSSURPUyBQT1IgRUwgUkVTUEVDVElWTyBDT05UUkFUTyBPIEFDVUVSRE8uCgoKCgoKCgoKCgoKCgoKCgoKCgoKCkVuIGNvbnN0YW5jaWEgZGUgbG8gYW50ZXJpb3IsIGZpcm1vKGFtb3MpIGVsIHByZXNlbnRlIGRvY3VtZW50bywgZW4gbGEgY2l1ZGFkIGRlIEJvZ290w6EsIEQuQy4sIGEgbG9zCgoKRklSTUEgREUgTE9TIFRJVFVMQVJFUyBERSBERVJFQ0hPUyBERSBBVVRPUgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fICAgQy5DLiBOby4gX19fX19fX19fX19fX19fX19fCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICBDLkMuIE5vLiBfX19fX19fX19fX19fX19fX18KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgIEMuQy4gTm8uIF9fX19fX19fX19fX19fX19fXwoKCgpDb3JyZW8gRWxlY3Ryw7NuaWNvIEluc3RpdHVjaW9uYWwgZGVsIChkZSBsb3MpIEF1dG9yKGVzKToKCkF1dG9yCSAgICAgIENvcnJlbyBFbGVjdHLDs25pY28KCjEKCjIKCjMKCk5vbWJyZSBkZSBEaXJlY3RvcihlcykgZGUgR3JhZG86CgoxCgoyCgozCgpOb21icmUgRmFjdWx0YWQgeSBQcm95ZWN0byBDdXJyaWN1bGFyOgoKRmFjdWx0YWQJUHJveWVjdG8gQ3VycmljdWxhcgoKCgoKCgoKCk5vdGE6IEVuIGNhc28gcXVlIG5vIGVzdMOpIGRlIGFjdWVyZG8gY29uIGxhcyBjb25kaWNpb25lcyBkZSBsYSBwcmVzZW50ZSBsaWNlbmNpYSwgeSBtYW5pZmllc3RlIGFsZ3VuYSByZXN0cmljY2nDs24gc29icmUgbGEgb2JyYSwganVzdGlmaXF1ZSBsb3MgbW90aXZvcyBwb3IgbG9zIGN1YWxlcyBlbCBkb2N1bWVudG8geSBzdXMgYW5leG9zIG5vIHB1ZWRlbiBzZXIgcHVibGljYWRvcyBlbiBlbCBSZXBvc2l0b3JpbyBJbnN0aXR1Y2lvbmFsIGRlIGxhIFVuaXZlcnNpZGFkIERpc3RyaXRhbCBGcmFuY2lzY28gSm9zw6kgZGUgQ2FsZGFzIFJJVUQuCgoKU2kgcmVxdWllcmUgbcOhcyBlc3BhY2lvLCBwdWVkZSBhbmV4YXIgdW5hIGNvcGlhIHNpbWlsYXIgYSBlc3RhIGhvamEK