Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases

Introducción— Actualmente, la calidad del software en una característica fundamental para asegurarse un espacio en el mercado global que día a día es más competitivo y exigente. Las pruebas de software permiten a las empresas desarrolladoras de software encontrar y corregir fallos y con ello elevar...

Full description

Autores:
Lopez Realpe, Andres Rodrigo
MUÑOZ ORDOÑEZ, JORGE ARMANDO
Cobos, Carlos Alberto
Tipo de recurso:
Article of journal
Fecha de publicación:
2022
Institución:
Corporación Universidad de la Costa
Repositorio:
REDICUC - Repositorio CUC
Idioma:
eng
OAI Identifier:
oai:repositorio.cuc.edu.co:11323/10178
Acceso en línea:
https://hdl.handle.net/11323/10178
https://repositorio.cuc.edu.co/
Palabra clave:
Arreglos de cobertura
Algoritmos metaheurísticos
Algoritmos codiciosos
Recocido simulado
Arreglos de cobertura Mixtos
Covering Arrays
Mixed covering arrays
Metaheuristic algorithms
Greedy algorithms
Simulated annealing
Rights
openAccess
License
Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
id RCUC2_6022e2857e88ce999badd9bff7cea585
oai_identifier_str oai:repositorio.cuc.edu.co:11323/10178
network_acronym_str RCUC2
network_name_str REDICUC - Repositorio CUC
repository_id_str
dc.title.eng.fl_str_mv Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
dc.title.translated.none.fl_str_mv Un Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos de diferentes niveles de fuerza a usar en el diseño de casos de prueba de software de caja negra
title Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
spellingShingle Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
Arreglos de cobertura
Algoritmos metaheurísticos
Algoritmos codiciosos
Recocido simulado
Arreglos de cobertura Mixtos
Covering Arrays
Mixed covering arrays
Metaheuristic algorithms
Greedy algorithms
Simulated annealing
title_short Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
title_full Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
title_fullStr Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
title_full_unstemmed Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
title_sort Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases
dc.creator.fl_str_mv Lopez Realpe, Andres Rodrigo
MUÑOZ ORDOÑEZ, JORGE ARMANDO
Cobos, Carlos Alberto
dc.contributor.author.none.fl_str_mv Lopez Realpe, Andres Rodrigo
MUÑOZ ORDOÑEZ, JORGE ARMANDO
Cobos, Carlos Alberto
dc.subject.proposal.spa.fl_str_mv Arreglos de cobertura
Algoritmos metaheurísticos
Algoritmos codiciosos
Recocido simulado
Arreglos de cobertura Mixtos
topic Arreglos de cobertura
Algoritmos metaheurísticos
Algoritmos codiciosos
Recocido simulado
Arreglos de cobertura Mixtos
Covering Arrays
Mixed covering arrays
Metaheuristic algorithms
Greedy algorithms
Simulated annealing
dc.subject.proposal.eng.fl_str_mv Covering Arrays
Mixed covering arrays
Metaheuristic algorithms
Greedy algorithms
Simulated annealing
description Introducción— Actualmente, la calidad del software en una característica fundamental para asegurarse un espacio en el mercado global que día a día es más competitivo y exigente. Las pruebas de software permiten a las empresas desarrolladoras de software encontrar y corregir fallos y con ello elevar la calidad de sus productos. El costo de las pruebas hoy se estima en un 50% del costo total del desarrollo de software, por esto se hace necesario encontrar formas menos costosas que garanticen altos niveles de detección de fallos. En este escenario, las pruebas de caja negra tienen un papel fundamental y dentro de estas pruebas los enfoques combinatoriales son una de las mejores opciones. En las pruebas combinatorias se hace necesario que los usuarios probadores (testers) cuenten con una herramienta que les proporcione el menor número de casos de prueba con la mayor cobertura (detección de fallos) de acuerdo con los parámetros del método (procedimiento, función u otro) que desea probar, y este es el objetivo principal de este trabajo. Objetivo— En este artículo se presenta un algoritmo que soporta la generación de casos de prueba en pruebas de caja negra basado en la creación de Arreglos de Cobertura Mixta (MCA). Estos arreglos permiten generar el menor número de casos de prueba requeridos para probar una unidad de código con la mayor cobertura requerida (mayor posibilidad de detectar fallos). El algoritmo propuesto construye una solución inicial basado en un algoritmo codicioso (greedy) y luego mejora esta solución a través de un proceso iterativo orientado por recocido simulado (algoritmo metaheurístico) y tres formas de definir soluciones vecinas. Metodología— La investigación se realizó siguiendo el Patrón de Investigación Iterativa propuesto por Pratt. Primero se identificaron los principales problemas reportados en el estado del arte para la construcción de MCA, luego se realizó una revisión de las propuestas de solución a estos problemas. Después se creó un primer algoritmo y luego se fue modificando en forma iterativa este algoritmo, incluyendo y removiendo componentes de acuerdo con resultados experimentales de su funcionamiento. Cuando se obtuvo la versión deseada, se realizó un proceso de afinamiento de parámetros y se comparó con los mejores resultados presentados en la literatura, resultados obtenidos por diferentes algoritmos. Resultados— El algoritmo propuesto obtiene MCA que son competitivos (en promedio 3 casos de prueba adicionales) frente a los mejores reportados en el estado del arte en un tiempo corto de ejecución, aspecto que es de especial interés para los probadores de software. Conclusiones— Se confirmó que el enfoque codicioso y metaheurístico basado en recocido simulado es una buena alternativa para la construcción de un MCA. Los algoritmos de construcción de soluciones vecinas son claves para encontrar el MCA requerido y en un menor tiempo de ejecución.
publishDate 2022
dc.date.issued.none.fl_str_mv 2022
dc.date.accessioned.none.fl_str_mv 2023-05-24T22:25:38Z
dc.date.available.none.fl_str_mv 2023-05-24T22:25:38Z
dc.type.spa.fl_str_mv Artículo de revista
dc.type.coar.spa.fl_str_mv http://purl.org/coar/resource_type/c_6501
http://purl.org/coar/resource_type/c_2df8fbb1
dc.type.content.spa.fl_str_mv Text
dc.type.driver.spa.fl_str_mv info:eu-repo/semantics/article
dc.type.redcol.spa.fl_str_mv http://purl.org/redcol/resource_type/ART
dc.type.version.spa.fl_str_mv info:eu-repo/semantics/publishedVersion
dc.type.coarversion.spa.fl_str_mv http://purl.org/coar/version/c_970fb48d4fbd8a85
format http://purl.org/coar/resource_type/c_6501
status_str publishedVersion
dc.identifier.citation.spa.fl_str_mv A. López Realpe, J. Muñoz Ordoñez & C. Cobos Lozada, “Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases”, INGECUC, vol. 18, no. 2, pp. 223–237. DOI: http://doi.org/10.17981/ingecuc.18.2.2022.18
dc.identifier.issn.spa.fl_str_mv 0122-6517
dc.identifier.uri.none.fl_str_mv https://hdl.handle.net/11323/10178
dc.identifier.doi.none.fl_str_mv 10.17981/ingecuc.18.2.2022.18
dc.identifier.eissn.spa.fl_str_mv 2382-4700
dc.identifier.instname.spa.fl_str_mv Corporación Universidad de la Costa
dc.identifier.reponame.spa.fl_str_mv REDICUC - Repositorio CUC
dc.identifier.repourl.spa.fl_str_mv https://repositorio.cuc.edu.co/
identifier_str_mv A. López Realpe, J. Muñoz Ordoñez & C. Cobos Lozada, “Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases”, INGECUC, vol. 18, no. 2, pp. 223–237. DOI: http://doi.org/10.17981/ingecuc.18.2.2022.18
0122-6517
10.17981/ingecuc.18.2.2022.18
2382-4700
Corporación Universidad de la Costa
REDICUC - Repositorio CUC
url https://hdl.handle.net/11323/10178
https://repositorio.cuc.edu.co/
dc.language.iso.spa.fl_str_mv eng
language eng
dc.relation.ispartofjournal.spa.fl_str_mv INGE CUC
dc.relation.references.spa.fl_str_mv [1] A. Kovačević, “The Top 4 Trends That Will Change Software Development in the 2020s”, IEEE Computer Society, Mar. 2, 2020. [Online]. Available in: https://www.computer.org/publications/tech-news/ trends/the-top-4-trends-that-will-change-software-development-in-the-2020s
[2] A. Tripathi, K. Mishra, S. Tiwari, & N. Kumar, “Improved software cost estimation models: A new perspective based on evolution in Dynamic Environment,” J Intell Fuzzy Syst, vol. 35, no. 2, pp. 1707–1720, Jan. 2018. https://doi.org/10.3233/JIFS-169707
[3] H. Wu, C. Nie, F. Kuo, H. Leung, & C. Colbourn, “A Discrete Particle Swarm Optimization for Covering Array Generation,” IEEE Trans Evol Composite, vol. 19, No. 4, pp. 575–591, Aug. 2015. https://doi. org/10.1109/TEVC.2014.2362532
[4] T. Mahmoud & B. Ahmed, “An efficient strategy for covering array construction with fuzzy logic-based adaptive swarm optimization for software testing use,” Expert Syst Appl, vol. 42, no. 22, pp. 8753–8765, Dec. 2015. https://doi.org/10.1016/j.eswa.2015.07.029
[5] J. Timaná-Peña, C. Cobos-Lozada, & J. Torres-Jimenez, “Metaheuristic algorithms for building Covering Arrays A review,” Rev Fac Ing, vol. 25, no. 43, pp. 31–45, Ene. 2016. https://doi.org/10.19053/01211129. v25.n43.2016.5295
[6] J. Timaná, C. Cobos, & J. Torres-Jimenez, “Memetic algorithm for constructing covering arrays of variable strength based on global-best harmony search and simulated annealing,” presented at Mexican International Conference on Artificial Intelligence, MICAI, Guad., MX, 22-27 Oct. 2018. https://doi. org/10.1007/978-3-030-04491-6_2
[7] S. Sabharwal, P. Bansal, & N. Mittal, “Construction of t-way covering arrays using genetic algorithm,” Int J Syst Assur Eng Manag, vol. 8, no. 2, pp. 264–274, Mar. 2016. https://doi.org/10.1007/s13198-016- 0430-6
[8] X. Yang, Nature-inspired Metaheuristic Algorithms, 2 ed., Cambr., UK: Luniver Press, 2010.
[9] R. Walker & C. Colbourn, “Tabu search for covering arrays using permutation vectors,” J Stat Plan Inference, vol. 139, no. 1, pp. 69–80, Jan., 2009. https://doi.org/10.1016/j.jspi.2008.05.020
[10] S. Esfandyari & V. Rafe, “A tuned version of genetic algorithm for efficient test suite generation in interactive t-way testing strategy,” Inf Softw Technol, vol. 94, pp. 165–185, Feb. 2018. https://doi.org/10.1016/j. infsof.2017.10.007
[11] G. Demiroz & C. Yilmaz, “Using simulated annealing for computing cost-aware covering arrays,” Appl Soft Comput, vol. 49, pp. 1129–1144, Dec. 2016. https://doi.org/10.1016/j.asoc.2016.08.022
[12] X. Chen, Q. Gu, A. Li, & D. Chen, “Variable strength interaction testing with an ant colony system approach,” presented at Asia-Pacific Software Engineering Conference, APSEC, PG, MY, 1-3 Dec. 2009. https://doi.org/10.1109/APSEC.2009.18
[13] X. Bao, S. Liu, N. Zhang, & M. Dong, “Combinatorial Test Generation Using Improved Harmony Search Algorithm,” Int J Hybrid Inf Technol, vol. 8, no. 9, pp. 121–130, Sep. 2015. https://doi.org/10.14257/ ijhit.2015.8.9.13
[14] Y. Zhang, L. Cai, & W. Ji, “Combinatorial testing data generation based on bird swarm algorithm,” presented at 2nd International Conference on System Reliability and Safety, ICSRS, MIL, IT, Jan. 2018. https://doi.org/10.1109/ICSRS.2017.8272871
[15] B. Ahmed, T. Abdulsamad & M. Potrus, ‘Achievement of minimized combinatorial test suite for configuration-aware software functional testing using the Cuckoo Search algorithm,’ Inf Softw Technol, vol. 66, pp. 13–29, Oct. 2015. https://doi.org/10.1016/j.infsof.2015.05.005
[16] Y. Wang, M. Zhou, X. Song, M. Gu & J. Sun, “Constructing Cost-Aware Functional Test-Suites Using Nested Differential Evolution Algorithm,” IEEE Trans Evol Comput, vol. 22, no. 3, pp. 334–346, Jun. 2018. https://doi.org/10.1109/TEVC.2017.2747638
[17] K. Zamli, B. Alkazemi & G. Kendall, “A Tabu Search hyper-heuristic strategy for t-way test suite generation,” Appl Soft Comput, vol. 44, pp. 57–74, Jul. 2016. https://doi.org/10.1016/j.asoc.2016.03.021
[18] J. Torres-Jimenez, H. Avila-George & Izquierdo-Marquez, “A two-stage algorithm for combinatorial testing,” Optim Lett, vol. 11, no. 3, pp. 457–469, Feb. 2016. https://doi.org/10.1007/s11590-016-1012-x
[19] I. Izquierdo-Marquez, J. Torres-Jiménez, B. Acevedo-Juárez & H. Avila-George, “A greedy-metaheuristic 3-stage approach to construct covering arrays,” Inf Sci, vol. 460-461, pp. 172–189, Sep. 2018. https:// doi.org/10.1016/j.ins.2018.05.047
[20] J. Torres-Jiménez & I. Izquierdo-Márquez, “A Simulated Annealing Algorithm to Construct Covering Perfect Hash Families,” Math Probl Eng, pp. 1–15, Jan. 2018. https://doi.org/10.1155/2018/1860673
[21] M. Cohen, C. Colbourn & A. Ling, “Constructing strength three covering arrays with augmented annealing,” Discrete Math, vol. 308, no. 13, pp. 2709–2722, Jun. 2003. https://doi.org/10.1016/j. disc.2006.06.036
[22] J. Torres-Jimenez & J. Perez-Torres, “A greedy algorithm to construct covering arrays using a graph representation,” Info Sci, vol. 477, pp. 234–245, Mar. 2019. https://doi.org/10.1016/j.ins.2018.10.048
[23] J. Torres-Jiménez & I. Izquierdo-Márquez, “Improved covering arrays using covering perfect hash families with groups of restricted entries,” Appl Math Composite, vol. 369, pp. 1–10, Mar. 2020. https://doi. org/10.1016/j.amc.2019.124826
[24] M. Martin, “SOLID: los 5 principios que te ayudarán a desarrollar software de calidad,” profile, 22 Nov. 2018 [Online]. Available in: https://profile.es/blog/principios-solid-desarrollo-software-calidad/
dc.relation.citationendpage.spa.fl_str_mv 237
dc.relation.citationstartpage.spa.fl_str_mv 223
dc.relation.citationissue.spa.fl_str_mv 2
dc.relation.citationvolume.spa.fl_str_mv 18
dc.rights.spa.fl_str_mv Derechos de autor 2022 INGE CUC
dc.rights.license.spa.fl_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
dc.rights.uri.spa.fl_str_mv https://creativecommons.org/licenses/by-nc-nd/4.0/
dc.rights.accessrights.spa.fl_str_mv info:eu-repo/semantics/openAccess
dc.rights.coar.spa.fl_str_mv http://purl.org/coar/access_right/c_abf2
rights_invalid_str_mv Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)
Derechos de autor 2022 INGE CUC
https://creativecommons.org/licenses/by-nc-nd/4.0/
http://purl.org/coar/access_right/c_abf2
eu_rights_str_mv openAccess
dc.format.extent.spa.fl_str_mv 15 páginas
dc.format.mimetype.spa.fl_str_mv application/pdf
dc.publisher.spa.fl_str_mv Corporación Universidad de la Costa
dc.publisher.place.spa.fl_str_mv Colombia
dc.source.spa.fl_str_mv https://revistascientificas.cuc.edu.co/ingecuc/article/view/4416
institution Corporación Universidad de la Costa
bitstream.url.fl_str_mv https://repositorio.cuc.edu.co/bitstreams/213de245-5c58-4c3f-a689-664ad60ad215/download
https://repositorio.cuc.edu.co/bitstreams/235cc3a5-5f81-47fd-945c-41a6c0a4e650/download
https://repositorio.cuc.edu.co/bitstreams/d59d79b2-ae79-45c3-8304-33e1adbb40f0/download
https://repositorio.cuc.edu.co/bitstreams/5881472a-59c6-47b8-a8ee-0255557c8a05/download
bitstream.checksum.fl_str_mv 91f9914e7536722d01d14ff07870868e
2f9959eaf5b71fae44bbf9ec84150c7a
eec6b2501047dfedd09affefc865a09d
3f7fae6e6a25c7fea78f5eb6ab045299
bitstream.checksumAlgorithm.fl_str_mv MD5
MD5
MD5
MD5
repository.name.fl_str_mv Repositorio de la Universidad de la Costa CUC
repository.mail.fl_str_mv repdigital@cuc.edu.co
_version_ 1811760851981434880
spelling Atribución-NoComercial-SinDerivadas 4.0 Internacional (CC BY-NC-ND 4.0)Derechos de autor 2022 INGE CUChttps://creativecommons.org/licenses/by-nc-nd/4.0/info:eu-repo/semantics/openAccesshttp://purl.org/coar/access_right/c_abf2Lopez Realpe, Andres RodrigoMUÑOZ ORDOÑEZ, JORGE ARMANDOCobos, Carlos Alberto2023-05-24T22:25:38Z2023-05-24T22:25:38Z2022A. López Realpe, J. Muñoz Ordoñez & C. Cobos Lozada, “Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test cases”, INGECUC, vol. 18, no. 2, pp. 223–237. DOI: http://doi.org/10.17981/ingecuc.18.2.2022.180122-6517https://hdl.handle.net/11323/1017810.17981/ingecuc.18.2.2022.182382-4700Corporación Universidad de la CostaREDICUC - Repositorio CUChttps://repositorio.cuc.edu.co/Introducción— Actualmente, la calidad del software en una característica fundamental para asegurarse un espacio en el mercado global que día a día es más competitivo y exigente. Las pruebas de software permiten a las empresas desarrolladoras de software encontrar y corregir fallos y con ello elevar la calidad de sus productos. El costo de las pruebas hoy se estima en un 50% del costo total del desarrollo de software, por esto se hace necesario encontrar formas menos costosas que garanticen altos niveles de detección de fallos. En este escenario, las pruebas de caja negra tienen un papel fundamental y dentro de estas pruebas los enfoques combinatoriales son una de las mejores opciones. En las pruebas combinatorias se hace necesario que los usuarios probadores (testers) cuenten con una herramienta que les proporcione el menor número de casos de prueba con la mayor cobertura (detección de fallos) de acuerdo con los parámetros del método (procedimiento, función u otro) que desea probar, y este es el objetivo principal de este trabajo. Objetivo— En este artículo se presenta un algoritmo que soporta la generación de casos de prueba en pruebas de caja negra basado en la creación de Arreglos de Cobertura Mixta (MCA). Estos arreglos permiten generar el menor número de casos de prueba requeridos para probar una unidad de código con la mayor cobertura requerida (mayor posibilidad de detectar fallos). El algoritmo propuesto construye una solución inicial basado en un algoritmo codicioso (greedy) y luego mejora esta solución a través de un proceso iterativo orientado por recocido simulado (algoritmo metaheurístico) y tres formas de definir soluciones vecinas. Metodología— La investigación se realizó siguiendo el Patrón de Investigación Iterativa propuesto por Pratt. Primero se identificaron los principales problemas reportados en el estado del arte para la construcción de MCA, luego se realizó una revisión de las propuestas de solución a estos problemas. Después se creó un primer algoritmo y luego se fue modificando en forma iterativa este algoritmo, incluyendo y removiendo componentes de acuerdo con resultados experimentales de su funcionamiento. Cuando se obtuvo la versión deseada, se realizó un proceso de afinamiento de parámetros y se comparó con los mejores resultados presentados en la literatura, resultados obtenidos por diferentes algoritmos. Resultados— El algoritmo propuesto obtiene MCA que son competitivos (en promedio 3 casos de prueba adicionales) frente a los mejores reportados en el estado del arte en un tiempo corto de ejecución, aspecto que es de especial interés para los probadores de software. Conclusiones— Se confirmó que el enfoque codicioso y metaheurístico basado en recocido simulado es una buena alternativa para la construcción de un MCA. Los algoritmos de construcción de soluciones vecinas son claves para encontrar el MCA requerido y en un menor tiempo de ejecución.Introduction— Currently, software quality is a fundamental feature to ensure a space in the global market that day by day is more competitive and demanding. Software testing allows software developers to find and fix bugs and, thereby, raise the quality of their products. The cost of testing is now estimated at 50% of the total cost of software development, so it is necessary to find less expensive ways to ensure elevated levels of fault detection. In this scenario, black box tests play a key role; within these tests, combinatorial approaches are one of the best options. In combinatorial tests, test users must have a tool that provides them with the least number of test cases with the greatest coverage (failure detection) according to the parameters of the method (procedure, function, or other) that they want to test, and this is the main objective of this work. Objective— This paper presents an algorithm that supports the generation of test cases in black box tests based on the creation of Mixed Covering Arrays (MCA). These fixes allow you to generate the smallest number of test cases required to test a unit of code with the highest required coverage. The proposed algorithm builds an initial solution based on a greedy algorithm and then improves this solution through an iterative process oriented by simulated annealing (metaheuristic algorithm). Methodology— The research was conducted following the Iterative Research Pattern proposed by Pratt. First, the main problems reported in the state of the art for the construction of CSF were identified, then a review of the proposed solutions to these problems was performed. Then a first algorithm was created and then iteratively modified this algorithm, including, and removing components according to the experimental results of its operation. When the desired version was obtained, a process of refinement of parameters was performed and compared with the best results presented in the literature, results obtained by different algorithms. Results— The proposed algorithm obtains MCAs that are competitive (on average 3 additional test cases) against the best reported in the state of the art in an abbreviated execution time, an aspect that is of special interest for software testers. Conclusions— It was confirmed that the greedy and metaheuristic approach based on simulated annealing is a suitable alternative for the construction of a CSF. Neighboring solution construction algorithms are key to finding the required MCA in a shorter execution time.15 páginasapplication/pdfengCorporación Universidad de la CostaColombiahttps://revistascientificas.cuc.edu.co/ingecuc/article/view/4416Metaheuristic algorithm for the construction of mixed covering arrays of different strength levels to be used in the design of Black Box software test casesUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos de diferentes niveles de fuerza a usar en el diseño de casos de prueba de software de caja negraArtículo de revistahttp://purl.org/coar/resource_type/c_6501http://purl.org/coar/resource_type/c_2df8fbb1Textinfo:eu-repo/semantics/articlehttp://purl.org/redcol/resource_type/ARTinfo:eu-repo/semantics/publishedVersionhttp://purl.org/coar/version/c_970fb48d4fbd8a85INGE CUC[1] A. Kovačević, “The Top 4 Trends That Will Change Software Development in the 2020s”, IEEE Computer Society, Mar. 2, 2020. [Online]. Available in: https://www.computer.org/publications/tech-news/ trends/the-top-4-trends-that-will-change-software-development-in-the-2020s[2] A. Tripathi, K. Mishra, S. Tiwari, & N. Kumar, “Improved software cost estimation models: A new perspective based on evolution in Dynamic Environment,” J Intell Fuzzy Syst, vol. 35, no. 2, pp. 1707–1720, Jan. 2018. https://doi.org/10.3233/JIFS-169707[3] H. Wu, C. Nie, F. Kuo, H. Leung, & C. Colbourn, “A Discrete Particle Swarm Optimization for Covering Array Generation,” IEEE Trans Evol Composite, vol. 19, No. 4, pp. 575–591, Aug. 2015. https://doi. org/10.1109/TEVC.2014.2362532[4] T. Mahmoud & B. Ahmed, “An efficient strategy for covering array construction with fuzzy logic-based adaptive swarm optimization for software testing use,” Expert Syst Appl, vol. 42, no. 22, pp. 8753–8765, Dec. 2015. https://doi.org/10.1016/j.eswa.2015.07.029[5] J. Timaná-Peña, C. Cobos-Lozada, & J. Torres-Jimenez, “Metaheuristic algorithms for building Covering Arrays A review,” Rev Fac Ing, vol. 25, no. 43, pp. 31–45, Ene. 2016. https://doi.org/10.19053/01211129. v25.n43.2016.5295[6] J. Timaná, C. Cobos, & J. Torres-Jimenez, “Memetic algorithm for constructing covering arrays of variable strength based on global-best harmony search and simulated annealing,” presented at Mexican International Conference on Artificial Intelligence, MICAI, Guad., MX, 22-27 Oct. 2018. https://doi. org/10.1007/978-3-030-04491-6_2[7] S. Sabharwal, P. Bansal, & N. Mittal, “Construction of t-way covering arrays using genetic algorithm,” Int J Syst Assur Eng Manag, vol. 8, no. 2, pp. 264–274, Mar. 2016. https://doi.org/10.1007/s13198-016- 0430-6[8] X. Yang, Nature-inspired Metaheuristic Algorithms, 2 ed., Cambr., UK: Luniver Press, 2010.[9] R. Walker & C. Colbourn, “Tabu search for covering arrays using permutation vectors,” J Stat Plan Inference, vol. 139, no. 1, pp. 69–80, Jan., 2009. https://doi.org/10.1016/j.jspi.2008.05.020[10] S. Esfandyari & V. Rafe, “A tuned version of genetic algorithm for efficient test suite generation in interactive t-way testing strategy,” Inf Softw Technol, vol. 94, pp. 165–185, Feb. 2018. https://doi.org/10.1016/j. infsof.2017.10.007[11] G. Demiroz & C. Yilmaz, “Using simulated annealing for computing cost-aware covering arrays,” Appl Soft Comput, vol. 49, pp. 1129–1144, Dec. 2016. https://doi.org/10.1016/j.asoc.2016.08.022[12] X. Chen, Q. Gu, A. Li, & D. Chen, “Variable strength interaction testing with an ant colony system approach,” presented at Asia-Pacific Software Engineering Conference, APSEC, PG, MY, 1-3 Dec. 2009. https://doi.org/10.1109/APSEC.2009.18[13] X. Bao, S. Liu, N. Zhang, & M. Dong, “Combinatorial Test Generation Using Improved Harmony Search Algorithm,” Int J Hybrid Inf Technol, vol. 8, no. 9, pp. 121–130, Sep. 2015. https://doi.org/10.14257/ ijhit.2015.8.9.13[14] Y. Zhang, L. Cai, & W. Ji, “Combinatorial testing data generation based on bird swarm algorithm,” presented at 2nd International Conference on System Reliability and Safety, ICSRS, MIL, IT, Jan. 2018. https://doi.org/10.1109/ICSRS.2017.8272871[15] B. Ahmed, T. Abdulsamad & M. Potrus, ‘Achievement of minimized combinatorial test suite for configuration-aware software functional testing using the Cuckoo Search algorithm,’ Inf Softw Technol, vol. 66, pp. 13–29, Oct. 2015. https://doi.org/10.1016/j.infsof.2015.05.005[16] Y. Wang, M. Zhou, X. Song, M. Gu & J. Sun, “Constructing Cost-Aware Functional Test-Suites Using Nested Differential Evolution Algorithm,” IEEE Trans Evol Comput, vol. 22, no. 3, pp. 334–346, Jun. 2018. https://doi.org/10.1109/TEVC.2017.2747638[17] K. Zamli, B. Alkazemi & G. Kendall, “A Tabu Search hyper-heuristic strategy for t-way test suite generation,” Appl Soft Comput, vol. 44, pp. 57–74, Jul. 2016. https://doi.org/10.1016/j.asoc.2016.03.021[18] J. Torres-Jimenez, H. Avila-George & Izquierdo-Marquez, “A two-stage algorithm for combinatorial testing,” Optim Lett, vol. 11, no. 3, pp. 457–469, Feb. 2016. https://doi.org/10.1007/s11590-016-1012-x[19] I. Izquierdo-Marquez, J. Torres-Jiménez, B. Acevedo-Juárez & H. Avila-George, “A greedy-metaheuristic 3-stage approach to construct covering arrays,” Inf Sci, vol. 460-461, pp. 172–189, Sep. 2018. https:// doi.org/10.1016/j.ins.2018.05.047[20] J. Torres-Jiménez & I. Izquierdo-Márquez, “A Simulated Annealing Algorithm to Construct Covering Perfect Hash Families,” Math Probl Eng, pp. 1–15, Jan. 2018. https://doi.org/10.1155/2018/1860673[21] M. Cohen, C. Colbourn & A. Ling, “Constructing strength three covering arrays with augmented annealing,” Discrete Math, vol. 308, no. 13, pp. 2709–2722, Jun. 2003. https://doi.org/10.1016/j. disc.2006.06.036[22] J. Torres-Jimenez & J. Perez-Torres, “A greedy algorithm to construct covering arrays using a graph representation,” Info Sci, vol. 477, pp. 234–245, Mar. 2019. https://doi.org/10.1016/j.ins.2018.10.048[23] J. Torres-Jiménez & I. Izquierdo-Márquez, “Improved covering arrays using covering perfect hash families with groups of restricted entries,” Appl Math Composite, vol. 369, pp. 1–10, Mar. 2020. https://doi. org/10.1016/j.amc.2019.124826[24] M. Martin, “SOLID: los 5 principios que te ayudarán a desarrollar software de calidad,” profile, 22 Nov. 2018 [Online]. Available in: https://profile.es/blog/principios-solid-desarrollo-software-calidad/237223218Arreglos de coberturaAlgoritmos metaheurísticosAlgoritmos codiciososRecocido simuladoArreglos de cobertura MixtosCovering ArraysMixed covering arraysMetaheuristic algorithmsGreedy algorithmsSimulated annealingPublicationORIGINALUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdfUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdfArtículoapplication/pdf710525https://repositorio.cuc.edu.co/bitstreams/213de245-5c58-4c3f-a689-664ad60ad215/download91f9914e7536722d01d14ff07870868eMD51LICENSElicense.txtlicense.txttext/plain; charset=utf-814828https://repositorio.cuc.edu.co/bitstreams/235cc3a5-5f81-47fd-945c-41a6c0a4e650/download2f9959eaf5b71fae44bbf9ec84150c7aMD52TEXTUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdf.txtUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdf.txtExtracted texttext/plain48309https://repositorio.cuc.edu.co/bitstreams/d59d79b2-ae79-45c3-8304-33e1adbb40f0/downloadeec6b2501047dfedd09affefc865a09dMD53THUMBNAILUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdf.jpgUn Algoritmo metaheurístico para la construcción de arreglos de cobertura mixtos.pdf.jpgGenerated Thumbnailimage/jpeg13739https://repositorio.cuc.edu.co/bitstreams/5881472a-59c6-47b8-a8ee-0255557c8a05/download3f7fae6e6a25c7fea78f5eb6ab045299MD5411323/10178oai:repositorio.cuc.edu.co:11323/101782024-09-17 14:11:11.899https://creativecommons.org/licenses/by-nc-nd/4.0/Derechos de autor 2022 INGE CUCopen.accesshttps://repositorio.cuc.edu.coRepositorio de la Universidad de la Costa CUCrepdigital@cuc.edu.coTEEgT0JSQSAoVEFMIFkgQ09NTyBTRSBERUZJTkUgTcOBUyBBREVMQU5URSkgU0UgT1RPUkdBIEJBSk8gTE9TIFRFUk1JTk9TIERFIEVTVEEgTElDRU5DSUEgUMOaQkxJQ0EgREUgQ1JFQVRJVkUgQ09NTU9OUyAo4oCcTFBDQ+KAnSBPIOKAnExJQ0VOQ0lB4oCdKS4gTEEgT0JSQSBFU1TDgSBQUk9URUdJREEgUE9SIERFUkVDSE9TIERFIEFVVE9SIFkvVSBPVFJBUyBMRVlFUyBBUExJQ0FCTEVTLiBRVUVEQSBQUk9ISUJJRE8gQ1VBTFFVSUVSIFVTTyBRVUUgU0UgSEFHQSBERSBMQSBPQlJBIFFVRSBOTyBDVUVOVEUgQ09OIExBIEFVVE9SSVpBQ0nDk04gUEVSVElORU5URSBERSBDT05GT1JNSURBRCBDT04gTE9TIFTDiVJNSU5PUyBERSBFU1RBIExJQ0VOQ0lBIFkgREUgTEEgTEVZIERFIERFUkVDSE8gREUgQVVUT1IuCgpNRURJQU5URSBFTCBFSkVSQ0lDSU8gREUgQ1VBTFFVSUVSQSBERSBMT1MgREVSRUNIT1MgUVVFIFNFIE9UT1JHQU4gRU4gRVNUQSBMSUNFTkNJQSwgVVNURUQgQUNFUFRBIFkgQUNVRVJEQSBRVUVEQVIgT0JMSUdBRE8gRU4gTE9TIFRFUk1JTk9TIFFVRSBTRSBTRcORQUxBTiBFTiBFTExBLiBFTCBMSUNFTkNJQU5URSBDT05DRURFIEEgVVNURUQgTE9TIERFUkVDSE9TIENPTlRFTklET1MgRU4gRVNUQSBMSUNFTkNJQSBDT05ESUNJT05BRE9TIEEgTEEgQUNFUFRBQ0nDk04gREUgU1VTIFRFUk1JTk9TIFkgQ09ORElDSU9ORVMuCjEuIERlZmluaWNpb25lcwoKYS4JT2JyYSBDb2xlY3RpdmEgZXMgdW5hIG9icmEsIHRhbCBjb21vIHVuYSBwdWJsaWNhY2nDs24gcGVyacOzZGljYSwgdW5hIGFudG9sb2fDrWEsIG8gdW5hIGVuY2ljbG9wZWRpYSwgZW4gbGEgcXVlIGxhIG9icmEgZW4gc3UgdG90YWxpZGFkLCBzaW4gbW9kaWZpY2FjacOzbiBhbGd1bmEsIGp1bnRvIGNvbiB1biBncnVwbyBkZSBvdHJhcyBjb250cmlidWNpb25lcyBxdWUgY29uc3RpdHV5ZW4gb2JyYXMgc2VwYXJhZGFzIGUgaW5kZXBlbmRpZW50ZXMgZW4gc8OtIG1pc21hcywgc2UgaW50ZWdyYW4gZW4gdW4gdG9kbyBjb2xlY3Rpdm8uIFVuYSBPYnJhIHF1ZSBjb25zdGl0dXllIHVuYSBvYnJhIGNvbGVjdGl2YSBubyBzZSBjb25zaWRlcmFyw6EgdW5hIE9icmEgRGVyaXZhZGEgKGNvbW8gc2UgZGVmaW5lIGFiYWpvKSBwYXJhIGxvcyBwcm9ww7NzaXRvcyBkZSBlc3RhIGxpY2VuY2lhLiBhcXVlbGxhIHByb2R1Y2lkYSBwb3IgdW4gZ3J1cG8gZGUgYXV0b3JlcywgZW4gcXVlIGxhIE9icmEgc2UgZW5jdWVudHJhIHNpbiBtb2RpZmljYWNpb25lcywganVudG8gY29uIHVuYSBjaWVydGEgY2FudGlkYWQgZGUgb3RyYXMgY29udHJpYnVjaW9uZXMsIHF1ZSBjb25zdGl0dXllbiBlbiBzw60gbWlzbW9zIHRyYWJham9zIHNlcGFyYWRvcyBlIGluZGVwZW5kaWVudGVzLCBxdWUgc29uIGludGVncmFkb3MgYWwgdG9kbyBjb2xlY3Rpdm8sIHRhbGVzIGNvbW8gcHVibGljYWNpb25lcyBwZXJpw7NkaWNhcywgYW50b2xvZ8OtYXMgbyBlbmNpY2xvcGVkaWFzLgoKYi4JT2JyYSBEZXJpdmFkYSBzaWduaWZpY2EgdW5hIG9icmEgYmFzYWRhIGVuIGxhIG9icmEgb2JqZXRvIGRlIGVzdGEgbGljZW5jaWEgbyBlbiDDqXN0YSB5IG90cmFzIG9icmFzIHByZWV4aXN0ZW50ZXMsIHRhbGVzIGNvbW8gdHJhZHVjY2lvbmVzLCBhcnJlZ2xvcyBtdXNpY2FsZXMsIGRyYW1hdGl6YWNpb25lcywg4oCcZmljY2lvbmFsaXphY2lvbmVz4oCdLCB2ZXJzaW9uZXMgcGFyYSBjaW5lLCDigJxncmFiYWNpb25lcyBkZSBzb25pZG/igJ0sIHJlcHJvZHVjY2lvbmVzIGRlIGFydGUsIHJlc8O6bWVuZXMsIGNvbmRlbnNhY2lvbmVzLCBvIGN1YWxxdWllciBvdHJhIGVuIGxhIHF1ZSBsYSBvYnJhIHB1ZWRhIHNlciB0cmFuc2Zvcm1hZGEsIGNhbWJpYWRhIG8gYWRhcHRhZGEsIGV4Y2VwdG8gYXF1ZWxsYXMgcXVlIGNvbnN0aXR1eWFuIHVuYSBvYnJhIGNvbGVjdGl2YSwgbGFzIHF1ZSBubyBzZXLDoW4gY29uc2lkZXJhZGFzIHVuYSBvYnJhIGRlcml2YWRhIHBhcmEgZWZlY3RvcyBkZSBlc3RhIGxpY2VuY2lhLiAoUGFyYSBldml0YXIgZHVkYXMsIGVuIGVsIGNhc28gZGUgcXVlIGxhIE9icmEgc2VhIHVuYSBjb21wb3NpY2nDs24gbXVzaWNhbCBvIHVuYSBncmFiYWNpw7NuIHNvbm9yYSwgcGFyYSBsb3MgZWZlY3RvcyBkZSBlc3RhIExpY2VuY2lhIGxhIHNpbmNyb25pemFjacOzbiB0ZW1wb3JhbCBkZSBsYSBPYnJhIGNvbiB1bmEgaW1hZ2VuIGVuIG1vdmltaWVudG8gc2UgY29uc2lkZXJhcsOhIHVuYSBPYnJhIERlcml2YWRhIHBhcmEgbG9zIGZpbmVzIGRlIGVzdGEgbGljZW5jaWEpLgoKYy4JTGljZW5jaWFudGUsIGVzIGVsIGluZGl2aWR1byBvIGxhIGVudGlkYWQgdGl0dWxhciBkZSBsb3MgZGVyZWNob3MgZGUgYXV0b3IgcXVlIG9mcmVjZSBsYSBPYnJhIGVuIGNvbmZvcm1pZGFkIGNvbiBsYXMgY29uZGljaW9uZXMgZGUgZXN0YSBMaWNlbmNpYS4KCmQuCUF1dG9yIG9yaWdpbmFsLCBlcyBlbCBpbmRpdmlkdW8gcXVlIGNyZcOzIGxhIE9icmEuCgplLglPYnJhLCBlcyBhcXVlbGxhIG9icmEgc3VzY2VwdGlibGUgZGUgcHJvdGVjY2nDs24gcG9yIGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IgeSBxdWUgZXMgb2ZyZWNpZGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhCgpmLglVc3RlZCwgZXMgZWwgaW5kaXZpZHVvIG8gbGEgZW50aWRhZCBxdWUgZWplcmNpdGEgbG9zIGRlcmVjaG9zIG90b3JnYWRvcyBhbCBhbXBhcm8gZGUgZXN0YSBMaWNlbmNpYSB5IHF1ZSBjb24gYW50ZXJpb3JpZGFkIG5vIGhhIHZpb2xhZG8gbGFzIGNvbmRpY2lvbmVzIGRlIGxhIG1pc21hIHJlc3BlY3RvIGEgbGEgT2JyYSwgbyBxdWUgaGF5YSBvYnRlbmlkbyBhdXRvcml6YWNpw7NuIGV4cHJlc2EgcG9yIHBhcnRlIGRlbCBMaWNlbmNpYW50ZSBwYXJhIGVqZXJjZXIgbG9zIGRlcmVjaG9zIGFsIGFtcGFybyBkZSBlc3RhIExpY2VuY2lhIHBlc2UgYSB1bmEgdmlvbGFjacOzbiBhbnRlcmlvci4KCjIuIERlcmVjaG9zIGRlIFVzb3MgSG9ucmFkb3MgeSBleGNlcGNpb25lcyBMZWdhbGVzLgpOYWRhIGVuIGVzdGEgTGljZW5jaWEgcG9kcsOhIHNlciBpbnRlcnByZXRhZG8gY29tbyB1bmEgZGlzbWludWNpw7NuLCBsaW1pdGFjacOzbiBvIHJlc3RyaWNjacOzbiBkZSBsb3MgZGVyZWNob3MgZGVyaXZhZG9zIGRlbCB1c28gaG9ucmFkbyB5IG90cmFzIGxpbWl0YWNpb25lcyBvIGV4Y2VwY2lvbmVzIGEgbG9zIGRlcmVjaG9zIGRlbCBhdXRvciBiYWpvIGVsIHLDqWdpbWVuIGxlZ2FsIHZpZ2VudGUgbyBkZXJpdmFkbyBkZSBjdWFscXVpZXIgb3RyYSBub3JtYSBxdWUgc2UgbGUgYXBsaXF1ZS4KCjMuIENvbmNlc2nDs24gZGUgbGEgTGljZW5jaWEuCkJham8gbG9zIHTDqXJtaW5vcyB5IGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIGVsIExpY2VuY2lhbnRlIG90b3JnYSBhIFVzdGVkIHVuYSBsaWNlbmNpYSBtdW5kaWFsLCBsaWJyZSBkZSByZWdhbMOtYXMsIG5vIGV4Y2x1c2l2YSB5IHBlcnBldHVhIChkdXJhbnRlIHRvZG8gZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yKSBwYXJhIGVqZXJjZXIgZXN0b3MgZGVyZWNob3Mgc29icmUgbGEgT2JyYSB0YWwgeSBjb21vIHNlIGluZGljYSBhIGNvbnRpbnVhY2nDs246CgphLglSZXByb2R1Y2lyIGxhIE9icmEsIGluY29ycG9yYXIgbGEgT2JyYSBlbiB1bmEgbyBtw6FzIE9icmFzIENvbGVjdGl2YXMsIHkgcmVwcm9kdWNpciBsYSBPYnJhIGluY29ycG9yYWRhIGVuIGxhcyBPYnJhcyBDb2xlY3RpdmFzLgoKYi4JRGlzdHJpYnVpciBjb3BpYXMgbyBmb25vZ3JhbWFzIGRlIGxhcyBPYnJhcywgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYSwgaW5jbHV5w6luZG9sYXMgY29tbyBpbmNvcnBvcmFkYXMgZW4gT2JyYXMgQ29sZWN0aXZhcywgc2Vnw7puIGNvcnJlc3BvbmRhLgoKYy4JRGlzdHJpYnVpciBjb3BpYXMgZGUgbGFzIE9icmFzIERlcml2YWRhcyBxdWUgc2UgZ2VuZXJlbiwgZXhoaWJpcmxhcyBww7pibGljYW1lbnRlLCBlamVjdXRhcmxhcyBww7pibGljYW1lbnRlIHkvbyBwb25lcmxhcyBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4KTG9zIGRlcmVjaG9zIG1lbmNpb25hZG9zIGFudGVyaW9ybWVudGUgcHVlZGVuIHNlciBlamVyY2lkb3MgZW4gdG9kb3MgbG9zIG1lZGlvcyB5IGZvcm1hdG9zLCBhY3R1YWxtZW50ZSBjb25vY2lkb3MgbyBxdWUgc2UgaW52ZW50ZW4gZW4gZWwgZnV0dXJvLiBMb3MgZGVyZWNob3MgYW50ZXMgbWVuY2lvbmFkb3MgaW5jbHV5ZW4gZWwgZGVyZWNobyBhIHJlYWxpemFyIGRpY2hhcyBtb2RpZmljYWNpb25lcyBlbiBsYSBtZWRpZGEgcXVlIHNlYW4gdMOpY25pY2FtZW50ZSBuZWNlc2FyaWFzIHBhcmEgZWplcmNlciBsb3MgZGVyZWNob3MgZW4gb3RybyBtZWRpbyBvIGZvcm1hdG9zLCBwZXJvIGRlIG90cmEgbWFuZXJhIHVzdGVkIG5vIGVzdMOhIGF1dG9yaXphZG8gcGFyYSByZWFsaXphciBvYnJhcyBkZXJpdmFkYXMuIFRvZG9zIGxvcyBkZXJlY2hvcyBubyBvdG9yZ2Fkb3MgZXhwcmVzYW1lbnRlIHBvciBlbCBMaWNlbmNpYW50ZSBxdWVkYW4gcG9yIGVzdGUgbWVkaW8gcmVzZXJ2YWRvcywgaW5jbHV5ZW5kbyBwZXJvIHNpbiBsaW1pdGFyc2UgYSBhcXVlbGxvcyBxdWUgc2UgbWVuY2lvbmFuIGVuIGxhcyBzZWNjaW9uZXMgNChkKSB5IDQoZSkuCgo0LiBSZXN0cmljY2lvbmVzLgpMYSBsaWNlbmNpYSBvdG9yZ2FkYSBlbiBsYSBhbnRlcmlvciBTZWNjacOzbiAzIGVzdMOhIGV4cHJlc2FtZW50ZSBzdWpldGEgeSBsaW1pdGFkYSBwb3IgbGFzIHNpZ3VpZW50ZXMgcmVzdHJpY2Npb25lczoKCmEuCVVzdGVkIHB1ZWRlIGRpc3RyaWJ1aXIsIGV4aGliaXIgcMO6YmxpY2FtZW50ZSwgZWplY3V0YXIgcMO6YmxpY2FtZW50ZSwgbyBwb25lciBhIGRpc3Bvc2ljacOzbiBww7pibGljYSBsYSBPYnJhIHPDs2xvIGJham8gbGFzIGNvbmRpY2lvbmVzIGRlIGVzdGEgTGljZW5jaWEsIHkgVXN0ZWQgZGViZSBpbmNsdWlyIHVuYSBjb3BpYSBkZSBlc3RhIGxpY2VuY2lhIG8gZGVsIElkZW50aWZpY2Fkb3IgVW5pdmVyc2FsIGRlIFJlY3Vyc29zIGRlIGxhIG1pc21hIGNvbiBjYWRhIGNvcGlhIGRlIGxhIE9icmEgcXVlIGRpc3RyaWJ1eWEsIGV4aGliYSBww7pibGljYW1lbnRlLCBlamVjdXRlIHDDumJsaWNhbWVudGUgbyBwb25nYSBhIGRpc3Bvc2ljacOzbiBww7pibGljYS4gTm8gZXMgcG9zaWJsZSBvZnJlY2VyIG8gaW1wb25lciBuaW5ndW5hIGNvbmRpY2nDs24gc29icmUgbGEgT2JyYSBxdWUgYWx0ZXJlIG8gbGltaXRlIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIG8gZWwgZWplcmNpY2lvIGRlIGxvcyBkZXJlY2hvcyBkZSBsb3MgZGVzdGluYXRhcmlvcyBvdG9yZ2Fkb3MgZW4gZXN0ZSBkb2N1bWVudG8uIE5vIGVzIHBvc2libGUgc3VibGljZW5jaWFyIGxhIE9icmEuIFVzdGVkIGRlYmUgbWFudGVuZXIgaW50YWN0b3MgdG9kb3MgbG9zIGF2aXNvcyBxdWUgaGFnYW4gcmVmZXJlbmNpYSBhIGVzdGEgTGljZW5jaWEgeSBhIGxhIGNsw6F1c3VsYSBkZSBsaW1pdGFjacOzbiBkZSBnYXJhbnTDrWFzLiBVc3RlZCBubyBwdWVkZSBkaXN0cmlidWlyLCBleGhpYmlyIHDDumJsaWNhbWVudGUsIGVqZWN1dGFyIHDDumJsaWNhbWVudGUsIG8gcG9uZXIgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBjb24gYWxndW5hIG1lZGlkYSB0ZWNub2zDs2dpY2EgcXVlIGNvbnRyb2xlIGVsIGFjY2VzbyBvIGxhIHV0aWxpemFjacOzbiBkZSBlbGxhIGRlIHVuYSBmb3JtYSBxdWUgc2VhIGluY29uc2lzdGVudGUgY29uIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBMbyBhbnRlcmlvciBzZSBhcGxpY2EgYSBsYSBPYnJhIGluY29ycG9yYWRhIGEgdW5hIE9icmEgQ29sZWN0aXZhLCBwZXJvIGVzdG8gbm8gZXhpZ2UgcXVlIGxhIE9icmEgQ29sZWN0aXZhIGFwYXJ0ZSBkZSBsYSBvYnJhIG1pc21hIHF1ZWRlIHN1amV0YSBhIGxhcyBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhLiBTaSBVc3RlZCBjcmVhIHVuYSBPYnJhIENvbGVjdGl2YSwgcHJldmlvIGF2aXNvIGRlIGN1YWxxdWllciBMaWNlbmNpYW50ZSBkZWJlLCBlbiBsYSBtZWRpZGEgZGUgbG8gcG9zaWJsZSwgZWxpbWluYXIgZGUgbGEgT2JyYSBDb2xlY3RpdmEgY3VhbHF1aWVyIHJlZmVyZW5jaWEgYSBkaWNobyBMaWNlbmNpYW50ZSBvIGFsIEF1dG9yIE9yaWdpbmFsLCBzZWfDum4gbG8gc29saWNpdGFkbyBwb3IgZWwgTGljZW5jaWFudGUgeSBjb25mb3JtZSBsbyBleGlnZSBsYSBjbMOhdXN1bGEgNChjKS4KCmIuCVVzdGVkIG5vIHB1ZWRlIGVqZXJjZXIgbmluZ3VubyBkZSBsb3MgZGVyZWNob3MgcXVlIGxlIGhhbiBzaWRvIG90b3JnYWRvcyBlbiBsYSBTZWNjacOzbiAzIHByZWNlZGVudGUgZGUgbW9kbyBxdWUgZXN0w6luIHByaW5jaXBhbG1lbnRlIGRlc3RpbmFkb3MgbyBkaXJlY3RhbWVudGUgZGlyaWdpZG9zIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLiBFbCBpbnRlcmNhbWJpbyBkZSBsYSBPYnJhIHBvciBvdHJhcyBvYnJhcyBwcm90ZWdpZGFzIHBvciBkZXJlY2hvcyBkZSBhdXRvciwgeWEgc2VhIGEgdHJhdsOpcyBkZSB1biBzaXN0ZW1hIHBhcmEgY29tcGFydGlyIGFyY2hpdm9zIGRpZ2l0YWxlcyAoZGlnaXRhbCBmaWxlLXNoYXJpbmcpIG8gZGUgY3VhbHF1aWVyIG90cmEgbWFuZXJhIG5vIHNlcsOhIGNvbnNpZGVyYWRvIGNvbW8gZXN0YXIgZGVzdGluYWRvIHByaW5jaXBhbG1lbnRlIG8gZGlyaWdpZG8gZGlyZWN0YW1lbnRlIGEgY29uc2VndWlyIHVuIHByb3ZlY2hvIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLCBzaWVtcHJlIHF1ZSBubyBzZSByZWFsaWNlIHVuIHBhZ28gbWVkaWFudGUgdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIGVuIHJlbGFjacOzbiBjb24gZWwgaW50ZXJjYW1iaW8gZGUgb2JyYXMgcHJvdGVnaWRhcyBwb3IgZWwgZGVyZWNobyBkZSBhdXRvci4KCmMuCVNpIHVzdGVkIGRpc3RyaWJ1eWUsIGV4aGliZSBww7pibGljYW1lbnRlLCBlamVjdXRhIHDDumJsaWNhbWVudGUgbyBlamVjdXRhIHDDumJsaWNhbWVudGUgZW4gZm9ybWEgZGlnaXRhbCBsYSBPYnJhIG8gY3VhbHF1aWVyIE9icmEgRGVyaXZhZGEgdSBPYnJhIENvbGVjdGl2YSwgVXN0ZWQgZGViZSBtYW50ZW5lciBpbnRhY3RhIHRvZGEgbGEgaW5mb3JtYWNpw7NuIGRlIGRlcmVjaG8gZGUgYXV0b3IgZGUgbGEgT2JyYSB5IHByb3BvcmNpb25hciwgZGUgZm9ybWEgcmF6b25hYmxlIHNlZ8O6biBlbCBtZWRpbyBvIG1hbmVyYSBxdWUgVXN0ZWQgZXN0w6kgdXRpbGl6YW5kbzogKGkpIGVsIG5vbWJyZSBkZWwgQXV0b3IgT3JpZ2luYWwgc2kgZXN0w6EgcHJvdmlzdG8gKG8gc2V1ZMOzbmltbywgc2kgZnVlcmUgYXBsaWNhYmxlKSwgeS9vIChpaSkgZWwgbm9tYnJlIGRlIGxhIHBhcnRlIG8gbGFzIHBhcnRlcyBxdWUgZWwgQXV0b3IgT3JpZ2luYWwgeS9vIGVsIExpY2VuY2lhbnRlIGh1YmllcmVuIGRlc2lnbmFkbyBwYXJhIGxhIGF0cmlidWNpw7NuICh2LmcuLCB1biBpbnN0aXR1dG8gcGF0cm9jaW5hZG9yLCBlZGl0b3JpYWwsIHB1YmxpY2FjacOzbikgZW4gbGEgaW5mb3JtYWNpw7NuIGRlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBkZWwgTGljZW5jaWFudGUsIHTDqXJtaW5vcyBkZSBzZXJ2aWNpb3MgbyBkZSBvdHJhcyBmb3JtYXMgcmF6b25hYmxlczsgZWwgdMOtdHVsbyBkZSBsYSBPYnJhIHNpIGVzdMOhIHByb3Zpc3RvOyBlbiBsYSBtZWRpZGEgZGUgbG8gcmF6b25hYmxlbWVudGUgZmFjdGlibGUgeSwgc2kgZXN0w6EgcHJvdmlzdG8sIGVsIElkZW50aWZpY2Fkb3IgVW5pZm9ybWUgZGUgUmVjdXJzb3MgKFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcikgcXVlIGVsIExpY2VuY2lhbnRlIGVzcGVjaWZpY2EgcGFyYSBzZXIgYXNvY2lhZG8gY29uIGxhIE9icmEsIHNhbHZvIHF1ZSB0YWwgVVJJIG5vIHNlIHJlZmllcmEgYSBsYSBub3RhIHNvYnJlIGxvcyBkZXJlY2hvcyBkZSBhdXRvciBvIGEgbGEgaW5mb3JtYWNpw7NuIHNvYnJlIGVsIGxpY2VuY2lhbWllbnRvIGRlIGxhIE9icmE7IHkgZW4gZWwgY2FzbyBkZSB1bmEgT2JyYSBEZXJpdmFkYSwgYXRyaWJ1aXIgZWwgY3LDqWRpdG8gaWRlbnRpZmljYW5kbyBlbCB1c28gZGUgbGEgT2JyYSBlbiBsYSBPYnJhIERlcml2YWRhICh2LmcuLCAiVHJhZHVjY2nDs24gRnJhbmNlc2EgZGUgbGEgT2JyYSBkZWwgQXV0b3IgT3JpZ2luYWwsIiBvICJHdWnDs24gQ2luZW1hdG9ncsOhZmljbyBiYXNhZG8gZW4gbGEgT2JyYSBvcmlnaW5hbCBkZWwgQXV0b3IgT3JpZ2luYWwiKS4gVGFsIGNyw6lkaXRvIHB1ZWRlIHNlciBpbXBsZW1lbnRhZG8gZGUgY3VhbHF1aWVyIGZvcm1hIHJhem9uYWJsZTsgZW4gZWwgY2Fzbywgc2luIGVtYmFyZ28sIGRlIE9icmFzIERlcml2YWRhcyB1IE9icmFzIENvbGVjdGl2YXMsIHRhbCBjcsOpZGl0byBhcGFyZWNlcsOhLCBjb21vIG3DrW5pbW8sIGRvbmRlIGFwYXJlY2UgZWwgY3LDqWRpdG8gZGUgY3VhbHF1aWVyIG90cm8gYXV0b3IgY29tcGFyYWJsZSB5IGRlIHVuYSBtYW5lcmEsIGFsIG1lbm9zLCB0YW4gZGVzdGFjYWRhIGNvbW8gZWwgY3LDqWRpdG8gZGUgb3RybyBhdXRvciBjb21wYXJhYmxlLgoKZC4JUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBlcyB1bmEgY29tcG9zaWNpw7NuIG11c2ljYWw6CgppLglSZWdhbMOtYXMgcG9yIGludGVycHJldGFjacOzbiB5IGVqZWN1Y2nDs24gYmFqbyBsaWNlbmNpYXMgZ2VuZXJhbGVzLiBFbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gbGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGRlIGxhIG9icmEgeSBkZSByZWNvbGVjdGFyLCBzZWEgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgU0FZQ08pLCBsYXMgcmVnYWzDrWFzIHBvciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIG8gcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbyBXZWJjYXN0KSBsaWNlbmNpYWRhIGJham8gbGljZW5jaWFzIGdlbmVyYWxlcywgc2kgbGEgaW50ZXJwcmV0YWNpw7NuIG8gZWplY3VjacOzbiBkZSBsYSBvYnJhIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBvcmllbnRhZGEgcG9yIG8gZGlyaWdpZGEgYSBsYSBvYnRlbmNpw7NuIGRlIHVuYSB2ZW50YWphIGNvbWVyY2lhbCBvIHVuYSBjb21wZW5zYWNpw7NuIG1vbmV0YXJpYSBwcml2YWRhLgoKaWkuCVJlZ2Fsw61hcyBwb3IgRm9ub2dyYW1hcy4gRWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGV4Y2x1c2l2byBkZSByZWNvbGVjdGFyLCBpbmRpdmlkdWFsbWVudGUgbyBhIHRyYXbDqXMgZGUgdW5hIHNvY2llZGFkIGRlIGdlc3Rpw7NuIGNvbGVjdGl2YSBkZSBkZXJlY2hvcyBkZSBhdXRvciB5IGRlcmVjaG9zIGNvbmV4b3MgKHBvciBlamVtcGxvLCBsb3MgY29uc2FncmFkb3MgcG9yIGxhIFNBWUNPKSwgdW5hIGFnZW5jaWEgZGUgZGVyZWNob3MgbXVzaWNhbGVzIG8gYWxnw7puIGFnZW50ZSBkZXNpZ25hZG8sIGxhcyByZWdhbMOtYXMgcG9yIGN1YWxxdWllciBmb25vZ3JhbWEgcXVlIFVzdGVkIGNyZWUgYSBwYXJ0aXIgZGUgbGEgb2JyYSAo4oCcdmVyc2nDs24gY292ZXLigJ0pIHkgZGlzdHJpYnV5YSwgZW4gbG9zIHTDqXJtaW5vcyBkZWwgcsOpZ2ltZW4gZGUgZGVyZWNob3MgZGUgYXV0b3IsIHNpIGxhIGNyZWFjacOzbiBvIGRpc3RyaWJ1Y2nDs24gZGUgZXNhIHZlcnNpw7NuIGNvdmVyIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkZXN0aW5hZGEgbyBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgplLglHZXN0acOzbiBkZSBEZXJlY2hvcyBkZSBBdXRvciBzb2JyZSBJbnRlcnByZXRhY2lvbmVzIHkgRWplY3VjaW9uZXMgRGlnaXRhbGVzIChXZWJDYXN0aW5nKS4gUGFyYSBldml0YXIgdG9kYSBjb25mdXNpw7NuLCBlbCBMaWNlbmNpYW50ZSBhY2xhcmEgcXVlLCBjdWFuZG8gbGEgb2JyYSBzZWEgdW4gZm9ub2dyYW1hLCBlbCBMaWNlbmNpYW50ZSBzZSByZXNlcnZhIGVsIGRlcmVjaG8gZXhjbHVzaXZvIGRlIGF1dG9yaXphciBsYSBlamVjdWNpw7NuIHDDumJsaWNhIGRpZ2l0YWwgZGUgbGEgb2JyYSAocG9yIGVqZW1wbG8sIHdlYmNhc3QpIHkgZGUgcmVjb2xlY3RhciwgaW5kaXZpZHVhbG1lbnRlIG8gYSB0cmF2w6lzIGRlIHVuYSBzb2NpZWRhZCBkZSBnZXN0acOzbiBjb2xlY3RpdmEgZGUgZGVyZWNob3MgZGUgYXV0b3IgeSBkZXJlY2hvcyBjb25leG9zIChwb3IgZWplbXBsbywgQUNJTlBSTyksIGxhcyByZWdhbMOtYXMgcG9yIGxhIGVqZWN1Y2nDs24gcMO6YmxpY2EgZGlnaXRhbCBkZSBsYSBvYnJhIChwb3IgZWplbXBsbywgd2ViY2FzdCksIHN1amV0YSBhIGxhcyBkaXNwb3NpY2lvbmVzIGFwbGljYWJsZXMgZGVsIHLDqWdpbWVuIGRlIERlcmVjaG8gZGUgQXV0b3IsIHNpIGVzdGEgZWplY3VjacOzbiBww7pibGljYSBkaWdpdGFsIGVzdMOhIHByaW1vcmRpYWxtZW50ZSBkaXJpZ2lkYSBhIG9idGVuZXIgdW5hIHZlbnRhamEgY29tZXJjaWFsIG8gdW5hIGNvbXBlbnNhY2nDs24gbW9uZXRhcmlhIHByaXZhZGEuCgo1LiBSZXByZXNlbnRhY2lvbmVzLCBHYXJhbnTDrWFzIHkgTGltaXRhY2lvbmVzIGRlIFJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTEFTIFBBUlRFUyBMTyBBQ09SREFSQU4gREUgT1RSQSBGT1JNQSBQT1IgRVNDUklUTywgRUwgTElDRU5DSUFOVEUgT0ZSRUNFIExBIE9CUkEgKEVOIEVMIEVTVEFETyBFTiBFTCBRVUUgU0UgRU5DVUVOVFJBKSDigJxUQUwgQ1VBTOKAnSwgU0lOIEJSSU5EQVIgR0FSQU5Uw41BUyBERSBDTEFTRSBBTEdVTkEgUkVTUEVDVE8gREUgTEEgT0JSQSwgWUEgU0VBIEVYUFJFU0EsIElNUEzDjUNJVEEsIExFR0FMIE8gQ1VBTFFVSUVSQSBPVFJBLCBJTkNMVVlFTkRPLCBTSU4gTElNSVRBUlNFIEEgRUxMQVMsIEdBUkFOVMONQVMgREUgVElUVUxBUklEQUQsIENPTUVSQ0lBQklMSURBRCwgQURBUFRBQklMSURBRCBPIEFERUNVQUNJw5NOIEEgUFJPUMOTU0lUTyBERVRFUk1JTkFETywgQVVTRU5DSUEgREUgSU5GUkFDQ0nDk04sIERFIEFVU0VOQ0lBIERFIERFRkVDVE9TIExBVEVOVEVTIE8gREUgT1RSTyBUSVBPLCBPIExBIFBSRVNFTkNJQSBPIEFVU0VOQ0lBIERFIEVSUk9SRVMsIFNFQU4gTyBOTyBERVNDVUJSSUJMRVMgKFBVRURBTiBPIE5PIFNFUiBFU1RPUyBERVNDVUJJRVJUT1MpLiBBTEdVTkFTIEpVUklTRElDQ0lPTkVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgR0FSQU5Uw41BUyBJTVBMw41DSVRBUywgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjYuIExpbWl0YWNpw7NuIGRlIHJlc3BvbnNhYmlsaWRhZC4KQSBNRU5PUyBRVUUgTE8gRVhJSkEgRVhQUkVTQU1FTlRFIExBIExFWSBBUExJQ0FCTEUsIEVMIExJQ0VOQ0lBTlRFIE5PIFNFUsOBIFJFU1BPTlNBQkxFIEFOVEUgVVNURUQgUE9SIERBw5FPIEFMR1VOTywgU0VBIFBPUiBSRVNQT05TQUJJTElEQUQgRVhUUkFDT05UUkFDVFVBTCwgUFJFQ09OVFJBQ1RVQUwgTyBDT05UUkFDVFVBTCwgT0JKRVRJVkEgTyBTVUJKRVRJVkEsIFNFIFRSQVRFIERFIERBw5FPUyBNT1JBTEVTIE8gUEFUUklNT05JQUxFUywgRElSRUNUT1MgTyBJTkRJUkVDVE9TLCBQUkVWSVNUT1MgTyBJTVBSRVZJU1RPUyBQUk9EVUNJRE9TIFBPUiBFTCBVU08gREUgRVNUQSBMSUNFTkNJQSBPIERFIExBIE9CUkEsIEFVTiBDVUFORE8gRUwgTElDRU5DSUFOVEUgSEFZQSBTSURPIEFEVkVSVElETyBERSBMQSBQT1NJQklMSURBRCBERSBESUNIT1MgREHDkU9TLiBBTEdVTkFTIExFWUVTIE5PIFBFUk1JVEVOIExBIEVYQ0xVU0nDk04gREUgQ0lFUlRBIFJFU1BPTlNBQklMSURBRCwgRU4gQ1VZTyBDQVNPIEVTVEEgRVhDTFVTScOTTiBQVUVERSBOTyBBUExJQ0FSU0UgQSBVU1RFRC4KCjcuIFTDqXJtaW5vLgoKYS4JRXN0YSBMaWNlbmNpYSB5IGxvcyBkZXJlY2hvcyBvdG9yZ2Fkb3MgZW4gdmlydHVkIGRlIGVsbGEgdGVybWluYXLDoW4gYXV0b23DoXRpY2FtZW50ZSBzaSBVc3RlZCBpbmZyaW5nZSBhbGd1bmEgY29uZGljacOzbiBlc3RhYmxlY2lkYSBlbiBlbGxhLiBTaW4gZW1iYXJnbywgbG9zIGluZGl2aWR1b3MgbyBlbnRpZGFkZXMgcXVlIGhhbiByZWNpYmlkbyBPYnJhcyBEZXJpdmFkYXMgbyBDb2xlY3RpdmFzIGRlIFVzdGVkIGRlIGNvbmZvcm1pZGFkIGNvbiBlc3RhIExpY2VuY2lhLCBubyB2ZXLDoW4gdGVybWluYWRhcyBzdXMgbGljZW5jaWFzLCBzaWVtcHJlIHF1ZSBlc3RvcyBpbmRpdmlkdW9zIG8gZW50aWRhZGVzIHNpZ2FuIGN1bXBsaWVuZG8gw61udGVncmFtZW50ZSBsYXMgY29uZGljaW9uZXMgZGUgZXN0YXMgbGljZW5jaWFzLiBMYXMgU2VjY2lvbmVzIDEsIDIsIDUsIDYsIDcsIHkgOCBzdWJzaXN0aXLDoW4gYSBjdWFscXVpZXIgdGVybWluYWNpw7NuIGRlIGVzdGEgTGljZW5jaWEuCgpiLglTdWpldGEgYSBsYXMgY29uZGljaW9uZXMgeSB0w6lybWlub3MgYW50ZXJpb3JlcywgbGEgbGljZW5jaWEgb3RvcmdhZGEgYXF1w60gZXMgcGVycGV0dWEgKGR1cmFudGUgZWwgcGVyw61vZG8gZGUgdmlnZW5jaWEgZGUgbG9zIGRlcmVjaG9zIGRlIGF1dG9yIGRlIGxhIG9icmEpLiBObyBvYnN0YW50ZSBsbyBhbnRlcmlvciwgZWwgTGljZW5jaWFudGUgc2UgcmVzZXJ2YSBlbCBkZXJlY2hvIGEgcHVibGljYXIgeS9vIGVzdHJlbmFyIGxhIE9icmEgYmFqbyBjb25kaWNpb25lcyBkZSBsaWNlbmNpYSBkaWZlcmVudGVzIG8gYSBkZWphciBkZSBkaXN0cmlidWlybGEgZW4gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIExpY2VuY2lhIGVuIGN1YWxxdWllciBtb21lbnRvOyBlbiBlbCBlbnRlbmRpZG8sIHNpbiBlbWJhcmdvLCBxdWUgZXNhIGVsZWNjacOzbiBubyBzZXJ2aXLDoSBwYXJhIHJldm9jYXIgZXN0YSBsaWNlbmNpYSBvIHF1ZSBkZWJhIHNlciBvdG9yZ2FkYSAsIGJham8gbG9zIHTDqXJtaW5vcyBkZSBlc3RhIGxpY2VuY2lhKSwgeSBlc3RhIGxpY2VuY2lhIGNvbnRpbnVhcsOhIGVuIHBsZW5vIHZpZ29yIHkgZWZlY3RvIGEgbWVub3MgcXVlIHNlYSB0ZXJtaW5hZGEgY29tbyBzZSBleHByZXNhIGF0csOhcy4gTGEgTGljZW5jaWEgcmV2b2NhZGEgY29udGludWFyw6Egc2llbmRvIHBsZW5hbWVudGUgdmlnZW50ZSB5IGVmZWN0aXZhIHNpIG5vIHNlIGxlIGRhIHTDqXJtaW5vIGVuIGxhcyBjb25kaWNpb25lcyBpbmRpY2FkYXMgYW50ZXJpb3JtZW50ZS4KCjguIFZhcmlvcy4KCmEuCUNhZGEgdmV6IHF1ZSBVc3RlZCBkaXN0cmlidXlhIG8gcG9uZ2EgYSBkaXNwb3NpY2nDs24gcMO6YmxpY2EgbGEgT2JyYSBvIHVuYSBPYnJhIENvbGVjdGl2YSwgZWwgTGljZW5jaWFudGUgb2ZyZWNlcsOhIGFsIGRlc3RpbmF0YXJpbyB1bmEgbGljZW5jaWEgZW4gbG9zIG1pc21vcyB0w6lybWlub3MgeSBjb25kaWNpb25lcyBxdWUgbGEgbGljZW5jaWEgb3RvcmdhZGEgYSBVc3RlZCBiYWpvIGVzdGEgTGljZW5jaWEuCgpiLglTaSBhbGd1bmEgZGlzcG9zaWNpw7NuIGRlIGVzdGEgTGljZW5jaWEgcmVzdWx0YSBpbnZhbGlkYWRhIG8gbm8gZXhpZ2libGUsIHNlZ8O6biBsYSBsZWdpc2xhY2nDs24gdmlnZW50ZSwgZXN0byBubyBhZmVjdGFyw6EgbmkgbGEgdmFsaWRleiBuaSBsYSBhcGxpY2FiaWxpZGFkIGRlbCByZXN0byBkZSBjb25kaWNpb25lcyBkZSBlc3RhIExpY2VuY2lhIHksIHNpbiBhY2Npw7NuIGFkaWNpb25hbCBwb3IgcGFydGUgZGUgbG9zIHN1amV0b3MgZGUgZXN0ZSBhY3VlcmRvLCBhcXXDqWxsYSBzZSBlbnRlbmRlcsOhIHJlZm9ybWFkYSBsbyBtw61uaW1vIG5lY2VzYXJpbyBwYXJhIGhhY2VyIHF1ZSBkaWNoYSBkaXNwb3NpY2nDs24gc2VhIHbDoWxpZGEgeSBleGlnaWJsZS4KCmMuCU5pbmfDum4gdMOpcm1pbm8gbyBkaXNwb3NpY2nDs24gZGUgZXN0YSBMaWNlbmNpYSBzZSBlc3RpbWFyw6EgcmVudW5jaWFkYSB5IG5pbmd1bmEgdmlvbGFjacOzbiBkZSBlbGxhIHNlcsOhIGNvbnNlbnRpZGEgYSBtZW5vcyBxdWUgZXNhIHJlbnVuY2lhIG8gY29uc2VudGltaWVudG8gc2VhIG90b3JnYWRvIHBvciBlc2NyaXRvIHkgZmlybWFkbyBwb3IgbGEgcGFydGUgcXVlIHJlbnVuY2llIG8gY29uc2llbnRhLgoKZC4JRXN0YSBMaWNlbmNpYSByZWZsZWphIGVsIGFjdWVyZG8gcGxlbm8gZW50cmUgbGFzIHBhcnRlcyByZXNwZWN0byBhIGxhIE9icmEgYXF1w60gbGljZW5jaWFkYS4gTm8gaGF5IGFycmVnbG9zLCBhY3VlcmRvcyBvIGRlY2xhcmFjaW9uZXMgcmVzcGVjdG8gYSBsYSBPYnJhIHF1ZSBubyBlc3TDqW4gZXNwZWNpZmljYWRvcyBlbiBlc3RlIGRvY3VtZW50by4gRWwgTGljZW5jaWFudGUgbm8gc2UgdmVyw6EgbGltaXRhZG8gcG9yIG5pbmd1bmEgZGlzcG9zaWNpw7NuIGFkaWNpb25hbCBxdWUgcHVlZGEgc3VyZ2lyIGVuIGFsZ3VuYSBjb211bmljYWNpw7NuIGVtYW5hZGEgZGUgVXN0ZWQuIEVzdGEgTGljZW5jaWEgbm8gcHVlZGUgc2VyIG1vZGlmaWNhZGEgc2luIGVsIGNvbnNlbnRpbWllbnRvIG11dHVvIHBvciBlc2NyaXRvIGRlbCBMaWNlbmNpYW50ZSB5IFVzdGVkLgo=