La base de datos whas500.dta, contiene la información de 500 participantes del estudio “Worcester Heart Attack Study”. Los autores tienen como objetivo evaluar factores asociados a la supervicencia desde la admisión al hospital en pacientes con infarto agudo de miocardio. La muestra total es de 276 participantes. Se analizaron factores medidos en la admisión como la edad (age, years), género (gender=1:Masculino), la frecuencia cardíaca (hr:heart rate, beats per minute), la presión arterial sistólica (sysbp, mmHg), la presión arterial diastólica (diabp, mmHg), índice de masa corporal (bmi), historia de enfermedad cardiovascular (cvd=1: SI), fibrilación atrial (afb=1: SI), choque cardiogénico (sho=1: SI), complicaciones cardíacas congestivas, ENTRE OTRAS. Se midieron los días de admisión al hospital hasta la fecha del evento (muerte) o último seguimiento (lenfol). La variable fstat corresponde al estado vital en el último seguimiento (0: Vivo, 1= Muerto).

Paquetes necesarios

Variable Nombre Descripción Códigos/Valores
1 id Identificador Número del 1 al 500
2 age Edad Número del 30 al 104
3 gender Género Factor 0=femenino, 1=masculino
4 hr Frecuencia cardiaca en latidos por minuto al ingreso Número del 35 al 186
5 sysbp Presión arterial sistólica al ingreso en mmHg Número del 57 al 244
6 diasbp Presión arterial diastólica al ingreso en mmHg Número del 6 al 198
7 bmi Índice de masa corporal en kg/mt^2 Número del 13 al 44.8
8 cvd Antecedente de enfermedad cardiovascular Factor 0=No, 1=Si
9 afb Fibrilación auricular Factor 0=No, 1=Si
10 sho Presencia de choque al ingreso Factor 0=No, 1=Si
11 chf Factor 0=No, 1=Si
12 av3 Factor 0=No, 1=Si
13 miord Orden del presente infarto Factor 0=Primero, 1=Recurrente
14 mitype Tipo de Infarto Factor 1 = Con onda Q. 2 = Sin onda Q. 3 = Indeterminado
15 year año de la cohorte Número del 1 al 3
16 los Días de estandia hospitalaria Número del 0 al 47
17 dstat Estatus vital al egreso hospitalario Factor 0=Vivo, 1=Muerto
18 lenfol Duración del seguimiento en días Número del al 2358
19 fstat Estatus vital en el último seguimiento 0: Vivo, 1=Muerto

Análisis de curvas de supervivencia

Curva de supervivencia para el tiempo a la muerte (en días) en pacientes con infarto agudo del miocardio y su relación con sexo

Call: survfit(formula = survObjectkm1 ~ gender, data = mydata, conf.type = "log-log")

                n events median 0.95LCL 0.95UCL
gender=female 300    111   2160    1624      NA
gender=male   200    104   1317     865    1579

Call:
survdiff(formula = survObjectkm1 ~ gender, data = mydata)

                N Observed Expected (O-E)^2/E (O-E)^2/V
gender=female 300      111    130.7      2.98      7.79
gender=male   200      104     84.3      4.62      7.79

 Chisq= 7.8  on 1 degrees of freedom, p= 0.005 

1. Con base en la información anterior. Describa y analice las curvas de supervivencia según género.

Las curvas de supervivencia de Kaplan Meier de los pacientes con AIM separadas por sexo y el calculo del test log-rank se sugiere que:

La curva se supervivencia de pacientes con IAM con sexo femenino siempre por encima de la curva de pacientes con IAM y sexo masculino, lo que indica que en cualquier punto del seguimiento la mortalidad fue mayor en los hombres que en las mujeres.

La mediana de supervivencia para el sexo masculino fue de 1317 días (IC 865;1579) y para sexo femenino fue de 2160 (IC 1624;NA).

Desde el enfoque de la significancia estadistica y la aplicación del test de log-rank se obtuvo p= 0.005, por lo que se rechaza la hipotesis de igualdad en ambas curvas de supervivencia entre los grupos dados por el sexo y se encuentra diferencias estadisticamente significativas.

Curva de supervivencia para el tiempo a la muerte (en días) en pacientes con infarto agudo del miocardio y su relación con antescedente de enfermedad cardiovascular

Call: survfit(formula = survObjectkm2 ~ cvd, data = mydata, conf.type = "log-log")

        n events median 0.95LCL 0.95UCL
cvd=0 125     45   2353    1576      NA
cvd=1 375    170   1577    1359    2350

Call:
survdiff(formula = survObjectkm1 ~ cvd, data = mydata)

        N Observed Expected (O-E)^2/E (O-E)^2/V
cvd=0 125       45     55.8     2.104      2.86
cvd=1 375      170    159.2     0.738      2.86

 Chisq= 2.9  on 1 degrees of freedom, p= 0.09 

2. Con base en la información anterior. Describa y analice las curvas de supervivencia según antecedente de enfermedad cardiovascular

Las curvas de supervivencia de Kaplan Meier de los pacientes con AIM separadas por antecedentes de enfermedad cardiovascular y el cálculo del test log-rank se sugiere que:

La curva se supervivencia de pacientes con IAM sin antecedente de enfermedad cardiovascular siempre se encontró por encima de la curva de pacientes con IAM con dicho antecedente, lo que indica que, en general la mortalidad era mayor en los que tenian antecedente de enfermedad cardiovascular.

La mediana de supervivencia para aquellos pacientes con IAM sin antecedentes de enfermedad cardiovascular fue de 2353 días (IC 1576;NA) y de 1577 días (IC 1359;2350). Se observa por tanto que los intervalos de confianza se superponen.

Además desde el enfoque de la significancia estadistica y la aplicación del test de log-rank se obtuvo p= 0.09, por lo que no se rechaza la hipotesis de igualdad y no se encuentran diferencias estadisticamente significativas.

Tanto la superposición de los intervalos de confianza como el valor de p de 0.09, desde el enfoque de la significancia estadistica, indican que en pacientes con IAM y la presencia o no de antecedente de enfermedad cardiovascular no influye en la mortalidad.

Call: survfit(formula = survObjectkm3 ~ sho, data = mydata, conf.type = "log-log")

        n events median 0.95LCL 0.95UCL
sho=0 478    198 1926.0    1536      NA
sho=1  22     17   19.5       4     446

Call:
survdiff(formula = survObjectkm1 ~ sho, data = mydata)

        N Observed Expected (O-E)^2/E (O-E)^2/V
sho=0 478      198   209.33     0.614      23.8
sho=1  22       17     5.67    22.668      23.8

 Chisq= 23.8  on 1 degrees of freedom, p= 1e-06 

3. Con base en la información anterior. Describa y analice las curvas de supervivencia según choque cardiogénico

Las curvas de supervivencia de Kaplan Meier de los pacientes con AIM separadas por la presencia de choque cardiogénico a la admisión al hospital.

La curva se supervivencia de pacientes con IAM y la presentación al servicio de urgencias con o sin choque cardiogénico siempre estuvieron separadas durante el seguimiento, con diferencias en la superviviencia a favor de no presentar choque cardiogénico en el momento de la admisión y con una clara influencia de dicha variable en la mortalidad de los pacientes con IAM.

La mediana de supervivencia de los pacientes con IAM y la presentación choque cardiogénico en el momento de la admisión fue de 19.5 días (IC 4;446), mientras que para aquellos sin dicho cuadro al ingreso fue de 1926 días (IC 1536;NA).

Desde el enfoque de la significancia estadistica y la aplicación del test de log-rank se obtuvo p= 1e-06, por lo que se rechaza la hipotesis de igualdad en ambas curvas de supervivencia entre los grupos y apoya la idea antes mencionada.

Comparación de modelos

Los siguientes son los resultados de 4 modelos propuestos para predecir la supervivencia en pacientes con infarto agudo de miocardio.

4. Con base en los resultados anteriores, seleccione el mejor modelo basado en el criterio de información de akaike AIC. Según este modelo interprete el hazard ratio para la edad y el género.

Basado en el criterio de información de akaike AIC, para seleccionar el mejor modelo nos basados en el menor valor del AIC. De los 4 modelos presentados, el que tenia menor AIC fue el modelo 2, con un valor de 2284.93.

En este modelo se incluyeron las variables edad y genero que fueron comunes a los 4 modelos y además se incluyó las variables hr, diasbp y bmi.

HR para la edad: \(HR_{edad} = e^{1.06} = 2.88637\) Como \(\beta_{edad}>0\), la edad tiende a aumentar el riesgo del evento.

Interpretación: HR=2.88 Por cada año adicional en la edad de los pacientes con IAM, el riesgo instantaneo de muerte aumenta en 1.88 veces más el riesgo instantaneo de morir de los pacientes que no aumentan de edad. Sin embargo con la aplicación de dicho dato a la realidad clínica el riesgo de muerte es muy alto por cada año que aumenta la edad.

HR para el género: \(HR_{genero} = e^{0.84} = 2.31637\) Como \(\beta_{edad}>0\), el género maculino tiende a aumentar el riesgo del evento.

El riesgo instantaneo de morir por IAM de los hombres es 1.31 veces más el riesgo instantaneo de morir por IAM de las mujeres.

5. De acuerdo al modelo seleccionado, interprete el valor del hazard ratio para al menos 3 variables de dicho modelo

hr: \(HR_{hr} = e^{1.01} = 2.7456\) Por cada aumento en un latido por minuto de los pacientes con IAM, el riesgo instantaneo de muerte aumenta en 1.74 veces más el riesgo instantaneo de los pacientes de morir que no aumentan la frecuencia cardiaca.

diasbp: \(HR_{diasbp} = e^{0.99} = 2.69123\) Por cada aumento adicional de un mmHg en la presión diastólica de los pacientes con IAM, el riesgo instantaneo de muerte aumenta en 1.69 veces más el riesgo instantaneo de morir de los pacientes que no aumentan la presión diastólica.

bmi: \(HR_{bmi} = e^{0.96} = 2.6117\) Por cada aumento adicional de un kg/m^2 en el bmi de los pacientes con IAM, el riesgo instantaneo de muerte aumenta en 1.61 veces más el riesgo instantaneo de morir de los pacientes que no aumentan el bmi.

6. Análisis del supuesto de riesgos proporcionales

Para los siguientes resultados en una sub-muestra de pacientes mayores de 70 años (n=276), evalue para el modelo planteado y sus predictores, el cumplimiento del supuesto de riesgos proporcionales. Tenga en cuenta el método gráfico y los hallazgos del test de hipótesis para la valoración del supuesto desde el enfoque de la significación estadística (asumiendo alfa de 0.05, que limitaciones podría tener este enfoque para la valoración del supuesto)

          chisq df     p
age     0.06567  1 0.798
gender  0.00051  1 0.982
hr      1.44884  1 0.229
bmi     1.40541  1 0.236
cvd     0.24818  1 0.618
afb     0.01787  1 0.894
sho     5.05250  1 0.025
sysbp   6.02792  1 0.014
GLOBAL 11.88568  8 0.156

Análisis de supuestos de riesgos proporcionales

Para el análisis de supuestos de riesgos proporcionales teniendo en cuenta el método gráfico y los hallazgos del test de hipótesis desde el enfoque de la significación estadística podemos observar que para las variables sho y sysbp se obtuvo un valor-p<0.05, lo que indica que en estas rechazamos la hipótesis de que la tendencia en el tiempo sea nula, y por tanto si presentan cambios en la tendencia en el tiempo. Además al evaluar las graficas se corrobora en las graficas de las dos variables descritas se observa una tendencia en el tiempo. Las demás variables si cumplen el supuesto de riesgos proporcionales de la regresión de Cox.

Análisis de un estudio con modelo de riesgos proporcionales

7. Seleccione en su área de interés un estudio en el cual se aplique el modelo de riesgos proporcionales de Cox. Evalúe según el artículo el propósito del modelo (fines explicativos vs fines predictivos). Analice según lo reportado por los autores la valoración de los supuestos del modelo (riesgos proporcionales, linealidad en los predictores contínuos). Presente un breve resumen del estudio, objetivos, y descripción del diseño del estudio y resultados principales según el modelo. Adjunte el artículo seleccionado.

Comparing Clinical and Economic Outcomes Associated with Early Initiation of Combination Therapy of an Alpha Blocker and Dutasteride or Finasteride in Men with Benign Prostatic Hyperplasia in the United States.

Maral DerSarkissian, PhD; Yongling Xiao, PhD; Mei Sheng Duh, MPH, ScD; Patrick Lefebvre, MA; Andrine R. Swensen, MS, PhD; and Christopher F. Bell, MS

J Manag Care Spec Pharm. 2016;22(10):1204-14

Este articulo tiene como propósito comparar dos medicamentos para el tratamiento de pacientes con HPB, este modelo se realiza con fines predictivos.

Objetivo: Comparar los resultados clínicos, económicos y de utilización de recursos en pacientes con hiperplasia prostática benigna (HPB) tratados tempranamente con combinación de alfa bloqueadores (AB) e inhibidores de 5 alfa reductasa (I5AR) (Dutasteride vs Finasteride).

Métodos: Análisis retrospectivo de datos recogidos entre 2003 y 2013 en hombres mayores de 50 años con HPB, para comparar los resultados entre pacientes que recibieron tempranamente dutasteride+AB o finasteride+AB. Los desenlaces de interés incluyó retención aguda de orina (RAO), cirugía prostática, progresía clínica, costos medico y utilización de recurso de salud publica. Se usaron modelos proporcionales de Cox, regresión lineal y Poisson para evaluar la asociación entre los resultados y la terapia combinada apropiada.

Resultados: 2778 pacientes se incluyeron en en grupo de finasteride+AB y 4125 en en grupo de dutasteride+AB. Luego de ajustar, no se encontraron diferencias estadísticamente significativas entre los grupos para RAO ([HR] = 0.845, 95% IC = 0.660-1.070, P = 0.1643), cirugía prostática (HR = 0.806, 95% IC = 0.568-1.171, P = 0.2525), y progresión clínica (HR = 0.834, 95% IC = 0.663-1.043, P = 0.1122).

Conclusiones: Segun el modelo, los resutados no muestran diferencias entre tratamiento con dutasteride + AB y finasteride + AB en pacientes con HPB.

LS0tCnRpdGxlOiAiVGFsbGVyIEFuw6FsaXNpcyBkZSBUaWVtcG8gYWwgRXZlbnRvIgphdXRob3I6ICJGcmFuY2lzY28gTHVpcyBDYXJvIFphcGF0YSIKZGF0ZTogIjIwLzMvMjAyMiIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAzCiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiBubwogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBoaWdobGlnaHQ6IHRhbmdvCiAgICB0aGVtZTogZmxhdGx5CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6ICczJwogICAgZGZfcHJpbnQ6IHBhZ2VkCmFsd2F5c19hbGxvd19odG1sOiB5ZXMKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRSwgZWNobz1GQUxTRX0KbGlicmFyeShrbml0cikKa25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIGNvbW1lbnQ9TkEsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIHRpZHk9VFJVRSwgZW5naW5lID0gJ1InLCBmaWcuYWxpZ24gPSAnY2VudGVyJywgZmlnLnBvcyA9ICdIJykKb3B0aW9ucyhrbml0ci5rYWJsZS5OQSA9ICcnKQpvcHRpb25zKGRpZ2l0cz02KQpsaWJyYXJ5KGZvcm1hdFIpCmBgYAoKYGBge3J9CmxpYnJhcnkoaGF2ZW4pCgpteWRhdGEgPC0gcmVhZF9kdGEoImRhdGFzZXRzL3doYXM1MDAuZHRhIikKCm15ZGF0YTwtbmEub21pdChteWRhdGEpIAoKYGBgCgpMYSBiYXNlIGRlIGRhdG9zIHdoYXM1MDAuZHRhLCBjb250aWVuZSBsYSBpbmZvcm1hY2nDs24gZGUgNTAwIHBhcnRpY2lwYW50ZXMgZGVsIGVzdHVkaW8g4oCcV29yY2VzdGVyIEhlYXJ0IEF0dGFjayBTdHVkeeKAnS4gTG9zIGF1dG9yZXMgdGllbmVuIGNvbW8gb2JqZXRpdm8gZXZhbHVhciBmYWN0b3JlcyBhc29jaWFkb3MgYSBsYSBzdXBlcnZpY2VuY2lhIGRlc2RlIGxhIGFkbWlzacOzbiBhbCBob3NwaXRhbCBlbiBwYWNpZW50ZXMgY29uIGluZmFydG8gYWd1ZG8gZGUgbWlvY2FyZGlvLiBMYSBtdWVzdHJhIHRvdGFsIGVzIGRlIDI3NiBwYXJ0aWNpcGFudGVzLgpTZSBhbmFsaXphcm9uIGZhY3RvcmVzIG1lZGlkb3MgZW4gbGEgYWRtaXNpw7NuIGNvbW8gbGEgZWRhZCAoYWdlLCB5ZWFycyksIGfDqW5lcm8gKGdlbmRlcj0xOk1hc2N1bGlubyksIGxhIGZyZWN1ZW5jaWEgY2FyZMOtYWNhIChocjpoZWFydCByYXRlLCBiZWF0cyBwZXIgbWludXRlKSwgbGEgcHJlc2nDs24gYXJ0ZXJpYWwgc2lzdMOzbGljYSAoc3lzYnAsIG1tSGcpLCBsYSBwcmVzacOzbiBhcnRlcmlhbCBkaWFzdMOzbGljYSAoZGlhYnAsIG1tSGcpLCDDrW5kaWNlIGRlIG1hc2EgY29ycG9yYWwgKGJtaSksIGhpc3RvcmlhIGRlIGVuZmVybWVkYWQgY2FyZGlvdmFzY3VsYXIgKGN2ZD0xOiBTSSksIGZpYnJpbGFjacOzbiBhdHJpYWwgKGFmYj0xOiBTSSksIGNob3F1ZSBjYXJkaW9nw6luaWNvIChzaG89MTogU0kpLCBjb21wbGljYWNpb25lcyBjYXJkw61hY2FzIGNvbmdlc3RpdmFzLCBFTlRSRSBPVFJBUy4KU2UgbWlkaWVyb24gbG9zIGTDrWFzIGRlIGFkbWlzacOzbiBhbCBob3NwaXRhbCBoYXN0YSBsYSBmZWNoYSBkZWwgZXZlbnRvIChtdWVydGUpIG8gw7psdGltbyBzZWd1aW1pZW50byAobGVuZm9sKS4gTGEgdmFyaWFibGUgZnN0YXQgY29ycmVzcG9uZGUgYWwgZXN0YWRvIHZpdGFsIGVuIGVsIMO6bHRpbW8gc2VndWltaWVudG8gKDA6IFZpdm8sIDE9IE11ZXJ0bykuCgoqKlBhcXVldGVzIG5lY2VzYXJpb3MqKgpgYGB7cn0KIyBQYXF1ZXRlcwpsaWJyYXJ5KHN1bW1hcnl0b29scykKbGlicmFyeShzdXJ2aXZhbCkKbGlicmFyeShnZ2ZvcnRpZnkpCmxpYnJhcnkoc3Vydm1pbmVyKQpsaWJyYXJ5KHNqUGxvdCkKYGBgCgpWYXJpYWJsZSB8IE5vbWJyZSB8IERlc2NyaXBjacOzbiB8IEPDs2RpZ29zL1ZhbG9yZXMgCjotLSB8IDotLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLSAgCjEgfCBpZCB8IElkZW50aWZpY2Fkb3IgfCBOw7ptZXJvIGRlbCAxIGFsIDUwMAoyIHwgYWdlfCBFZGFkIHwgTsO6bWVybyBkZWwgMzAgYWwgMTA0CjMgfCBnZW5kZXIgfCBHw6luZXJvfCBGYWN0b3IgMD1mZW1lbmlubywgMT1tYXNjdWxpbm8KNCB8IGhyIHwgRnJlY3VlbmNpYSBjYXJkaWFjYSBlbiBsYXRpZG9zIHBvciBtaW51dG8gYWwgaW5ncmVzbyB8IE7Dum1lcm8gZGVsIDM1IGFsIDE4Ngo1IHwgc3lzYnAgfCBQcmVzacOzbiBhcnRlcmlhbCBzaXN0w7NsaWNhIGFsIGluZ3Jlc28gZW4gbW1IZyB8IE7Dum1lcm8gZGVsIDU3IGFsIDI0NAo2IHwgZGlhc2JwIHwgUHJlc2nDs24gYXJ0ZXJpYWwgZGlhc3TDs2xpY2EgYWwgaW5ncmVzbyBlbiBtbUhnIHwgTsO6bWVybyBkZWwgNiBhbCAxOTgKNyB8IGJtaSB8IMONbmRpY2UgZGUgbWFzYSBjb3Jwb3JhbCBlbiBrZy9tdF4yIHwgTsO6bWVybyBkZWwgMTMgYWwgNDQuOAo4IHwgY3ZkIHwgQW50ZWNlZGVudGUgZGUgZW5mZXJtZWRhZCBjYXJkaW92YXNjdWxhciB8IEZhY3RvciAwPU5vLCAxPVNpCjkgfCBhZmIgfCBGaWJyaWxhY2nDs24gYXVyaWN1bGFyIHwgRmFjdG9yIDA9Tm8sIDE9U2kKMTAgfCBzaG8gfCBQcmVzZW5jaWEgZGUgY2hvcXVlIGFsIGluZ3Jlc28gfCBGYWN0b3IgMD1ObywgMT1TaQoxMSB8IGNoZiB8IHwgRmFjdG9yIDA9Tm8sIDE9U2kKMTIgfCBhdjMgfCB8IEZhY3RvciAwPU5vLCAxPVNpCjEzIHwgbWlvcmQgfCBPcmRlbiBkZWwgcHJlc2VudGUgaW5mYXJ0byB8IEZhY3RvciAwPVByaW1lcm8sIDE9UmVjdXJyZW50ZQoxNCB8IG1pdHlwZSB8IFRpcG8gZGUgSW5mYXJ0byB8IEZhY3RvciAxID0gQ29uIG9uZGEgUS4gMiA9IFNpbiBvbmRhIFEuIDMgPSBJbmRldGVybWluYWRvCjE1IHwgeWVhciB8IGHDsW8gZGUgbGEgY29ob3J0ZSB8IE7Dum1lcm8gZGVsIDEgYWwgMwoxNiB8IGxvcyB8IETDrWFzIGRlIGVzdGFuZGlhIGhvc3BpdGFsYXJpYXwgTsO6bWVybyBkZWwgMCBhbCA0NwoxNyB8IGRzdGF0IHwgRXN0YXR1cyB2aXRhbCBhbCBlZ3Jlc28gaG9zcGl0YWxhcmlvIHwgRmFjdG9yIDA9Vml2bywgMT1NdWVydG8KMTggfCBsZW5mb2wgfCBEdXJhY2nDs24gZGVsIHNlZ3VpbWllbnRvIGVuIGTDrWFzIHwgIE7Dum1lcm8gZGVsICBhbCAyMzU4CjE5IHwgZnN0YXQgfCBFc3RhdHVzIHZpdGFsIGVuIGVsIMO6bHRpbW8gc2VndWltaWVudG8gfCAwOiBWaXZvLCAxPU11ZXJ0bwoKIyMgQW7DoWxpc2lzIGRlIGN1cnZhcyBkZSBzdXBlcnZpdmVuY2lhCgoqKkN1cnZhIGRlIHN1cGVydml2ZW5jaWEgcGFyYSBlbCB0aWVtcG8gYSBsYSBtdWVydGUgKGVuIGTDrWFzKSBlbiBwYWNpZW50ZXMgY29uIGluZmFydG8gYWd1ZG8gZGVsIG1pb2NhcmRpbyB5IHN1IHJlbGFjacOzbiBjb24gc2V4byoqIAoKYGBge3J9CiMgR2VuZXJhY2nDs24gZGVsIG1vZGVsbzoKIyBDb252ZXJ0aXIgbGEgdmFyaWFibGUgc2V4byBjb21vIGZhY3RvciB5IGFzaWduYXIgY29ycmVjdGFtZW50ZSBsb3Mgbml2ZWxlcyAwPWZlbWVuaW5vLCAxPW1hc2N1bGlubwpteWRhdGEkZ2VuZGVyIDwtIGZhY3RvciggbXlkYXRhJGdlbmRlciwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscz0gYygwLDEpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxzPWMoImZlbWFsZSIsICJtYWxlIikpCnN1cnZPYmplY3RrbTEgPC0gU3VydihteWRhdGEkbGVuZm9sLCBteWRhdGEkZnN0YXQpCmZpdGttMSA8LSBzdXJ2Zml0KHN1cnZPYmplY3RrbTEgfiBnZW5kZXIsIGRhdGEgPSBteWRhdGEsIGNvbmYudHlwZT0ibG9nLWxvZyIpCmZpdGttMQpgYGAKCgpgYGB7cn0KcGxvdChmaXRrbTEsCnhsYWI9IkTDrWFzIGRlIHNlZ3VpbWllbnRvIiwgeWxhYj0iU3VwZXJ2aXZlbmNpYSIsbHR5ID0gYygic29saWQiLCAiZGFzaGVkIiksIGNvbCA9IGMoInllbGxvdyIsICJibHVlIikpCmFibGluZShoID0gMC41MCkKbGVnZW5kKDE1MDAsIC45NSwgYygiRmVtZW5pbm8iLCAiTWFzY3VsaW5vIiksIGx0eSA9IGMoInNvbGlkIiwgImRhc2hlZCIpLCBjb2wgPSBjKCJ5ZWxsb3ciLCAiYmx1ZSIKKSkKdGl0bGUoIkN1cnZhcyBkZSBLYXBsYW4tTWVpZXIgZW4gcGFjaWVudGVzIGNvbiBJQU0geSBzdSByZWxhY2nDs24gY29uIGVsIFNleG8iKQpgYGAKYGBge3J9CmxvZ1JhbmsxICA8LSBzdXJ2ZGlmZihzdXJ2T2JqZWN0a20xIH4gZ2VuZGVyLCBkYXRhID0gbXlkYXRhKQpsb2dSYW5rMQpgYGAKCiMjIyAxLiBDb24gYmFzZSBlbiBsYSBpbmZvcm1hY2nDs24gYW50ZXJpb3IuIERlc2NyaWJhIHkgYW5hbGljZSBsYXMgY3VydmFzIGRlIHN1cGVydml2ZW5jaWEgc2Vnw7puIGfDqW5lcm8uCgpMYXMgY3VydmFzIGRlIHN1cGVydml2ZW5jaWEgZGUgS2FwbGFuIE1laWVyIGRlIGxvcyBwYWNpZW50ZXMgY29uIEFJTSBzZXBhcmFkYXMgcG9yIHNleG8geSBlbCBjYWxjdWxvIGRlbCB0ZXN0IGxvZy1yYW5rIHNlIHN1Z2llcmUgcXVlOgoKTGEgY3VydmEgc2Ugc3VwZXJ2aXZlbmNpYSBkZSBwYWNpZW50ZXMgY29uIElBTSBjb24gc2V4byBmZW1lbmlubyBzaWVtcHJlIHBvciBlbmNpbWEgZGUgbGEgY3VydmEgZGUgcGFjaWVudGVzIGNvbiBJQU0geSBzZXhvIG1hc2N1bGlubywgbG8gcXVlIGluZGljYSBxdWUgZW4gY3VhbHF1aWVyIHB1bnRvIGRlbCBzZWd1aW1pZW50byBsYSBtb3J0YWxpZGFkIGZ1ZSBtYXlvciBlbiBsb3MgaG9tYnJlcyBxdWUgZW4gbGFzIG11amVyZXMuCgpMYSBtZWRpYW5hIGRlIHN1cGVydml2ZW5jaWEgcGFyYSBlbCBzZXhvIG1hc2N1bGlubyBmdWUgZGUgMTMxNyBkw61hcyAoSUMgODY1OzE1NzkpIHkgcGFyYSBzZXhvIGZlbWVuaW5vIGZ1ZSBkZSAyMTYwIChJQyAxNjI0O05BKS4KCkRlc2RlIGVsIGVuZm9xdWUgZGUgbGEgc2lnbmlmaWNhbmNpYSBlc3RhZGlzdGljYSB5IGxhIGFwbGljYWNpw7NuIGRlbCB0ZXN0IGRlIGxvZy1yYW5rIHNlIG9idHV2byBwPSAwLjAwNSwgcG9yIGxvIHF1ZSBzZSByZWNoYXphIGxhIGhpcG90ZXNpcyBkZSBpZ3VhbGRhZCBlbiBhbWJhcyBjdXJ2YXMgZGUgc3VwZXJ2aXZlbmNpYSBlbnRyZSBsb3MgZ3J1cG9zIGRhZG9zIHBvciBlbCBzZXhvIHkgc2UgZW5jdWVudHJhIGRpZmVyZW5jaWFzIGVzdGFkaXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMuIAoKKipDdXJ2YSBkZSBzdXBlcnZpdmVuY2lhIHBhcmEgZWwgdGllbXBvIGEgbGEgbXVlcnRlIChlbiBkw61hcykgZW4gcGFjaWVudGVzIGNvbiBpbmZhcnRvIGFndWRvIGRlbCBtaW9jYXJkaW8geSBzdSByZWxhY2nDs24gY29uIGFudGVzY2VkZW50ZSBkZSBlbmZlcm1lZGFkIGNhcmRpb3Zhc2N1bGFyKioKCmBgYHtyfQojIEdlbmVyYWNpw7NuIGRlbCBtb2RlbG86CnN1cnZPYmplY3RrbTIgPC0gU3VydihteWRhdGEkbGVuZm9sLCBteWRhdGEkZnN0YXQpCmZpdGttMiA8LSBzdXJ2Zml0KHN1cnZPYmplY3RrbTIgfiBjdmQsIGRhdGEgPSBteWRhdGEsIGNvbmYudHlwZT0ibG9nLWxvZyIpCmZpdGttMgpgYGAKCmBgYHtyfQpwbG90KGZpdGttMiwKeGxhYj0iRMOtYXMgZGUgc2VndWltaWVudG8iLCB5bGFiPSJTdXBlcnZpdmVuY2lhIixsdHkgPSBjKCJzb2xpZCIsICJkYXNoZWQiKSwgY29sID0gYygiYmxhY2siLCAicmVkIikpCmFibGluZShoID0gMC41MCkKbGVnZW5kKDE1MDAsIC45NSwgYygiTm8tY3ZkIiwgIlNpLWN2ZCIpLCBsdHkgPSBjKCJzb2xpZCIsICJkYXNoZWQiKSwgY29sID0gYygiYmxhY2siLCAicmVkIikpCnRpdGxlKCJDdXJ2YXMgZGUgS2FwbGFuLU1laWVyIGVuIHBhY2llbnRlcyBjb24gSUFNIHkgc3UgcmVsYWNpw7NuIGNvbiBlbCBhbnRlY2VkZW50ZSBkZSBlbmZlcm1lZGFkIGNhcmRpb3Zhc2N1bGFyIikKYGBgCgpgYGB7cn0KbG9nUmFuazIgIDwtIHN1cnZkaWZmKHN1cnZPYmplY3RrbTEgfiBjdmQsIGRhdGEgPSBteWRhdGEpCmxvZ1JhbmsyCmBgYAoKIyMjIDIuIENvbiBiYXNlIGVuIGxhIGluZm9ybWFjacOzbiBhbnRlcmlvci4gRGVzY3JpYmEgeSBhbmFsaWNlIGxhcyBjdXJ2YXMgZGUgc3VwZXJ2aXZlbmNpYSBzZWfDum4gYW50ZWNlZGVudGUgZGUgZW5mZXJtZWRhZCBjYXJkaW92YXNjdWxhcgoKTGFzIGN1cnZhcyBkZSBzdXBlcnZpdmVuY2lhIGRlIEthcGxhbiBNZWllciBkZSBsb3MgcGFjaWVudGVzIGNvbiBBSU0gc2VwYXJhZGFzIHBvciBhbnRlY2VkZW50ZXMgZGUgZW5mZXJtZWRhZCBjYXJkaW92YXNjdWxhciB5IGVsIGPDoWxjdWxvIGRlbCB0ZXN0IGxvZy1yYW5rIHNlIHN1Z2llcmUgcXVlOgoKTGEgY3VydmEgc2Ugc3VwZXJ2aXZlbmNpYSBkZSBwYWNpZW50ZXMgY29uIElBTSBzaW4gYW50ZWNlZGVudGUgZGUgZW5mZXJtZWRhZCBjYXJkaW92YXNjdWxhciBzaWVtcHJlIHNlIGVuY29udHLDsyBwb3IgZW5jaW1hIGRlIGxhIGN1cnZhIGRlIHBhY2llbnRlcyBjb24gSUFNIGNvbiBkaWNobyBhbnRlY2VkZW50ZSwgbG8gcXVlIGluZGljYSBxdWUsIGVuIGdlbmVyYWwgbGEgbW9ydGFsaWRhZCBlcmEgbWF5b3IgZW4gbG9zIHF1ZSB0ZW5pYW4gYW50ZWNlZGVudGUgZGUgZW5mZXJtZWRhZCBjYXJkaW92YXNjdWxhci4gCgpMYSBtZWRpYW5hIGRlIHN1cGVydml2ZW5jaWEgcGFyYSBhcXVlbGxvcyBwYWNpZW50ZXMgY29uIElBTSBzaW4gYW50ZWNlZGVudGVzIGRlIGVuZmVybWVkYWQgY2FyZGlvdmFzY3VsYXIgZnVlIGRlIDIzNTMgZMOtYXMgKElDIDE1NzY7TkEpIHkgZGUgMTU3NyBkw61hcyAoSUMgMTM1OTsyMzUwKS4gU2Ugb2JzZXJ2YSBwb3IgdGFudG8gcXVlIGxvcyBpbnRlcnZhbG9zIGRlIGNvbmZpYW56YSBzZSBzdXBlcnBvbmVuLgoKQWRlbcOhcyBkZXNkZSBlbCBlbmZvcXVlIGRlIGxhIHNpZ25pZmljYW5jaWEgZXN0YWRpc3RpY2EgeSBsYSBhcGxpY2FjacOzbiBkZWwgdGVzdCBkZSBsb2ctcmFuayBzZSBvYnR1dm8gcD0gMC4wOSwgcG9yIGxvIHF1ZSBubyBzZSByZWNoYXphIGxhIGhpcG90ZXNpcyBkZSBpZ3VhbGRhZCB5IG5vIHNlIGVuY3VlbnRyYW4gZGlmZXJlbmNpYXMgZXN0YWRpc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZhcy4gCgpUYW50byBsYSBzdXBlcnBvc2ljacOzbiBkZSBsb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgY29tbyBlbCB2YWxvciBkZSBwIGRlIDAuMDksIGRlc2RlIGVsIGVuZm9xdWUgZGUgbGEgc2lnbmlmaWNhbmNpYSBlc3RhZGlzdGljYSwgaW5kaWNhbiBxdWUgZW4gcGFjaWVudGVzIGNvbiBJQU0geSBsYSBwcmVzZW5jaWEgbyBubyBkZSBhbnRlY2VkZW50ZSBkZSBlbmZlcm1lZGFkIGNhcmRpb3Zhc2N1bGFyIG5vIGluZmx1eWUgZW4gbGEgbW9ydGFsaWRhZC4KCgpgYGB7cn0KIyBHZW5lcmFjacOzbiBkZWwgbW9kZWxvOgpzdXJ2T2JqZWN0a20zIDwtIFN1cnYobXlkYXRhJGxlbmZvbCwgbXlkYXRhJGZzdGF0KQpmaXRrbTMgPC0gc3VydmZpdChzdXJ2T2JqZWN0a20zIH4gc2hvLCBkYXRhID0gbXlkYXRhLCBjb25mLnR5cGU9ImxvZy1sb2ciKQpmaXRrbTMKYGBgCgpgYGB7cn0KcGxvdChmaXRrbTMsCnhsYWI9IkTDrWFzIGRlIHNlZ3VpbWllbnRvIiwgeWxhYj0iU3giLGx0eSA9IGMoInNvbGlkIiwgImRhc2hlZCIpLCBjb2wgPSBjKCJvcmFuZ2UiLCAiYmxhY2siKSkKYWJsaW5lKGggPSAwLjUwKQpsZWdlbmQoMTUwMCwgLjk1LCBjKCJOby1DaG9xdWUgQ2FyZC4iLCAiU2ktQ2hvcXVlIENhcmQuIiksIGx0eSA9IGMoInNvbGlkIiwgImRhc2hlZCIpLCBjb2wgPSBjKCJvcmFuZ2UiLCAiYmxhY2siKSkKdGl0bGUoIkN1cnZhcyBkZSBLYXBsYW4tTWVpZXIgZW4gcGFjaWVudGVzIGNvbiBJQU0geSBzdSByZWxhY2nDs24gY29uIGxhIHByZXNlbmNpYSBkZSBjaG9xdWUgYWwgaW5ncmVzbyIpCmBgYApgYGB7cn0KbG9nUmFuazEgIDwtIHN1cnZkaWZmKHN1cnZPYmplY3RrbTEgfiBzaG8sIGRhdGEgPSBteWRhdGEpCmxvZ1JhbmsxCmBgYAoKIyMjIDMuIENvbiBiYXNlIGVuIGxhIGluZm9ybWFjacOzbiBhbnRlcmlvci4gRGVzY3JpYmEgeSBhbmFsaWNlIGxhcyBjdXJ2YXMgZGUgc3VwZXJ2aXZlbmNpYSBzZWfDum4gY2hvcXVlIGNhcmRpb2fDqW5pY28KCkxhcyBjdXJ2YXMgZGUgc3VwZXJ2aXZlbmNpYSBkZSBLYXBsYW4gTWVpZXIgZGUgbG9zIHBhY2llbnRlcyBjb24gQUlNIHNlcGFyYWRhcyBwb3IgbGEgcHJlc2VuY2lhIGRlIGNob3F1ZSBjYXJkaW9nw6luaWNvIGEgbGEgYWRtaXNpw7NuIGFsIGhvc3BpdGFsLgoKTGEgY3VydmEgc2Ugc3VwZXJ2aXZlbmNpYSBkZSBwYWNpZW50ZXMgY29uIElBTSB5IGxhIHByZXNlbnRhY2nDs24gYWwgc2VydmljaW8gZGUgdXJnZW5jaWFzIGNvbiBvIHNpbiBjaG9xdWUgY2FyZGlvZ8OpbmljbyBzaWVtcHJlIGVzdHV2aWVyb24gc2VwYXJhZGFzIGR1cmFudGUgZWwgc2VndWltaWVudG8sIGNvbiBkaWZlcmVuY2lhcyBlbiBsYSBzdXBlcnZpdmllbmNpYSBhIGZhdm9yIGRlIG5vIHByZXNlbnRhciBjaG9xdWUgY2FyZGlvZ8OpbmljbyBlbiBlbCBtb21lbnRvIGRlIGxhIGFkbWlzacOzbiB5IGNvbiB1bmEgY2xhcmEgaW5mbHVlbmNpYSBkZSBkaWNoYSB2YXJpYWJsZSBlbiBsYSBtb3J0YWxpZGFkIGRlIGxvcyBwYWNpZW50ZXMgY29uIElBTS4KCkxhIG1lZGlhbmEgZGUgc3VwZXJ2aXZlbmNpYSBkZSBsb3MgcGFjaWVudGVzIGNvbiBJQU0geSBsYSBwcmVzZW50YWNpw7NuIGNob3F1ZSBjYXJkaW9nw6luaWNvIGVuIGVsIG1vbWVudG8gZGUgbGEgYWRtaXNpw7NuIGZ1ZSBkZSAxOS41IGTDrWFzIChJQyA0OzQ0NiksIG1pZW50cmFzIHF1ZSBwYXJhIGFxdWVsbG9zIHNpbiBkaWNobyBjdWFkcm8gYWwgaW5ncmVzbyBmdWUgZGUgMTkyNiBkw61hcyAoSUMgMTUzNjtOQSkuCgpEZXNkZSBlbCBlbmZvcXVlIGRlIGxhIHNpZ25pZmljYW5jaWEgZXN0YWRpc3RpY2EgeSBsYSBhcGxpY2FjacOzbiBkZWwgdGVzdCBkZSBsb2ctcmFuayBzZSBvYnR1dm8gcD0gMWUtMDYsIHBvciBsbyBxdWUgc2UgcmVjaGF6YSBsYSBoaXBvdGVzaXMgZGUgaWd1YWxkYWQgZW4gYW1iYXMgY3VydmFzIGRlIHN1cGVydml2ZW5jaWEgZW50cmUgbG9zIGdydXBvcyB5IGFwb3lhIGxhIGlkZWEgYW50ZXMgbWVuY2lvbmFkYS4KCgojIyBDb21wYXJhY2nDs24gZGUgbW9kZWxvcwoKTG9zIHNpZ3VpZW50ZXMgc29uIGxvcyByZXN1bHRhZG9zIGRlIDQgbW9kZWxvcyBwcm9wdWVzdG9zIHBhcmEgcHJlZGVjaXIgbGEgc3VwZXJ2aXZlbmNpYSBlbiBwYWNpZW50ZXMgY29uIGluZmFydG8gYWd1ZG8gZGUgbWlvY2FyZGlvLgoKYGBge3J9CiMgTW9kZWxvIDEKZml0Y294cGgxPC1jb3hwaChTdXJ2KG15ZGF0YSRsZW5mb2wsIG15ZGF0YSRmc3RhdCkgfiBhZ2UrZ2VuZGVyK2hyK3N5c2JwK2JtaSwgZGF0YSA9IG15ZGF0YSkKIyBNb2RlbG8gMgpmaXRjb3hwaDI8LWNveHBoKFN1cnYobXlkYXRhJGxlbmZvbCwgbXlkYXRhJGZzdGF0KSB+IGFnZStnZW5kZXIraHIrZGlhc2JwK2JtaSwgZGF0YSA9IG15ZGF0YSkKIyBNb2RlbG8gMwpmaXRjb3hwaDM8LWNveHBoKFN1cnYobXlkYXRhJGxlbmZvbCwgbXlkYXRhJGZzdGF0KSB+IGFnZStnZW5kZXIrY3ZkK2FmYitibWksIGRhdGEgPSBteWRhdGEpCiMgTW9kZWxvIDQKZml0Y294cGg0PC1jb3hwaChTdXJ2KG15ZGF0YSRsZW5mb2wsIG15ZGF0YSRmc3RhdCkgfiBhZ2UrZ2VuZGVyK3NobywgZGF0YSA9IG15ZGF0YSkKdGFiX21vZGVsKGZpdGNveHBoMSwgZml0Y294cGgyLCBmaXRjb3hwaDMsIGZpdGNveHBoNCwKICAgICAgICAgIHNob3cuYWljID0gVFJVRSxkdi5sYWJlbHMgPSBjKCJNb2RlbG8gMSIsIk1vZGVsbyAyIiwgIk1vZGVsbzMiLCAgICJNb2RlbG80IikpCmBgYAoKIyMjIDQuIENvbiBiYXNlIGVuIGxvcyByZXN1bHRhZG9zIGFudGVyaW9yZXMsIHNlbGVjY2lvbmUgZWwgbWVqb3IgbW9kZWxvIGJhc2FkbyBlbiBlbCBjcml0ZXJpbyBkZSBpbmZvcm1hY2nDs24gZGUgYWthaWtlIEFJQy4gU2Vnw7puIGVzdGUgbW9kZWxvIGludGVycHJldGUgZWwgaGF6YXJkIHJhdGlvIHBhcmEgbGEgZWRhZCB5IGVsICBnw6luZXJvLgoKQmFzYWRvIGVuIGVsIGNyaXRlcmlvIGRlIGluZm9ybWFjacOzbiBkZSBha2Fpa2UgQUlDLCBwYXJhIHNlbGVjY2lvbmFyIGVsIG1lam9yIG1vZGVsbyBub3MgYmFzYWRvcyBlbiBlbCBtZW5vciB2YWxvciBkZWwgQUlDLgpEZSBsb3MgNCBtb2RlbG9zIHByZXNlbnRhZG9zLCBlbCBxdWUgdGVuaWEgbWVub3IgQUlDIGZ1ZSBlbCBtb2RlbG8gMiwgY29uIHVuIHZhbG9yIGRlIDIyODQuOTMuCgpFbiBlc3RlIG1vZGVsbyBzZSBpbmNsdXllcm9uIGxhcyB2YXJpYWJsZXMgZWRhZCB5IGdlbmVybyBxdWUgZnVlcm9uIGNvbXVuZXMgYSBsb3MgNCBtb2RlbG9zIHkgYWRlbcOhcyBzZSBpbmNsdXnDsyBsYXMgdmFyaWFibGVzIGhyLCBkaWFzYnAgeSBibWkuCgpIUiBwYXJhIGxhIGVkYWQ6CiRIUl97ZWRhZH0gPSBlXnsxLjA2fSA9IDIuODg2MzckCkNvbW8gJFxiZXRhX3tlZGFkfT4wJCwgbGEgZWRhZCB0aWVuZGUgYSBhdW1lbnRhciBlbCByaWVzZ28gZGVsIGV2ZW50by4gCgpJbnRlcnByZXRhY2nDs246IEhSPTIuODgKUG9yIGNhZGEgYcOxbyBhZGljaW9uYWwgZW4gbGEgZWRhZCBkZSBsb3MgIHBhY2llbnRlcyBjb24gSUFNLCBlbCByaWVzZ28gaW5zdGFudGFuZW8gZGUgbXVlcnRlIGF1bWVudGEgZW4gMS44OCB2ZWNlcyBtw6FzIGVsIHJpZXNnbyBpbnN0YW50YW5lbyBkZSBtb3JpciBkZSBsb3MgcGFjaWVudGVzIHF1ZSBubyBhdW1lbnRhbiBkZSBlZGFkLgpTaW4gZW1iYXJnbyBjb24gbGEgYXBsaWNhY2nDs24gZGUgZGljaG8gZGF0byBhIGxhIHJlYWxpZGFkIGNsw61uaWNhIGVsIHJpZXNnbyBkZSBtdWVydGUgZXMgbXV5IGFsdG8gcG9yIGNhZGEgYcOxbyBxdWUgYXVtZW50YSBsYSBlZGFkLgoKSFIgcGFyYSBlbCBnw6luZXJvOgokSFJfe2dlbmVyb30gPSBlXnswLjg0fSA9IDIuMzE2MzckCkNvbW8gJFxiZXRhX3tlZGFkfT4wJCwgZWwgZ8OpbmVybyBtYWN1bGlubyB0aWVuZGUgYSBhdW1lbnRhciBlbCByaWVzZ28gZGVsIGV2ZW50by4gCgpFbCByaWVzZ28gaW5zdGFudGFuZW8gZGUgbW9yaXIgcG9yIElBTSBkZSBsb3MgaG9tYnJlcyBlcyAxLjMxIHZlY2VzIG3DoXMgZWwgcmllc2dvIGluc3RhbnRhbmVvIGRlIG1vcmlyIHBvciBJQU0gZGUgbGFzIG11amVyZXMuCgoKIyMjIDUuIERlIGFjdWVyZG8gYWwgbW9kZWxvIHNlbGVjY2lvbmFkbywgaW50ZXJwcmV0ZSBlbCB2YWxvciBkZWwgaGF6YXJkIHJhdGlvIHBhcmEgYWwgbWVub3MgMyB2YXJpYWJsZXMgZGUgZGljaG8gbW9kZWxvCgpocjogJEhSX3tocn0gPSBlXnsxLjAxfSA9IDIuNzQ1NiQKUG9yIGNhZGEgYXVtZW50byBlbiB1biBsYXRpZG8gcG9yIG1pbnV0byBkZSBsb3MgIHBhY2llbnRlcyBjb24gSUFNLCBlbCByaWVzZ28gaW5zdGFudGFuZW8gZGUgbXVlcnRlIGF1bWVudGEgZW4gMS43NCB2ZWNlcyBtw6FzIGVsIHJpZXNnbyBpbnN0YW50YW5lbyBkZSBsb3MgcGFjaWVudGVzIGRlIG1vcmlyIHF1ZSBubyBhdW1lbnRhbiBsYSBmcmVjdWVuY2lhIGNhcmRpYWNhLgoKZGlhc2JwOiAkSFJfe2RpYXNicH0gPSBlXnswLjk5fSA9IDIuNjkxMjMkClBvciBjYWRhIGF1bWVudG8gYWRpY2lvbmFsIGRlIHVuIG1tSGcgZW4gbGEgcHJlc2nDs24gZGlhc3TDs2xpY2EgZGUgbG9zICBwYWNpZW50ZXMgY29uIElBTSwgZWwgcmllc2dvIGluc3RhbnRhbmVvIGRlIG11ZXJ0ZSBhdW1lbnRhIGVuIDEuNjkgdmVjZXMgbcOhcyBlbCByaWVzZ28gaW5zdGFudGFuZW8gZGUgbW9yaXIgZGUgbG9zIHBhY2llbnRlcyBxdWUgbm8gYXVtZW50YW4gbGEgcHJlc2nDs24gZGlhc3TDs2xpY2EuCgpibWk6ICRIUl97Ym1pfSA9IGVeezAuOTZ9ID0gMi42MTE3JApQb3IgY2FkYSBhdW1lbnRvIGFkaWNpb25hbCBkZSB1biBrZy9tXjIgZW4gZWwgYm1pIGRlIGxvcyAgcGFjaWVudGVzIGNvbiBJQU0sIGVsIHJpZXNnbyBpbnN0YW50YW5lbyBkZSBtdWVydGUgYXVtZW50YSBlbiAxLjYxIHZlY2VzIG3DoXMgZWwgcmllc2dvIGluc3RhbnRhbmVvIGRlIG1vcmlyIGRlIGxvcyBwYWNpZW50ZXMgcXVlIG5vIGF1bWVudGFuIGVsIGJtaS4KCgojIyMgNi4gQW7DoWxpc2lzIGRlbCBzdXB1ZXN0byBkZSByaWVzZ29zIHByb3BvcmNpb25hbGVzCgpQYXJhIGxvcyBzaWd1aWVudGVzIHJlc3VsdGFkb3MgZW4gdW5hIHN1Yi1tdWVzdHJhIGRlIHBhY2llbnRlcyBtYXlvcmVzIGRlIDcwIGHDsW9zIChuPTI3NiksIGV2YWx1ZSBwYXJhIGVsIG1vZGVsbyBwbGFudGVhZG8geSBzdXMgcHJlZGljdG9yZXMsIGVsIGN1bXBsaW1pZW50byBkZWwgc3VwdWVzdG8gZGUgcmllc2dvcyBwcm9wb3JjaW9uYWxlcy4gVGVuZ2EgZW4gY3VlbnRhIGVsIG3DqXRvZG8gZ3LDoWZpY28geSBsb3MgaGFsbGF6Z29zIGRlbCB0ZXN0IGRlIGhpcMOzdGVzaXMgcGFyYSBsYSB2YWxvcmFjacOzbiBkZWwgc3VwdWVzdG8gZGVzZGUgZWwgZW5mb3F1ZSBkZSBsYSBzaWduaWZpY2FjacOzbiBlc3RhZMOtc3RpY2EgKiooYXN1bWllbmRvIGFsZmEgZGUgMC4wNSwgcXVlIGxpbWl0YWNpb25lcyBwb2Ryw61hIHRlbmVyIGVzdGUgZW5mb3F1ZSBwYXJhIGxhIHZhbG9yYWNpw7NuIGRlbCBzdXB1ZXN0bykqKgoKCgpgYGB7cn0KIyBGaWx0cm8gTWF5b3JlcyBkZSA3MCBhw7FvcywgY29uIGZpbmVzIGFjYWTDqW1pY29zLgogbXlkYXRhIDwtIHN1YnNldChteWRhdGEsIGFnZSA+PSA3MCkKbGlicmFyeShzdXJ2bWluZXIpCmZpdGNveHBoPC1jb3hwaChTdXJ2KG15ZGF0YSRsZW5mb2wsIG15ZGF0YSRmc3RhdCkgfiBhZ2UrZ2VuZGVyK2hyK2JtaStjdmQrYWZiK3NobytzeXNicCwgZGF0YSA9IG15ZGF0YSkKIyBGdW5jaW9uIHBhcmEgZXZhbHVhciBlbCBzdXB1ZXN0byAocGFxdWV0ZSBzdXJ2aXZhbCkKdGVzdC5waCA8LSBjb3guenBoKGZpdGNveHBoLCBnbG9iYWw9VFJVRSkKIyBSZXN1bHRhZG9zIGRlbCB0ZXN0CnRlc3QucGgKYGBgCgoKYGBge3J9CiMgQ3JlYXIgZmlndXJhIGNvbiBlbCBwYXF1ZXRlIHN1cm1pbmVyIHkgbGEgZnVuY2nDs24gZ2djb3h6cGggcG9yIHByZWRpY3RvciBhZ2UrZ2VuZGVyK2hyK3N5c2JwK2JtaQoKIGdnY294enBoKHRlc3QucGgsIHZhciA9IGMoImFnZSIpKQpgYGAKCmBgYHtyfQogZ2djb3h6cGgodGVzdC5waCwgdmFyID0gYygiZ2VuZGVyIikpCmBgYAoKYGBge3J9CiBnZ2NveHpwaCh0ZXN0LnBoLCB2YXIgPSBjKCJociIpKQpgYGAKCmBgYHtyfQpnZ2NveHpwaCh0ZXN0LnBoLCB2YXIgPSBjKCJibWkiKSkKYGBgCgpgYGB7cn0KIGdnY294enBoKHRlc3QucGgsIHZhciA9IGMoImN2ZCIpKQpgYGAKCgpgYGB7cn0KZ2djb3h6cGgodGVzdC5waCwgdmFyID0gYygiYWZiIikpCmBgYAoKYGBge3J9CiBnZ2NveHpwaCh0ZXN0LnBoLCB2YXIgPSBjKCJzaG8iKSkKYGBgCgpgYGB7cn0KZ2djb3h6cGgodGVzdC5waCwgdmFyID0gYygic3lzYnAiKSkKYGBgCgoqKkFuw6FsaXNpcyBkZSBzdXB1ZXN0b3MgZGUgcmllc2dvcyBwcm9wb3JjaW9uYWxlcyoqCgpQYXJhIGVsIGFuw6FsaXNpcyBkZSBzdXB1ZXN0b3MgZGUgcmllc2dvcyBwcm9wb3JjaW9uYWxlcyB0ZW5pZW5kbyBlbiBjdWVudGEgZWwgbcOpdG9kbyBncsOhZmljbyB5IGxvcyBoYWxsYXpnb3MgZGVsIHRlc3QgZGUgaGlww7N0ZXNpcyBkZXNkZSBlbCBlbmZvcXVlIGRlIGxhIHNpZ25pZmljYWNpw7NuIGVzdGFkw61zdGljYSBwb2RlbW9zIG9ic2VydmFyIHF1ZSBwYXJhIGxhcyB2YXJpYWJsZXMgc2hvIHkgc3lzYnAgc2Ugb2J0dXZvIHVuIHZhbG9yLXA8MC4wNSwgbG8gcXVlIGluZGljYSBxdWUgZW4gZXN0YXMgcmVjaGF6YW1vcyBsYSBoaXDDs3Rlc2lzIGRlIHF1ZSBsYSB0ZW5kZW5jaWEgZW4gZWwgdGllbXBvIHNlYSBudWxhLCB5IHBvciB0YW50byBzaSBwcmVzZW50YW4gY2FtYmlvcyBlbiBsYSB0ZW5kZW5jaWEgZW4gZWwgdGllbXBvLiBBZGVtw6FzIGFsIGV2YWx1YXIgbGFzIGdyYWZpY2FzIHNlIGNvcnJvYm9yYSBlbiBsYXMgZ3JhZmljYXMgZGUgbGFzIGRvcyB2YXJpYWJsZXMgZGVzY3JpdGFzIHNlIG9ic2VydmEgdW5hIHRlbmRlbmNpYSBlbiBlbCB0aWVtcG8uCkxhcyBkZW3DoXMgdmFyaWFibGVzIHNpIGN1bXBsZW4gZWwgc3VwdWVzdG8gZGUgcmllc2dvcyBwcm9wb3JjaW9uYWxlcyBkZSBsYSByZWdyZXNpw7NuIGRlIENveC4KCiMjIyBBbsOhbGlzaXMgZGUgdW4gZXN0dWRpbyBjb24gbW9kZWxvIGRlIHJpZXNnb3MgcHJvcG9yY2lvbmFsZXMKCiMjIyA3LiBTZWxlY2Npb25lIGVuIHN1IMOhcmVhIGRlIGludGVyw6lzIHVuIGVzdHVkaW8gZW4gZWwgY3VhbCBzZSBhcGxpcXVlIGVsIG1vZGVsbyBkZSByaWVzZ29zIHByb3BvcmNpb25hbGVzIGRlIENveC4gRXZhbMO6ZSBzZWfDum4gZWwgYXJ0w61jdWxvIGVsIHByb3DDs3NpdG8gZGVsIG1vZGVsbyAoZmluZXMgZXhwbGljYXRpdm9zIHZzIGZpbmVzIHByZWRpY3Rpdm9zKS4gQW5hbGljZSBzZWfDum4gbG8gcmVwb3J0YWRvIHBvciBsb3MgYXV0b3JlcyBsYSB2YWxvcmFjacOzbiBkZSBsb3Mgc3VwdWVzdG9zIGRlbCBtb2RlbG8gKHJpZXNnb3MgcHJvcG9yY2lvbmFsZXMsIGxpbmVhbGlkYWQgZW4gbG9zIHByZWRpY3RvcmVzIGNvbnTDrW51b3MpLiBQcmVzZW50ZSB1biBicmV2ZSByZXN1bWVuIGRlbCBlc3R1ZGlvLCBvYmpldGl2b3MsIHkgZGVzY3JpcGNpw7NuIGRlbCBkaXNlw7FvIGRlbCBlc3R1ZGlvIHkgcmVzdWx0YWRvcyBwcmluY2lwYWxlcyBzZWfDum4gZWwgbW9kZWxvLiBBZGp1bnRlIGVsIGFydMOtY3VsbyBzZWxlY2Npb25hZG8uCgpDb21wYXJpbmcgQ2xpbmljYWwgYW5kIEVjb25vbWljIE91dGNvbWVzIEFzc29jaWF0ZWQgd2l0aCBFYXJseSBJbml0aWF0aW9uIG9mIENvbWJpbmF0aW9uIFRoZXJhcHkgb2YgYW4gQWxwaGEgQmxvY2tlciBhbmQgRHV0YXN0ZXJpZGUgb3IgRmluYXN0ZXJpZGUgaW4gTWVuIHdpdGggQmVuaWduIFByb3N0YXRpYyBIeXBlcnBsYXNpYSBpbiB0aGUgVW5pdGVkIFN0YXRlcy4KCk1hcmFsIERlclNhcmtpc3NpYW4sIFBoRDsgWW9uZ2xpbmcgWGlhbywgUGhEOyBNZWkgU2hlbmcgRHVoLCBNUEgsIFNjRDsKUGF0cmljayBMZWZlYnZyZSwgTUE7IEFuZHJpbmUgUi4gU3dlbnNlbiwgTVMsIFBoRDsgYW5kIENocmlzdG9waGVyIEYuIEJlbGwsIE1TCgpKIE1hbmFnIENhcmUgU3BlYyBQaGFybS4gMjAxNjsyMigxMCk6MTIwNC0xNAoKRXN0ZSBhcnRpY3VsbyB0aWVuZSBjb21vIHByb3DDs3NpdG8gY29tcGFyYXIgZG9zIG1lZGljYW1lbnRvcyBwYXJhIGVsIHRyYXRhbWllbnRvIGRlIHBhY2llbnRlcyBjb24gSFBCLCBlc3RlIG1vZGVsbyBzZSByZWFsaXphIGNvbiBmaW5lcyBwcmVkaWN0aXZvcy4KCk9iamV0aXZvOiBDb21wYXJhciBsb3MgcmVzdWx0YWRvcyBjbMOtbmljb3MsIGVjb27Ds21pY29zIHkgZGUgdXRpbGl6YWNpw7NuIGRlIHJlY3Vyc29zIGVuIHBhY2llbnRlcyBjb24gaGlwZXJwbGFzaWEgcHJvc3TDoXRpY2EgYmVuaWduYSAoSFBCKSB0cmF0YWRvcyB0ZW1wcmFuYW1lbnRlIGNvbiBjb21iaW5hY2nDs24gZGUgYWxmYSBibG9xdWVhZG9yZXMgKEFCKSBlIGluaGliaWRvcmVzIGRlIDUgYWxmYSByZWR1Y3Rhc2EgKEk1QVIpIChEdXRhc3RlcmlkZSB2cyBGaW5hc3RlcmlkZSkuIAoKTcOpdG9kb3M6IEFuw6FsaXNpcyByZXRyb3NwZWN0aXZvIGRlIGRhdG9zIHJlY29naWRvcyBlbnRyZSAyMDAzIHkgMjAxMyBlbiBob21icmVzIG1heW9yZXMgZGUgNTAgYcOxb3MgY29uIEhQQiwgcGFyYSBjb21wYXJhciBsb3MgcmVzdWx0YWRvcyBlbnRyZSBwYWNpZW50ZXMgcXVlIHJlY2liaWVyb24gdGVtcHJhbmFtZW50ZSBkdXRhc3RlcmlkZStBQiBvIGZpbmFzdGVyaWRlK0FCLgpMb3MgZGVzZW5sYWNlcyBkZSBpbnRlcsOpcyBpbmNsdXnDsyByZXRlbmNpw7NuIGFndWRhIGRlIG9yaW5hIChSQU8pLCBjaXJ1Z8OtYSBwcm9zdMOhdGljYSwgcHJvZ3Jlc8OtYSBjbMOtbmljYSwgY29zdG9zIG1lZGljbyB5IHV0aWxpemFjacOzbiBkZSByZWN1cnNvIGRlIHNhbHVkIHB1YmxpY2EuClNlIHVzYXJvbiBtb2RlbG9zIHByb3BvcmNpb25hbGVzIGRlIENveCwgcmVncmVzacOzbiBsaW5lYWwgeSBQb2lzc29uIHBhcmEgZXZhbHVhciBsYSBhc29jaWFjacOzbiBlbnRyZSBsb3MgcmVzdWx0YWRvcyB5IGxhIHRlcmFwaWEgY29tYmluYWRhIGFwcm9waWFkYS4KClJlc3VsdGFkb3M6IDI3NzggcGFjaWVudGVzIHNlIGluY2x1eWVyb24gZW4gZW4gZ3J1cG8gZGUgZmluYXN0ZXJpZGUrQUIgeSA0MTI1IGVuIGVuIGdydXBvIGRlIGR1dGFzdGVyaWRlK0FCLiAKTHVlZ28gZGUgYWp1c3Rhciwgbm8gc2UgZW5jb250cmFyb24gZGlmZXJlbmNpYXMgZXN0YWTDrXN0aWNhbWVudGUgc2lnbmlmaWNhdGl2YXMgZW50cmUgbG9zIGdydXBvcyBwYXJhIFJBTyAoW0hSXSA9IDAuODQ1LCA5NSUgSUMgPSAwLjY2MC0xLjA3MCwgUCA9IDAuMTY0MyksIGNpcnVnw61hIHByb3N0w6F0aWNhIChIUiA9IDAuODA2LCA5NSUgSUMgPSAwLjU2OC0xLjE3MSwgUCA9IDAuMjUyNSksIHkgcHJvZ3Jlc2nDs24gY2zDrW5pY2EgKEhSID0gMC44MzQsIDk1JSBJQyA9IDAuNjYzLTEuMDQzLCBQID0gMC4xMTIyKS4KCkNvbmNsdXNpb25lczogU2VndW4gZWwgbW9kZWxvLCBsb3MgcmVzdXRhZG9zIG5vIG11ZXN0cmFuIGRpZmVyZW5jaWFzIGVudHJlIHRyYXRhbWllbnRvIGNvbiBkdXRhc3RlcmlkZSArIEFCIHkgZmluYXN0ZXJpZGUgKyBBQiBlbiBwYWNpZW50ZXMgY29uIEhQQi4KCgo=