Introducción

En el siguiente trabajo se muestran los cálculos realizados para determinar la regresión lineal de un conjunto de datos obtenidos en la práctica anterior la cual consistía en medir la resistencia de un sensor de flexión 40 veces con 3 multímetros distintos, este se doblaba en distintos grados de 0 a 90 y de 90 a 0 y posteriormente se anotaban los datos en un archivo de Excel, estos fueron analizados y procesados para obtener distintas operaciones como el promedio, desviación estándar, coeficiente de variabilidad, lazo de histéresis, entre otras.

Con la obtención de la regresión lineal se determinará que tan eficaz fue el proceso de medición de resistencia del sensor de flexión, ya que se le conoce como un modelo matemático usado para aproximar la relación estadística entre dos variables continuas conocidas como predicción y respuesta.

Abstract

The following work shows the calculations made to determine the linear regression of a set of data obtained in the previous practice, which consisted of measuring the resistance of a bending sensor 40 times with 3 different multimeters, it was bent at different degrees of 0 to 90 and from 90 to 0 and later the data was recorded in an Excel file, these were analyzed and processed to obtain different operations such as the average, standard deviation, preference coefficient, hysteresis loop, among others.

Obtaining the linear regression will determine how effective the flex sensor resistance measurement process was, since it is known as a mathematical model used to approximate the statistical relationship between two continuous variables known as prediction and response.

Objetivo de la investigación

El objetivo de la práctica fue analizar un conjunto de datos obtenidos de la medición de la resistencia de un sensor de flexión y posteriormente analizarlos por medio del calculo de la regresión lineal la cual ayuda saber que tan precisos fueron los cálculos realizados.

Metodología

Mediante la aplicación de la regresión lineal se sabrá si los datos obtenidos por medio de la medición de la resistencia del multimetro se hicieron de forma eficaz. Se utiliza el método de mínimo según Arias (17 de junio del 2020) El método de los mínimos cuadrados se utiliza para calcular la recta de regresión lineal que minimiza los residuos, esto es, las diferencias entre los valores reales y los estimados por la recta. Se revisa su fundamento y la forma de calcular los coeficientes de regresión con este método.

Mediante el uso de la formula se obtuvo del valor “y testada (y^)” es “a0+a1x”

Para obtener el resultado de r cuadrada se utilizan los valores de todos los datos recabados y se divide el valor de SSR entre el valor de SST se verifica que el resultado de r cuadrada sea lo más cercano posible y que los pasos anteriores no presenten algún error qué puede verificar mediante cumpliendo las siguientes condiciones que el resultado sea un valor relacionado entre 0 y 1 de no ser así el procedimiento es erróneo cómo último pasó esta práctica también puede generar una gráfica con regresión lineal simple representativa de cada dato en el proceso.

PRÁCTICA

Tabla del Multimetro 1

La siguiente tabla contiene los datos que se usarán para obtener el análisis sobre la regresión lineal ya que anteriormente el lazo de histéresis de estos datos fue el mejor:

Tabla de x y y (posiciones y promedios)

Los datos con los que se trabajaran son las posiciones del sensor es decir los grados en los que fue dobledo y los promedios de las observaciones realizadas:

Promedio de las observaciones

 [1] 23.7025 24.4525 24.3700 24.1700 24.0850 24.2750 24.4575 24.6650 24.9450 24.8225
[11] 25.0900 24.8150 25.0100 25.1125 25.1050 25.0125 24.8925 24.4150 23.7750

La tabla es la siguiente:

Ahora se obtienen los promedios de la columnas “x” y “y” :

Obtener promedio de x

Se suman los elementos de la columna x y se divide entre el número de estos:

[1] 42.63158

Obtener promedio de y

Se suman los elementos de la columna y y se divide entre el número de estos:

[1] 24.58803

Obtener a1

A continuación, se calcula a1, este proceso se hará por partes.

Primero se cálcula el numerador de la formula anteriormente vista:

(xi-x)(yi-y)=

[1] 138.5487

Ahora se calcula el denominador:

(xi-x)^2 =

[1] 14368.42

Finalmente se realiza la división y se obtiene que a0 es igual a:

Dividir sumatoria(xi-x)(yi-y)/ sumatoria(xi-x)^2 =

[1] 0.009642582

Obtener a0

Se procede a calcular a0 el cual se obtiene del promedio de la columna de y menos el producto de a1 y el promedio de la columna x.

Entonces a0=

[1] 24.17695

Obtener (yi-promedioy)^2

Ahora se le agrega otra columna a la tabla de x y y, esta se saca restándole a cada uno de los elementos de la columna y el promedio de esta columna y posteriormente elevarlo al cuadrado:

Obtener y testada=a0+a1xi

Se le agrega otra columna a la tabla de x y y,donde se obtenga “y testada”:

Obtener (y Testada-promedio de y)^2

Se le agrega otra columna a la tabla de x y y, donde se obtenga la resta de “y testada” y el promedio de la coluna de y, esto posteriormente elevado al cuadrado:

Obtener SST

La suma de los cuadrados totales, denotada SST, es la diferencia al cuadrado entre la variable dependiente observada y su media. sst=

[1] 3.56892

Obtener SSR

La suma de cuadrados de los residuos es una medida del ajuste del modelo general. ssr=

[1] 1.335967

Obtener ((R)^2)

El coeficiente de determinación que tiene como principal función predecir el resultado de hipótesis.

R^2=

[1] 0.3743337

Recta de regresión lineal simple

Preguntas

  1. ¿Qué sabia? Se sabia sobre manipular y analizar los datos, realizar operaciones como la obtención del promedio, la sustitución de los datos en la formula de la regresión lineal y la obtención del porcentaje lineal.

  2. ¿Qué aprendí? Aprendí sobre lo que significa que el porcentaje lineal salga dentro del rango de 0 y 1, además a desarrollar la formula de la regresión lineal y a graficar la recta de la regresión lineal

  3. ¿Cómo lo aprendí? Siguiendo los pasos vistos en clase, investigando acerca del tema y desarrollando el análisis de los datos por medio de las fórmulas.

Conclusión

Finalmente, en esta práctica se aprendió sobre el calculo de la regresión lineal de un conjunto de datos, los resultados obtenidos en esta práctica resultaron de una forma satisfactoria ya que el porcentaje de linealidad se encuentra dentro del rango establecido esto quiere decir que los cálculos realizados sobre la resistividad de un sensor de flexión se hicieron de manera eficaz.

También se aprendió acerca de cómo utilizar distintas operaciones con funciones de RStudio, además se comprendido sobre como desarrollar la solución de las formulas que se necesitaron durante esta práctica.

LS0tDQp0aXRsZTogIlNlbnNvciBkZSBmbGV4acOzbiAtUmVncmVzacOzbiBsaW5lYWwgIg0KYXV0aG9yOiAiRXF1aXBvIDQiDQpkYXRlOiAiMjEtMDQtMjAyMiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCioqSW50cm9kdWNjacOzbiAqKg0KDQpFbiBlbCBzaWd1aWVudGUgdHJhYmFqbyBzZSBtdWVzdHJhbiBsb3MgY8OhbGN1bG9zICByZWFsaXphZG9zIHBhcmEgZGV0ZXJtaW5hciBsYSByZWdyZXNpw7NuIGxpbmVhbCBkZSB1biBjb25qdW50byBkZSBkYXRvcyBvYnRlbmlkb3MgZW4gbGEgcHLDoWN0aWNhIGFudGVyaW9yIGxhIGN1YWwgY29uc2lzdMOtYSBlbiBtZWRpciBsYSByZXNpc3RlbmNpYSBkZSB1biBzZW5zb3IgZGUgZmxleGnDs24gNDAgdmVjZXMgY29uIDMgbXVsdMOtbWV0cm9zIGRpc3RpbnRvcywgZXN0ZSBzZSBkb2JsYWJhIGVuIGRpc3RpbnRvcyBncmFkb3MgZGUgMCBhIDkwIHkgZGUgOTAgYSAwIHkgcG9zdGVyaW9ybWVudGUgc2UgYW5vdGFiYW4gbG9zIGRhdG9zICBlbiB1biBhcmNoaXZvIGRlIEV4Y2VsLCBlc3RvcyBmdWVyb24gYW5hbGl6YWRvcyB5IHByb2Nlc2Fkb3MgcGFyYSBvYnRlbmVyIGRpc3RpbnRhcyBvcGVyYWNpb25lcyBjb21vIGVsIHByb21lZGlvLCBkZXN2aWFjacOzbiBlc3TDoW5kYXIsIGNvZWZpY2llbnRlIGRlIHZhcmlhYmlsaWRhZCwgbGF6byBkZSBoaXN0w6lyZXNpcywgZW50cmUgb3RyYXMuICANCg0KQ29uIGxhIG9idGVuY2nDs24gZGUgbGEgcmVncmVzacOzbiBsaW5lYWwgc2UgZGV0ZXJtaW5hcsOhIHF1ZSB0YW4gZWZpY2F6IGZ1ZSBlbCBwcm9jZXNvIGRlIG1lZGljacOzbiBkZSByZXNpc3RlbmNpYSBkZWwgc2Vuc29yIGRlIGZsZXhpw7NuLCB5YSBxdWUgc2UgbGUgY29ub2NlIGNvbW8gdW4gbW9kZWxvIG1hdGVtw6F0aWNvIHVzYWRvIHBhcmEgYXByb3hpbWFyIGxhIHJlbGFjacOzbiBlc3RhZMOtc3RpY2EgZW50cmUgZG9zIHZhcmlhYmxlcyBjb250aW51YXMgY29ub2NpZGFzIGNvbW8gcHJlZGljY2nDs24geSByZXNwdWVzdGEuIA0KIA0KDQoqKkFic3RyYWN0KioNCg0KVGhlIGZvbGxvd2luZyB3b3JrIHNob3dzIHRoZSBjYWxjdWxhdGlvbnMgbWFkZSB0byBkZXRlcm1pbmUgdGhlIGxpbmVhciByZWdyZXNzaW9uIG9mIGEgc2V0IG9mIGRhdGEgb2J0YWluZWQgaW4gdGhlIHByZXZpb3VzIHByYWN0aWNlLCB3aGljaCBjb25zaXN0ZWQgb2YgbWVhc3VyaW5nIHRoZSByZXNpc3RhbmNlIG9mIGEgYmVuZGluZyBzZW5zb3IgNDAgdGltZXMgd2l0aCAzIGRpZmZlcmVudCBtdWx0aW1ldGVycywgaXQgd2FzIGJlbnQgYXQgZGlmZmVyZW50IGRlZ3JlZXMgb2YgMCB0byA5MCBhbmQgZnJvbSA5MCB0byAwIGFuZCBsYXRlciB0aGUgZGF0YSB3YXMgcmVjb3JkZWQgaW4gYW4gRXhjZWwgZmlsZSwgdGhlc2Ugd2VyZSBhbmFseXplZCBhbmQgcHJvY2Vzc2VkIHRvIG9idGFpbiBkaWZmZXJlbnQgb3BlcmF0aW9ucyBzdWNoIGFzIHRoZSBhdmVyYWdlLCBzdGFuZGFyZCBkZXZpYXRpb24sIHByZWZlcmVuY2UgY29lZmZpY2llbnQsIGh5c3RlcmVzaXMgbG9vcCwgYW1vbmcgb3RoZXJzLg0KDQpPYnRhaW5pbmcgdGhlIGxpbmVhciByZWdyZXNzaW9uIHdpbGwgZGV0ZXJtaW5lIGhvdyBlZmZlY3RpdmUgdGhlIGZsZXggc2Vuc29yIHJlc2lzdGFuY2UgbWVhc3VyZW1lbnQgcHJvY2VzcyB3YXMsIHNpbmNlIGl0IGlzIGtub3duIGFzIGEgbWF0aGVtYXRpY2FsIG1vZGVsIHVzZWQgdG8gYXBwcm94aW1hdGUgdGhlIHN0YXRpc3RpY2FsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byBjb250aW51b3VzIHZhcmlhYmxlcyBrbm93biBhcyBwcmVkaWN0aW9uIGFuZCByZXNwb25zZS4NCg0KDQoqKk9iamV0aXZvIGRlIGxhIGludmVzdGlnYWNpw7NuKioNCg0KRWwgb2JqZXRpdm8gZGUgbGEgcHLDoWN0aWNhIGZ1ZSBhbmFsaXphciB1biBjb25qdW50byBkZSBkYXRvcyBvYnRlbmlkb3MgZGUgbGEgbWVkaWNpw7NuIGRlIGxhIHJlc2lzdGVuY2lhIGRlIHVuIHNlbnNvciBkZSBmbGV4acOzbiB5IHBvc3Rlcmlvcm1lbnRlIGFuYWxpemFybG9zIHBvciBtZWRpbyBkZWwgY2FsY3VsbyBkZSBsYSByZWdyZXNpw7NuIGxpbmVhbCBsYSBjdWFsIGF5dWRhIHNhYmVyIHF1ZSB0YW4gcHJlY2lzb3MgZnVlcm9uIGxvcyBjw6FsY3Vsb3MgcmVhbGl6YWRvcy4gDQoNCioqTWV0b2RvbG9nw61hKioNCg0KTWVkaWFudGUgbGEgYXBsaWNhY2nDs24gZGUgbGEgcmVncmVzacOzbiBsaW5lYWwgc2Ugc2FicsOhIHNpIGxvcyBkYXRvcyBvYnRlbmlkb3MgcG9yIG1lZGlvIGRlIGxhIG1lZGljacOzbiBkZSBsYSByZXNpc3RlbmNpYSBkZWwgbXVsdGltZXRybyBzZSBoaWNpZXJvbiBkZSBmb3JtYSBlZmljYXouIFNlIHV0aWxpemEgZWwgbcOpdG9kbyBkZSBtw61uaW1vIHNlZ8O6biBBcmlhcyAoMTcgZGUganVuaW8gZGVsIDIwMjApIEVsIG3DqXRvZG8gZGUgbG9zIG3DrW5pbW9zIGN1YWRyYWRvcyBzZSB1dGlsaXphIHBhcmEgY2FsY3VsYXIgbGEgcmVjdGEgZGUgcmVncmVzacOzbiBsaW5lYWwgcXVlIG1pbmltaXphIGxvcyByZXNpZHVvcywgZXN0byBlcywgbGFzIGRpZmVyZW5jaWFzIGVudHJlIGxvcyB2YWxvcmVzIHJlYWxlcyB5IGxvcyBlc3RpbWFkb3MgcG9yIGxhIHJlY3RhLiBTZSByZXZpc2Egc3UgZnVuZGFtZW50byB5IGxhIGZvcm1hIGRlIGNhbGN1bGFyIGxvcyBjb2VmaWNpZW50ZXMgZGUgcmVncmVzacOzbiBjb24gZXN0ZSBtw6l0b2RvLg0KDQpNZWRpYW50ZSBlbCB1c28gZGUgbGEgZm9ybXVsYSBzZSBvYnR1dm8gZGVsIHZhbG9yIOKAnHkgdGVzdGFkYSAoeV4p4oCdIGVzIOKAnGEwK2ExeOKAnQ0KDQoNClBhcmEgb2J0ZW5lciBlbCByZXN1bHRhZG8gZGUgciBjdWFkcmFkYSBzZSB1dGlsaXphbiBsb3MgdmFsb3JlcyBkZSB0b2RvcyBsb3MgZGF0b3MgcmVjYWJhZG9zIHkgc2UgZGl2aWRlIGVsIHZhbG9yIGRlIFNTUiBlbnRyZSBlbCB2YWxvciBkZSBTU1Qgc2UgdmVyaWZpY2EgcXVlIGVsIHJlc3VsdGFkbyBkZSByIGN1YWRyYWRhIHNlYSBsbyBtw6FzIGNlcmNhbm8gcG9zaWJsZSB5IHF1ZSBsb3MgcGFzb3MgYW50ZXJpb3JlcyBubyBwcmVzZW50ZW4gYWxnw7puIGVycm9yIHF1w6kgcHVlZGUgdmVyaWZpY2FyIG1lZGlhbnRlIGN1bXBsaWVuZG8gbGFzIHNpZ3VpZW50ZXMgY29uZGljaW9uZXMgcXVlIGVsIHJlc3VsdGFkbyBzZWEgdW4gdmFsb3IgcmVsYWNpb25hZG8gZW50cmUgMCB5IDEgZGUgbm8gc2VyIGFzw60gZWwgcHJvY2VkaW1pZW50byBlcyBlcnLDs25lbyBjw7NtbyDDumx0aW1vIHBhc8OzIGVzdGEgcHLDoWN0aWNhIHRhbWJpw6luIHB1ZWRlIGdlbmVyYXIgdW5hIGdyw6FmaWNhIGNvbiByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgcmVwcmVzZW50YXRpdmEgZGUgY2FkYSBkYXRvIGVuIGVsIHByb2Nlc28uDQoNCioqUFLDgUNUSUNBKioNCg0KKipUYWJsYSBkZWwgTXVsdGltZXRybyAxICoqDQoNCkxhIHNpZ3VpZW50ZSB0YWJsYSBjb250aWVuZSBsb3MgZGF0b3MgcXVlIHNlIHVzYXLDoW4gcGFyYSBvYnRlbmVyIGVsIGFuw6FsaXNpcyBzb2JyZSBsYSByZWdyZXNpw7NuIGxpbmVhbCB5YSBxdWUgYW50ZXJpb3JtZW50ZSBlbCBsYXpvIGRlIGhpc3TDqXJlc2lzIGRlIGVzdG9zIGRhdG9zIGZ1ZSBlbCBtZWpvcjoNCg0KYGBge3IgZWNobz1GYWxzZX0NCm0xIDwtIHJlYWQuY3N2KCJDOi9Vc2Vycy9Mb3JlbGkvRG93bmxvYWRzL1NlbnNvci9tdWx0MS5jc3YiKQ0KYGBgDQpgYGB7ciBlY2hvPUZhbHNlfQ0Kc2hvdyhtMSkNCmBgYCANCioqVGFibGEgZGUgeCB5IHkgKHBvc2ljaW9uZXMgeSBwcm9tZWRpb3MpICoqDQoNCkxvcyBkYXRvcyBjb24gbG9zIHF1ZSBzZSB0cmFiYWphcmFuIHNvbiBsYXMgcG9zaWNpb25lcyBkZWwgc2Vuc29yIGVzIGRlY2lyIGxvcyBncmFkb3MgZW4gbG9zIHF1ZSBmdWUgZG9ibGVkbyB5IGxvcyBwcm9tZWRpb3MgZGUgbGFzIG9ic2VydmFjaW9uZXMgcmVhbGl6YWRhczoNCmBgYHtyIGVjaG89RmFsc2V9DQp0YWIgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL0xvcmVsaS9Eb3dubG9hZHMvUmVncmVzaW9uL1RhYi5jc3YiKQ0KYGBgDQoNCioqUHJvbWVkaW8gZGUgbGFzIG9ic2VydmFjaW9uZXMqKg0KYGBge3IgZWNobz1GYWxzZX0NClByb21lZGlvPXRhYiR5PXJvd01lYW5zKG0xWywyOjQxXSkNCnNob3coUHJvbWVkaW8pDQpgYGANCkxhIHRhYmxhIGVzIGxhIHNpZ3VpZW50ZTogDQpgYGB7ciBlY2hvPUZhbHNlfQ0Kc2hvdyh0YWIpDQpgYGANCkFob3JhIHNlIG9idGllbmVuIGxvcyBwcm9tZWRpb3MgZGUgbGEgY29sdW1uYXMg4oCceOKAnSB5IOKAnHnigJ0gOg0KDQoqKk9idGVuZXIgcHJvbWVkaW8gZGUgeCoqDQoNClNlIHN1bWFuIGxvcyBlbGVtZW50b3MgZGUgbGEgY29sdW1uYSB4IHkgc2UgZGl2aWRlIGVudHJlIGVsIG7Dum1lcm8gZGUgZXN0b3M6DQpgYGB7ciBlY2hvPUZhbHNlfQ0KcHJvbWVkaW94PW1lYW4odGFiJMOvLi54KQ0Kc2hvdyhwcm9tZWRpb3gpDQpgYGANCioqT2J0ZW5lciBwcm9tZWRpbyBkZSB5KioNCg0KU2Ugc3VtYW4gbG9zIGVsZW1lbnRvcyBkZSBsYSBjb2x1bW5hIHkgeSBzZSBkaXZpZGUgZW50cmUgZWwgbsO6bWVybyBkZSBlc3RvczoNCmBgYHtyIGVjaG89RmFsc2V9DQpwcm9tZWRpb3k9bWVhbih0YWIkeSkNCnNob3cocHJvbWVkaW95KQ0KYGBgDQoNCioqT2J0ZW5lciBhMSoqDQoNCkEgY29udGludWFjacOzbiwgc2UgY2FsY3VsYSBhMSwgZXN0ZSBwcm9jZXNvIHNlIGhhcsOhIHBvciBwYXJ0ZXMuDQoNClByaW1lcm8gc2UgY8OhbGN1bGEgZWwgbnVtZXJhZG9yIGRlIGxhIGZvcm11bGEgYW50ZXJpb3JtZW50ZSB2aXN0YTogDQoNCioqKHhpLXgpKHlpLXkpPSoqDQpgYGB7ciBlY2hvPUZhbHNlfQ0KeGk9dGFiJMOvLi54DQp5aT10YWIkeQ0KYGBgDQpgYGB7ciBlY2hvPUZhbHNlfQ0KY29udGFkb3IxPTANCmZvcihpIGluIDE6MTkpew0KICBjb250YWRvcjE9KCh4aVtpXS1wcm9tZWRpb3gpKih5aVtpXS1wcm9tZWRpb3kpKStjb250YWRvcjENCn0NCnNob3coY29udGFkb3IxKQ0KYGBgDQpBaG9yYSBzZSBjYWxjdWxhIGVsIGRlbm9taW5hZG9yOg0KDQoqKih4aS14KV4yID0qKg0KYGBge3IgZWNobz1GYWxzZX0NCmNvbnRhZG9yMj0wDQpmb3IoaSBpbiAxOjE5KXsNCiAgY29udGFkb3IyPSgoeGlbaV0tcHJvbWVkaW94KV4yKStjb250YWRvcjINCn0NCnNob3coY29udGFkb3IyKQ0KYGBgDQpGaW5hbG1lbnRlIHNlIHJlYWxpemEgbGEgZGl2aXNpw7NuIHkgc2Ugb2J0aWVuZSBxdWUgYTAgZXMgaWd1YWwgYToNCg0KKipEaXZpZGlyIHN1bWF0b3JpYSh4aS14KSh5aS15KS8gc3VtYXRvcmlhKHhpLXgpXjIgPSoqDQpgYGB7ciBlY2hvPUZhbHNlfQ0KYTE9Y29udGFkb3IxL2NvbnRhZG9yMg0Kc2hvdyhhMSkNCmBgYA0KKipPYnRlbmVyIGEwKioNCg0KU2UgcHJvY2VkZSBhIGNhbGN1bGFyIGEwIGVsIGN1YWwgc2Ugb2J0aWVuZSBkZWwgcHJvbWVkaW8gZGUgbGEgY29sdW1uYSBkZSB5IG1lbm9zIGVsIHByb2R1Y3RvIGRlIGExIHkgZWwgcHJvbWVkaW8gZGUgbGEgY29sdW1uYSB4Lg0KDQpFbnRvbmNlcyBhMD0NCmBgYHtyIGVjaG89RmFsc2V9DQphMD1wcm9tZWRpb3ktKGExKnByb21lZGlveCkNCnNob3coYTApDQpgYGANCg0KKipPYnRlbmVyICh5aS1wcm9tZWRpb3kpXjIqKg0KDQpBaG9yYSBzZSBsZSBhZ3JlZ2Egb3RyYSBjb2x1bW5hIGEgbGEgdGFibGEgZGUgeCB5IHksIGVzdGEgc2Ugc2FjYSByZXN0w6FuZG9sZSBhIGNhZGEgdW5vIGRlIGxvcyBlbGVtZW50b3MgZGUgbGEgY29sdW1uYSB5IGVsIHByb21lZGlvIGRlIGVzdGEgY29sdW1uYSB5IHBvc3Rlcmlvcm1lbnRlIGVsZXZhcmxvIGFsIGN1YWRyYWRvOiANCg0KYGBge3IgZWNobz1GYWxzZX0NCmZvcihpIGluIDE6MTkpew0KICB0YWIkIigoeWktcHJvbWVkaW8gZGUgeSleMikiW2ldPC0oKHlpW2ldLXByb21lZGlveSleMikNCn0NCnNob3codGFiKQ0KYGBgDQoNCioqT2J0ZW5lciB5IHRlc3RhZGE9YTArYTF4aSoqDQoNCiBTZSBsZSBhZ3JlZ2Egb3RyYSBjb2x1bW5hIGEgbGEgdGFibGEgZGUgeCB5IHksZG9uZGUgc2Ugb2J0ZW5nYSAieSB0ZXN0YWRhIjoNCmBgYHtyIGVjaG89RmFsc2V9DQpmb3IoaSBpbiAxOjE5KXsNCiAgdGFiJCJ5VGVzdGFkYT0gYTArYTEoeGkpIltpXTwtKGEwKyhhMSooeGlbaV0pKSkgDQp9DQpzaG93KHRhYikNCmBgYA0KKipPYnRlbmVyICh5IFRlc3RhZGEtcHJvbWVkaW8gZGUgeSleMioqDQoNClNlIGxlIGFncmVnYSBvdHJhIGNvbHVtbmEgYSBsYSB0YWJsYSBkZSB4IHkgeSwgZG9uZGUgc2Ugb2J0ZW5nYSBsYSByZXN0YSBkZSAieSB0ZXN0YWRhIiB5IGVsIHByb21lZGlvIGRlIGxhIGNvbHVuYSBkZSB5LCBlc3RvIHBvc3Rlcmlvcm1lbnRlIGVsZXZhZG8gYWwgY3VhZHJhZG86DQpgYGB7ciBlY2hvPUZhbHNlfQ0KZm9yKGkgaW4gMToxOSl7DQogIHRhYiQiKHlUZXN0YWRhIC0gcHJvbWVkaW8gZGUgeSleMiJbaV08LSgodGFiJGB5VGVzdGFkYT0gYTArYTEoeGkpYFtpXS0ocHJvbWVkaW95KSleMikNCn0NCnNob3codGFiKQ0KYGBgIA0KDQoNCioqT2J0ZW5lciBTU1QqKg0KDQpMYSBzdW1hIGRlIGxvcyBjdWFkcmFkb3MgdG90YWxlcywgZGVub3RhZGEgU1NULCBlcyBsYSBkaWZlcmVuY2lhIGFsIGN1YWRyYWRvIGVudHJlIGxhIHZhcmlhYmxlIGRlcGVuZGllbnRlIG9ic2VydmFkYSB5IHN1IG1lZGlhLiANCnNzdD0NCmBgYHtyIGVjaG89RmFsc2V9DQpzc3Q9c3VtKHRhYiRgKCh5aS1wcm9tZWRpbyBkZSB5KV4yKWApDQpzaG93KHNzdCkNCmBgYCAgDQoqKk9idGVuZXIgU1NSKioNCg0KTGEgc3VtYSBkZSBjdWFkcmFkb3MgZGUgbG9zIHJlc2lkdW9zIGVzIHVuYSBtZWRpZGEgZGVsIGFqdXN0ZSBkZWwgbW9kZWxvIGdlbmVyYWwuDQpzc3I9DQpgYGB7ciBlY2hvPUZhbHNlfQ0Kc3NyPXN1bSh0YWIkYCh5VGVzdGFkYSAtIHByb21lZGlvIGRlIHkpXjJgKQ0Kc2hvdyhzc3IpDQpgYGAgIA0KKipPYnRlbmVyICgoUileMikqKg0KDQpFbCBjb2VmaWNpZW50ZSBkZSBkZXRlcm1pbmFjacOzbiBxdWUgdGllbmUgY29tbyBwcmluY2lwYWwgZnVuY2nDs24gcHJlZGVjaXIgZWwgcmVzdWx0YWRvIGRlIGhpcMOzdGVzaXMuDQoNClJeMj0NCmBgYHtyIGVjaG89RmFsc2V9DQpSPXNzci9zc3QNCnNob3coUikNCmBgYCAgIA0KKipSZWN0YSBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUqKg0KDQpgYGB7ciBlY2hvPUZhbHNlfQ0KcGxvdCh0YWIkw68uLngsdGFiJHksIGNvbD0icmVkIiwgeGxhYj0iR3JhZG9zIix5bGFiPSJQcm9tZWRpbyBkZSBsYSByZXNpc3RlbmNpYSIpDQpsaW5lcyh0YWIkw68uLngsdGFiJGB5VGVzdGFkYT0gYTArYTEoeGkpYCwgY29sPSJibHVlIix4bGFiPSJHcmFkb3MiLHlsYWI9IlByb21lZGlvIGRlIHJlc2lzdGVuY2lhIix0eXBlPSJsIikNCmBgYCAgIA0KKipQcmVndW50YXMqKg0KDQoxLgnCv1F1w6kgc2FiaWE/IFNlIHNhYmlhIHNvYnJlIG1hbmlwdWxhciB5IGFuYWxpemFyIGxvcyBkYXRvcywgcmVhbGl6YXIgb3BlcmFjaW9uZXMgY29tbyBsYSBvYnRlbmNpw7NuIGRlbCBwcm9tZWRpbywgbGEgc3VzdGl0dWNpw7NuIGRlIGxvcyBkYXRvcyBlbiBsYSBmb3JtdWxhIGRlIGxhIHJlZ3Jlc2nDs24gbGluZWFsIHkgbGEgb2J0ZW5jacOzbiBkZWwgcG9yY2VudGFqZSBsaW5lYWwuDQoNCjIuCcK/UXXDqSBhcHJlbmTDrT8gQXByZW5kw60gc29icmUgbG8gcXVlIHNpZ25pZmljYSBxdWUgZWwgcG9yY2VudGFqZSBsaW5lYWwgc2FsZ2EgZGVudHJvIGRlbCByYW5nbyBkZSAwIHkgMSwgYWRlbcOhcyBhIGRlc2Fycm9sbGFyIGxhIGZvcm11bGEgZGUgbGEgcmVncmVzacOzbiBsaW5lYWwgeSBhIGdyYWZpY2FyIGxhIHJlY3RhIGRlIGxhIHJlZ3Jlc2nDs24gbGluZWFsDQoNCjMuCcK/Q8OzbW8gbG8gYXByZW5kw60/IFNpZ3VpZW5kbyBsb3MgcGFzb3MgdmlzdG9zIGVuIGNsYXNlLCBpbnZlc3RpZ2FuZG8gYWNlcmNhIGRlbCB0ZW1hIHkgZGVzYXJyb2xsYW5kbyBlbCBhbsOhbGlzaXMgZGUgbG9zIGRhdG9zIHBvciBtZWRpbyBkZSBsYXMgZsOzcm11bGFzLg0KDQoNCg0KKipDb25jbHVzacOzbioqDQoNCkZpbmFsbWVudGUsIGVuIGVzdGEgcHLDoWN0aWNhIHNlIGFwcmVuZGnDsyBzb2JyZSBlbCBjYWxjdWxvIGRlIGxhIHJlZ3Jlc2nDs24gbGluZWFsIGRlIHVuIGNvbmp1bnRvIGRlIGRhdG9zLCBsb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MgZW4gZXN0YSBwcsOhY3RpY2EgcmVzdWx0YXJvbiBkZSB1bmEgZm9ybWEgc2F0aXNmYWN0b3JpYSB5YSBxdWUgZWwgcG9yY2VudGFqZSBkZSBsaW5lYWxpZGFkIHNlIGVuY3VlbnRyYSBkZW50cm8gZGVsIHJhbmdvIGVzdGFibGVjaWRvIGVzdG8gcXVpZXJlIGRlY2lyIHF1ZSBsb3MgY8OhbGN1bG9zIHJlYWxpemFkb3Mgc29icmUgbGEgcmVzaXN0aXZpZGFkIGRlIHVuIHNlbnNvciBkZSBmbGV4acOzbiBzZSBoaWNpZXJvbiBkZSBtYW5lcmEgZWZpY2F6LiANCg0KVGFtYmnDqW4gc2UgYXByZW5kacOzIGFjZXJjYSBkZSBjw7NtbyB1dGlsaXphciBkaXN0aW50YXMgb3BlcmFjaW9uZXMgY29uIGZ1bmNpb25lcyBkZSBSU3R1ZGlvLCBhZGVtw6FzIHNlIGNvbXByZW5kaWRvIHNvYnJlIGNvbW8gZGVzYXJyb2xsYXIgbGEgc29sdWNpw7NuIGRlIGxhcyBmb3JtdWxhcyBxdWUgc2UgbmVjZXNpdGFyb24gZHVyYW50ZSBlc3RhIHByw6FjdGljYS4gDQoNCg==