Normalverteilung

Im folgenden Teil wird die Dichtefunktion (für stetige Verteilungen) bzw. Wahrscheinlichkeitsfunktion (für diskrete Verteilungen) dargestellt.

Die Normalverteilung oder Gauß-Verteilung ist eine stetige Verteilung (reellen Zahlen z. B. -1,3.5, 0.5 … ) und stellt die wichtigste Wahrscheinlichkeitsverteilung dar. Die Dichtefunktion ist dabei durch die sogenannte Gaußsche Glockenkurve gegeben.

\[f(x) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-\frac{1}{2}(\frac{x -\mu}{\sigma})^2}\]

plot(function(x) dnorm(x, mean=0, sd=sqrt(1)), 
     from=-4, to=8, lwd=2, 
        ylab="Dichte", main = "(a)     Normalverteilung")
plot(function(x) dnorm(x, mean=2, sd=sqrt(5)), 
     from=-4, to=8, lwd=2, 
       col="blue", lty=2, add=TRUE)    
legend("topright", inset=0.02, legend=c("N(0,1)", "N(2,5)"), col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

So sehen normalverteilte Daten aus.

a = rnorm(10000, mean = 3)
hist(a, breaks = 100, main = "Histogramm - Normalverteilung")

Histogramm zur Darstellung der Normalverteilung

Normalverteilte Zufallsvariablen in der Praxis sehr beliebt. Biologische Größen sind normalverteilt wie etwa die Körpergröße, der Intelligenzquotienten oder Sozialkompetenz. Physikalische Großen meist auch wie etwa die durchschnittliche Sonnenscheindauer.

Der mathematische Hintergrund ist der zentrale Grenzwertsatz, der besagt, dass unter bestimmten allgemeinen Voraussetzungen die Summe aus n unabhängigen, identisch verteilten Zufallsvariablen wiederum normalverteilt ist.

Standardormalverteilung

Eine besondere Form der Normalverteilung ist die Standardnormalverteilung. Für sie gilt, dass der Mittelwert bei 0 liegt und die Standardabweichung bei 1, also µ=0 und σ=1. Damit nimmt die Funktionsgleichung folgende Form an:

\[f(x) = \frac{1}{\sqrt{2\pi}}e^{-\frac{1}{2}^2}\]

x = rnorm(10000)
hist(x, breaks = 100, main = "Histogramm - Standardnormalverteilung")

Histogramm zur Darstellung der Standardnormalverteilung

Durch Standardisierung bzw. z-Transformation kann eine Normalverteilung in eine Standardnormalverteilung überführt werden. Auf diese Weise können unterschiedliche Verteilungen besser miteinander verglichen werden. Dazu setzt man als neue Variable

\[z = (x-µ)/σ \]

z <- (a-mean(a))/sd(a)
summary(z)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-3.733200 -0.661936  0.002156  0.000000  0.669903  4.328027 

\(\chi^2\)-Verteilung

Die Chi-Quadrat-Verteilung bzw. χ 2 ist eine stetige Wahrscheinlichkeitsverteilung über der Menge der nichtnegativen reellen Zahlen (z.B 2.3, 445, 0.5). Die Chi-Quadrat-Verteilung ist eine der Verteilungen, die aus der Normalverteilung abgeleitet werden kann.


plot(function(x) dchisq(x, df=4), from=0, to=50, lwd=2, 
    ylab="Dichte", main = "(b)     Chi-Quadrat-Verteilung")
plot(function(x) dchisq(x, df=20), from=0, to=50, lwd=2, 
    col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c(expression({chi^2}(4)), expression({chi^2}(20))), col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

So sieht die Chi^2 - Verteilung aus

Von der chi^2 zur Normalverteilung

plot(function(x) dchisq(x, df=50), from=30, to=150, lwd=2, 
    ylab="Dichte", main = "(b)     Chi-Quadrat-Verteilung")
plot(function(x) dchisq(x, df=100), from=30, to=150, lwd=2, 
    col="blue", lty=2, add=TRUE)
plot(function(x) dnorm(x, mean = 100, sd = sqrt(200)), from=30, to=150, lwd=2, col="red", lty=2, add=TRUE) legend("topright", inset=0.02, legend=c(expression({chi^2}(50)), expression({chi^2}(100)), expression(N(100,200))), col=c("black", "blue", "red"), lwd=c(2,2,2), lty=c(1,2, 2))

Die Chi^2 - Verteilung nähert sich der Normalverteilung.

Die \(\chi^2\)-Verteilung findet selten Anwendung in der Realität. Hauptsächlich wird sie für die Schätzung von Verteilungsparametern, wie zum Beispiel der Varianz , und bei Hypothesentests angewendet.

\(t\)-Verteilung

Die t-Verteilung ist Quasie eine Verwandte der der Normalverteilung. Normalverteilung unterschätzen bei kleinen Stichprobenumfängen bestimmte statistische Größen. Dieser Effekt kann aber ausgeglichen werden, t-Verteilung verwendet. Die t-Verteilung hat ein breiteres Enden als die Normalverteilung. Mit steigenden Stichprobenumfänge nähern sich die beiden Verteilungen an bis sie sind schließlich identisch sind.

Eine Zufallsvariable T heißt t-verteilt mit n Freiheitsgraden, in Zeichen T∼t(n), n∈N, falls sie als Quotient zweier unabhängigen Zufallsvariablen geschrieben werden kann, wobei im Zähler Z ∼ N(0,1)und im Nenner die Wurzel einer standardisierten, d. h. in diesem Fall durch die Anzahl der Freiheitsgradengeteilten χ2 (n)-verteilten Zufallsvariable Y steht:

\[T = \frac{Z}{\sqrt{Y/n}} ⇒ T ∼ t(n)\]


plot(function(x) dt(x, df=30), from=-6, to=6, lwd=2, 
    ylab="Dichte", main = "(c)     t-Verteilung")
plot(function(x) dt(x, df=2), from=-6, to=6, lwd=2, 
    col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("t(30)", "t(2)"), col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

NA
NA

So sieht die t-Verteilung aus.

Von der t-Verteilung zur Normalverteilung

plot(function(x) dnorm(x, mean=0, sd=sqrt(1)), 
     from=-4, to=4, lwd=2, 
     ylab="Dichte", main = "(a)     Normalverteilung")
plot(function(x) dt(x, df = 30), 
     from=-4, to=4, lwd=2, 
        col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("N(0,1)", "t(30)"), col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

Die t-Verteilung nähert sich der Normalverteilung mit N = 30.

Die t-Verteilung spielt eine wichtige Rolle beim Hypothesentests und Konfidenzintervalle.

\(F\)-Verteilung

Die F-Verteilung oder Fisher-Verteilung ist eine stetige Wahrscheinlichkeitsverteilung.Die F-Verteilung verwendet zwei unabhängige Freiheitsgrade als Parameter.

Eine Zufallsvariable F heißt F-verteilt mit m Zählergraden undnNennergraden, in Zeichen F∼F(m,n),m, n∈ \(\mathbb{N}\), falls sie als Quotient zweier unabhängigen , standardisierter, χ2 -verteilter Zufallsvariablen Y1∼χ2(m) ,Y2∼χ2(n) geschrieben werden kann:

\[F= \frac {Y_1/m}{Y_2/n} ⇒ F ∼ F(m,n)\]

plot(function(x) df(x, df1=4, df2=30), from=0, to=8, lwd=2, 
    ylab="Dichte", main = "(d)     F-Verteilung")
plot(function(x) df(x, df1=4, df2=2), from=0, to=8, lwd=2, 
    col="blue", lty=2, add=TRUE)
legend("topright", inset=0.02, legend=c("F(4,30)", "F(4,2)"), col=c("black", "blue"), lwd=c(2,2), lty=c(1,2))

Die F-Verteilung sieht so aus.

Von der F-Verteilung zur chi^2 Verteilung (Transformationssatz)

plot(function(x) df(x, df1=4, df2=30), from=0, to=8, lwd=2, 
    ylab="Dichte", main = "(d)     F-Verteilung")
plot(function(x) df(x/4, df1=4, df2=30)/4, from=0, to=8, lwd=2,
col="red", lty=2, add=TRUE)
plot(function(x) dchisq(x, df=4), from=0, to=8, lwd=2, col="darkgreen", lty=1, add=TRUE) legend("topright", inset=0.02, legend=c(expression(F(4,30)), expression(4 * F(4,30)), expression({chi^2}(4))), col=c("black", "red", "darkgreen"), lwd=c(2,2,2), lty=c(1,2, 2))

Die F-Verteilung nähert sich der Chi- Verteilung.

Wichtige Anwendungsgebiete der F-Verteilung sind statistische Testverfahren, etwa der Vergleich von Varianzen bei normalverteilten Variablen (Varianzanalyse).

Poisson-Verteilung

Die Poisson-Verteilung richtet sich an eine diskrete Wahrscheinlichkeitsverteilung mit Zählenwerten. Kurz um: Wie oft tritt ein bestimmtes, zählbares Ereignis ein, wenn man es sehr oft wiederholt?

\[P(X = x) = \frac{\lambda ^x}{x!}*e^{-\lambda}\] λ = ist der Erwartungswert einer binomialverteilten Zufallsgröße ( n! ist die Fakultät der natürlichen Zahl n e ist die Euler’sche Zahl

library(tidyverse)

# Build Poisson distributions

p_dat <- map_df(1:10, ~ tibble(
  l = paste(.),
  x = 0:20,
  y = dpois(0:20, .)
))

# Build Normal distributions

n_dat <- map_df(1:10, ~ tibble(
  l = paste(.),
  x = seq(0, 20, by = 0.001),
  y = dnorm(seq(0, 20, by = 0.001), ., sqrt(.))
))

# Use ggplot2 to plot

ggplot(n_dat, aes(x, y, color = factor(l, levels = 1:10))) +
  geom_line() +
  geom_point(data = p_dat, aes(x, y, color = factor(l, levels = 1:10))) +
  labs(color = "Lambda:") +
  theme_minimal()

So sieht die Poisson-Verteilung aus. Sie nähert sich er Normalverteilung. Ein klassisches Beispiel der Poisson-Verteilung ist die Anzahl der Soldaten der preußischen Armee, die pro Jahr durch einen Pferdetritt versehentlich getötet wurden. Die Anzahl der Mutationen eines bestimmten DNA-Strang pro Zeiteinheit oder die Anzahl der Besucher einer Website pro Minute sind weitere sehr gute Beispiele.

LS0tDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCkltIGZvbGdlbmRlbiBUZWlsIHdpcmQgZGllIERpY2h0ZWZ1bmt0aW9uIChmw7xyIHN0ZXRpZ2UgVmVydGVpbHVuZ2VuKSBiencuIFdhaHJzY2hlaW5saWNoa2VpdHNmdW5rdGlvbiAoZsO8ciBkaXNrcmV0ZSBWZXJ0ZWlsdW5nZW4pIGRhcmdlc3RlbGx0Lg0KDQpEaWUgTm9ybWFsdmVydGVpbHVuZyBvZGVyIEdhdcOfLVZlcnRlaWx1bmcgaXN0IGVpbmUgc3RldGlnZSBWZXJ0ZWlsdW5nIChyZWVsbGVuIFphaGxlbiB6LiBCLiAtMSwzLjUsIDAuNSAuLi4gKSB1bmQgc3RlbGx0IGRpZSB3aWNodGlnc3RlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nIGRhci4gRGllIERpY2h0ZWZ1bmt0aW9uIGlzdCBkYWJlaSBkdXJjaCBkaWUgc29nZW5hbm50ZSBHYXXDn3NjaGUgR2xvY2tlbmt1cnZlIGdlZ2ViZW4uIA0KDQokJGYoeCkgPSBcZnJhY3sxfXtcc3FydHsyXHBpXHNpZ21hXjJ9fWVeey1cZnJhY3sxfXsyfShcZnJhY3t4IC1cbXV9e1xzaWdtYX0pXjJ9JCQNCg0KYGBge3J9DQpwbG90KGZ1bmN0aW9uKHgpIGRub3JtKHgsIG1lYW49MCwgc2Q9c3FydCgxKSksIA0KICAgICBmcm9tPS00LCB0bz04LCBsd2Q9MiwgDQoJICAgIHlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGEpICAgICBOb3JtYWx2ZXJ0ZWlsdW5nIikNCnBsb3QoZnVuY3Rpb24oeCkgZG5vcm0oeCwgbWVhbj0yLCBzZD1zcXJ0KDUpKSwgDQogICAgIGZyb209LTQsIHRvPTgsIGx3ZD0yLCANCgkgICBjb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIk4oMCwxKSIsICJOKDIsNSkiKSwgDQoJY29sPWMoImJsYWNrIiwgImJsdWUiKSwgbHdkPWMoMiwyKSwgbHR5PWMoMSwyKSkNCmBgYA0KKipTbyBzZWhlbiBub3JtYWx2ZXJ0ZWlsdGUgRGF0ZW4gYXVzLioqDQoNCg0KYGBge3J9DQphID0gcm5vcm0oMTAwMDAsIG1lYW4gPSAzKQ0KaGlzdChhLCBicmVha3MgPSAxMDAsIG1haW4gPSAiSGlzdG9ncmFtbSAtIE5vcm1hbHZlcnRlaWx1bmciKQ0KYGBgDQoqKkhpc3RvZ3JhbW0genVyIERhcnN0ZWxsdW5nIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nKioNCg0KTm9ybWFsdmVydGVpbHRlIFp1ZmFsbHN2YXJpYWJsZW4gaW4gZGVyIFByYXhpcyBzZWhyIGJlbGllYnQuIEJpb2xvZ2lzY2hlIEdyw7bDn2VuIHNpbmQgbm9ybWFsdmVydGVpbHQgd2llIGV0d2EgZGllIEvDtnJwZXJncsO2w59lLCBkZXIgSW50ZWxsaWdlbnpxdW90aWVudGVuIG9kZXIgU296aWFsa29tcGV0ZW56LiBQaHlzaWthbGlzY2hlIEdyb8OfZW4gbWVpc3QgYXVjaCB3aWUgZXR3YSBkaWUgZHVyY2hzY2huaXR0bGljaGUgU29ubmVuc2NoZWluZGF1ZXIuDQoNCkRlciBtYXRoZW1hdGlzY2hlIEhpbnRlcmdydW5kIGlzdCBkZXIgemVudHJhbGUgR3Jlbnp3ZXJ0c2F0eiwgZGVyIGJlc2FndCwgZGFzcyB1bnRlciBiZXN0aW1tdGVuIGFsbGdlbWVpbmVuIFZvcmF1c3NldHp1bmdlbiBkaWUgU3VtbWUgYXVzIG4gdW5hYmjDpG5naWdlbiwgaWRlbnRpc2NoIHZlcnRlaWx0ZW4gWnVmYWxsc3ZhcmlhYmxlbiB3aWVkZXJ1bSBub3JtYWx2ZXJ0ZWlsdCBpc3QuDQoNCg0KIyMgU3RhbmRhcmRvcm1hbHZlcnRlaWx1bmcNCg0KRWluZSBiZXNvbmRlcmUgRm9ybSBkZXIgTm9ybWFsdmVydGVpbHVuZyBpc3QgZGllIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZy4gRsO8ciBzaWUgZ2lsdCwgZGFzcyBkZXIgTWl0dGVsd2VydCBiZWkgMCBsaWVndCB1bmQgZGllIFN0YW5kYXJkYWJ3ZWljaHVuZyBiZWkgMSwgYWxzbyDCtT0wIHVuZCDPgz0xLiBEYW1pdCBuaW1tdCBkaWUgRnVua3Rpb25zZ2xlaWNodW5nIGZvbGdlbmRlIEZvcm0gYW46DQoNCiQkZih4KSA9IFxmcmFjezF9e1xzcXJ0ezJccGl9fWVeey1cZnJhY3sxfXsyfV4yfSQkDQoNCmBgYHtyfQ0KeCA9IHJub3JtKDEwMDAwKQ0KaGlzdCh4LCBicmVha3MgPSAxMDAsIG1haW4gPSAiSGlzdG9ncmFtbSAtIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZyIpDQpgYGANCioqSGlzdG9ncmFtbSB6dXIgRGFyc3RlbGx1bmcgZGVyIFN0YW5kYXJkbm9ybWFsdmVydGVpbHVuZyoqDQoNCg0KRHVyY2ggU3RhbmRhcmRpc2llcnVuZyBiencuIHotVHJhbnNmb3JtYXRpb24ga2FubiBlaW5lIE5vcm1hbHZlcnRlaWx1bmcgaW4gZWluZSBTdGFuZGFyZG5vcm1hbHZlcnRlaWx1bmcgw7xiZXJmw7xocnQgd2VyZGVuLiBBdWYgZGllc2UgV2Vpc2Uga8O2bm5lbiB1bnRlcnNjaGllZGxpY2hlIFZlcnRlaWx1bmdlbiBiZXNzZXIgbWl0ZWluYW5kZXIgdmVyZ2xpY2hlbiB3ZXJkZW4uIERhenUgc2V0enQgbWFuIGFscyBuZXVlIFZhcmlhYmxlIA0KDQokJHogPSAoeC3CtSkvz4MgJCQgDQoNCmBgYHtyfQ0KeiA8LSAoYS1tZWFuKGEpKS9zZChhKQ0Kc3VtbWFyeSh6KQ0KYGBgDQoNCg0KDQoNCiMjICRcY2hpXjIkLVZlcnRlaWx1bmcNCg0KRGllIENoaS1RdWFkcmF0LVZlcnRlaWx1bmcgYnp3LiDPhyAyIGlzdCBlaW5lIHN0ZXRpZ2UgV2FocnNjaGVpbmxpY2hrZWl0c3ZlcnRlaWx1bmcgw7xiZXIgZGVyIE1lbmdlIGRlciBuaWNodG5lZ2F0aXZlbiByZWVsbGVuIFphaGxlbiAoei5CIDIuMywgNDQ1LCAwLjUpLiBEaWUgQ2hpLVF1YWRyYXQtVmVydGVpbHVuZyBpc3QgZWluZSBkZXIgVmVydGVpbHVuZ2VuLCBkaWUgYXVzIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nIGFiZ2VsZWl0ZXQgd2VyZGVuIGthbm4uIA0KDQpgYGB7cn0NCg0KcGxvdChmdW5jdGlvbih4KSBkY2hpc3EoeCwgZGY9NCksIGZyb209MCwgdG89NTAsIGx3ZD0yLCANCgl5bGFiPSJEaWNodGUiLCBtYWluID0gIihiKSAgICAgQ2hpLVF1YWRyYXQtVmVydGVpbHVuZyIpDQpwbG90KGZ1bmN0aW9uKHgpIGRjaGlzcSh4LCBkZj0yMCksIGZyb209MCwgdG89NTAsIGx3ZD0yLCANCgljb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgDQoJbGVnZW5kPWMoZXhwcmVzc2lvbih7Y2hpXjJ9KDQpKSwgZXhwcmVzc2lvbih7Y2hpXjJ9KDIwKSkpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KDQpgYGANCg0KKipTbyBzaWVodCBkaWUgQ2hpXjIgLSBWZXJ0ZWlsdW5nIGF1cyoqDQoNCg0KIyMjIyBWb24gZGVyIGNoaV4yIHp1ciBOb3JtYWx2ZXJ0ZWlsdW5nDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGNoaXNxKHgsIGRmPTUwKSwgZnJvbT0zMCwgdG89MTUwLCBsd2Q9MiwgDQoJeWxhYj0iRGljaHRlIiwgbWFpbiA9ICIoYikgICAgIENoaS1RdWFkcmF0LVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkY2hpc3EoeCwgZGY9MTAwKSwgZnJvbT0zMCwgdG89MTUwLCBsd2Q9MiwgDQoJY29sPSJibHVlIiwgbHR5PTIsIGFkZD1UUlVFKQ0KcGxvdChmdW5jdGlvbih4KSBkbm9ybSh4LCBtZWFuID0gMTAwLCBzZCA9IHNxcnQoMjAwKSksIGZyb209MzAsIHRvPTE1MCwgbHdkPTIsIA0KCWNvbD0icmVkIiwgbHR5PTIsIGFkZD1UUlVFKQ0KDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgDQoJbGVnZW5kPWMoZXhwcmVzc2lvbih7Y2hpXjJ9KDUwKSksIGV4cHJlc3Npb24oe2NoaV4yfSgxMDApKSwgZXhwcmVzc2lvbihOKDEwMCwyMDApKSksIA0KCWNvbD1jKCJibGFjayIsICJibHVlIiwgInJlZCIpLCBsd2Q9YygyLDIsMiksIGx0eT1jKDEsMiwgMikpDQpgYGANCg0KKipEaWUgQ2hpXjIgLSBWZXJ0ZWlsdW5nIG7DpGhlcnQgc2ljaCBkZXIgTm9ybWFsdmVydGVpbHVuZy4qKg0KDQpEaWUgJFxjaGleMiQtVmVydGVpbHVuZyBmaW5kZXQgIHNlbHRlbiBBbndlbmR1bmcgaW4gZGVyIFJlYWxpdMOkdC4gDQpIYXVwdHPDpGNobGljaCB3aXJkIHNpZSBmw7xyIGRpZSBTY2jDpHR6dW5nIHZvbiBWZXJ0ZWlsdW5nc3BhcmFtZXRlcm4sIHdpZSB6dW0gQmVpc3BpZWwgZGVyIFZhcmlhbnogLCB1bmQgYmVpIEh5cG90aGVzZW50ZXN0cyBhbmdld2VuZGV0Lg0KDQojIyAkdCQtVmVydGVpbHVuZw0KDQpEaWUgdC1WZXJ0ZWlsdW5nIGlzdCAgUXVhc2llIGVpbmUgVmVyd2FuZHRlIGRlciBkZXIgTm9ybWFsdmVydGVpbHVuZy4NCk5vcm1hbHZlcnRlaWx1bmcgdW50ZXJzY2jDpHR6ZW4gYmVpIGtsZWluZW4gU3RpY2hwcm9iZW51bWbDpG5nZW4gYmVzdGltbXRlIHN0YXRpc3Rpc2NoZSBHcsO2w59lbi4gRGllc2VyIEVmZmVrdCBrYW5uIGFiZXIgYXVzZ2VnbGljaGVuIHdlcmRlbiwgdC1WZXJ0ZWlsdW5nIHZlcndlbmRldC4gRGllIHQtVmVydGVpbHVuZyBoYXQgZWluIGJyZWl0ZXJlcyBFbmRlbiBhbHMgZGllIE5vcm1hbHZlcnRlaWx1bmcuIE1pdCBzdGVpZ2VuZGVuIFN0aWNocHJvYmVudW1mw6RuZ2UgbsOkaGVybiBzaWNoIGRpZSBiZWlkZW4gVmVydGVpbHVuZ2VuIGFuIGJpcyBzaWUgc2luZCBzY2hsaWXDn2xpY2ggaWRlbnRpc2NoIHNpbmQuDQoNCkVpbmUgWnVmYWxsc3ZhcmlhYmxlIFQgaGVpw590IHQtdmVydGVpbHQgbWl0IG4gRnJlaWhlaXRzZ3JhZGVuLCBpbiBaZWljaGVuIFTiiLx0KG4pLCBu4oiITiwgZmFsbHMgc2llIGFscyBRdW90aWVudCB6d2VpZXIgdW5hYmjDpG5naWdlbiBadWZhbGxzdmFyaWFibGVuIGdlc2NocmllYmVuIHdlcmRlbiBrYW5uLCB3b2JlaSBpbSBaw6RobGVyIFog4oi8IE4oMCwxKXVuZCBpbSBOZW5uZXIgZGllIFd1cnplbCBlaW5lciBzdGFuZGFyZGlzaWVydGVuLCBkLiBoLiBpbiBkaWVzZW0gRmFsbCBkdXJjaCBkaWUgQW56YWhsIGRlciBGcmVpaGVpdHNncmFkZW5nZXRlaWx0ZW4gz4cyIChuKS12ZXJ0ZWlsdGVuIFp1ZmFsbHN2YXJpYWJsZSBZIHN0ZWh0Og0KDQokJFQgPSBcZnJhY3tafXtcc3FydHtZL259fSDih5IgVCDiiLwgdChuKSQkDQoNCmBgYHtyfQ0KDQpwbG90KGZ1bmN0aW9uKHgpIGR0KHgsIGRmPTMwKSwgZnJvbT0tNiwgdG89NiwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGMpICAgICB0LVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkdCh4LCBkZj0yKSwgZnJvbT0tNiwgdG89NiwgbHdkPTIsIA0KCWNvbD0iYmx1ZSIsIGx0eT0yLCBhZGQ9VFJVRSkNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldD0wLjAyLCBsZWdlbmQ9YygidCgzMCkiLCAidCgyKSIpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KDQoNCmBgYA0KDQoqKlNvIHNpZWh0IGRpZSB0LVZlcnRlaWx1bmcgYXVzLioqDQoNCiMjIyMgVm9uIGRlciB0LVZlcnRlaWx1bmcgenVyIE5vcm1hbHZlcnRlaWx1bmcgDQoNCmBgYHtyfQ0KcGxvdChmdW5jdGlvbih4KSBkbm9ybSh4LCBtZWFuPTAsIHNkPXNxcnQoMSkpLCANCiAgICAgZnJvbT0tNCwgdG89NCwgbHdkPTIsIA0KCSB5bGFiPSJEaWNodGUiLCBtYWluID0gIihhKSAgICAgTm9ybWFsdmVydGVpbHVuZyIpDQpwbG90KGZ1bmN0aW9uKHgpIGR0KHgsIGRmID0gMzApLCANCiAgICAgZnJvbT0tNCwgdG89NCwgbHdkPTIsIA0KCSAgICBjb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIk4oMCwxKSIsICJ0KDMwKSIpLCANCgljb2w9YygiYmxhY2siLCAiYmx1ZSIpLCBsd2Q9YygyLDIpLCBsdHk9YygxLDIpKQ0KYGBgDQoqKkRpZSB0LVZlcnRlaWx1bmcgbsOkaGVydCBzaWNoIGRlciBOb3JtYWx2ZXJ0ZWlsdW5nIG1pdCBOID0gMzAuKioNCg0KRGllIHQtVmVydGVpbHVuZyBzcGllbHQgZWluZSB3aWNodGlnZSBSb2xsZSBiZWltIEh5cG90aGVzZW50ZXN0cyB1bmQgS29uZmlkZW56aW50ZXJ2YWxsZS4gDQoNCg0KIyMgJEYkLVZlcnRlaWx1bmcNCkRpZSBGLVZlcnRlaWx1bmcgb2RlciBGaXNoZXItVmVydGVpbHVuZyBpc3QgZWluZSBzdGV0aWdlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nLkRpZSBGLVZlcnRlaWx1bmcgdmVyd2VuZGV0IHp3ZWkgdW5hYmjDpG5naWdlIEZyZWloZWl0c2dyYWRlIGFscyBQYXJhbWV0ZXIuDQoNCkVpbmUgWnVmYWxsc3ZhcmlhYmxlIEYgaGVpw590IEYtdmVydGVpbHQgbWl0IG0gWsOkaGxlcmdyYWRlbiB1bmRuTmVubmVyZ3JhZGVuLCBpbiBaZWljaGVuIEbiiLxGKG0sbiksbSwgbuKIiCAkXG1hdGhiYntOfSQsIGZhbGxzIHNpZSBhbHMgUXVvdGllbnQgendlaWVyIHVuYWJow6RuZ2lnZW4gLCBzdGFuZGFyZGlzaWVydGVyLCDPhzIgLXZlcnRlaWx0ZXIgWnVmYWxsc3ZhcmlhYmxlbiBZMeKIvM+HMihtKSAsWTLiiLzPhzIobikgZ2VzY2hyaWViZW4gd2VyZGVuIGthbm46DQoNCg0KDQokJEY9IFxmcmFjIHtZXzEvbX17WV8yL259IOKHkiBGIOKIvCBGKG0sbikkJA0KDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGYoeCwgZGYxPTQsIGRmMj0zMCksIGZyb209MCwgdG89OCwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGQpICAgICBGLVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkZih4LCBkZjE9NCwgZGYyPTIpLCBmcm9tPTAsIHRvPTgsIGx3ZD0yLCANCgljb2w9ImJsdWUiLCBsdHk9MiwgYWRkPVRSVUUpDQpsZWdlbmQoInRvcHJpZ2h0IiwgaW5zZXQ9MC4wMiwgbGVnZW5kPWMoIkYoNCwzMCkiLCAiRig0LDIpIiksIA0KCWNvbD1jKCJibGFjayIsICJibHVlIiksIGx3ZD1jKDIsMiksIGx0eT1jKDEsMikpDQpgYGANCioqRGllIEYtVmVydGVpbHVuZyBzaWVodCBzbyBhdXMuKioNCg0KIyMjIyBWb24gZGVyIEYtVmVydGVpbHVuZyB6dXIgY2hpXjIgVmVydGVpbHVuZyAoVHJhbnNmb3JtYXRpb25zc2F0eikNCg0KDQpgYGB7cn0NCnBsb3QoZnVuY3Rpb24oeCkgZGYoeCwgZGYxPTQsIGRmMj0zMCksIGZyb209MCwgdG89OCwgbHdkPTIsIA0KCXlsYWI9IkRpY2h0ZSIsIG1haW4gPSAiKGQpICAgICBGLVZlcnRlaWx1bmciKQ0KcGxvdChmdW5jdGlvbih4KSBkZih4LzQsIGRmMT00LCBkZjI9MzApLzQsIGZyb209MCwgdG89OCwgbHdkPTIsDQpjb2w9InJlZCIsIGx0eT0yLCBhZGQ9VFJVRSkNCnBsb3QoZnVuY3Rpb24oeCkgZGNoaXNxKHgsIGRmPTQpLCBmcm9tPTAsIHRvPTgsIGx3ZD0yLA0KY29sPSJkYXJrZ3JlZW4iLCBsdHk9MSwgYWRkPVRSVUUpDQoNCmxlZ2VuZCgidG9wcmlnaHQiLCBpbnNldD0wLjAyLCANCglsZWdlbmQ9YyhleHByZXNzaW9uKEYoNCwzMCkpLCBleHByZXNzaW9uKDQgKiBGKDQsMzApKSwgZXhwcmVzc2lvbih7Y2hpXjJ9KDQpKSksIA0KCWNvbD1jKCJibGFjayIsICJyZWQiLCAiZGFya2dyZWVuIiksIGx3ZD1jKDIsMiwyKSwgbHR5PWMoMSwyLCAyKSkNCmBgYA0KDQoqKkRpZSBGLVZlcnRlaWx1bmcgbsOkaGVydCBzaWNoIGRlciBDaGktIFZlcnRlaWx1bmcuKioNCg0KV2ljaHRpZ2UgQW53ZW5kdW5nc2dlYmlldGUgZGVyIEYtVmVydGVpbHVuZyBzaW5kIHN0YXRpc3Rpc2NoZSBUZXN0dmVyZmFocmVuLCBldHdhIGRlciBWZXJnbGVpY2ggdm9uIFZhcmlhbnplbiBiZWkgbm9ybWFsdmVydGVpbHRlbiBWYXJpYWJsZW4gKFZhcmlhbnphbmFseXNlKS4NCg0KDQoNCiMjIFBvaXNzb24tVmVydGVpbHVuZw0KDQpEaWUgUG9pc3Nvbi1WZXJ0ZWlsdW5nIHJpY2h0ZXQgc2ljaCBhbiBlaW5lIGRpc2tyZXRlIFdhaHJzY2hlaW5saWNoa2VpdHN2ZXJ0ZWlsdW5nIG1pdCBaw6RobGVud2VydGVuLiBLdXJ6IHVtOiBXaWUgb2Z0IHRyaXR0IGVpbiBiZXN0aW1tdGVzLCB6w6RobGJhcmVzIEVyZWlnbmlzIGVpbiwgd2VubiBtYW4gZXMgc2VociBvZnQgd2llZGVyaG9sdD8NCg0KJCRQKFggPSB4KSA9IFxmcmFje1xsYW1iZGEgXnh9e3ghfSplXnstXGxhbWJkYX0kJA0KzrsgPSBpc3QgZGVyIEVyd2FydHVuZ3N3ZXJ0IGVpbmVyIGJpbm9taWFsdmVydGVpbHRlbiBadWZhbGxzZ3LDtsOfZSAoDQpuISBpc3QgZGllIEZha3VsdMOkdCBkZXIgbmF0w7xybGljaGVuIFphaGwgbg0KZSBpc3QgZGllIEV1bGVyJ3NjaGUgWmFobA0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCiMgQnVpbGQgUG9pc3NvbiBkaXN0cmlidXRpb25zDQoNCnBfZGF0IDwtIG1hcF9kZigxOjEwLCB+IHRpYmJsZSgNCiAgbCA9IHBhc3RlKC4pLA0KICB4ID0gMDoyMCwNCiAgeSA9IGRwb2lzKDA6MjAsIC4pDQopKQ0KDQojIEJ1aWxkIE5vcm1hbCBkaXN0cmlidXRpb25zDQoNCm5fZGF0IDwtIG1hcF9kZigxOjEwLCB+IHRpYmJsZSgNCiAgbCA9IHBhc3RlKC4pLA0KICB4ID0gc2VxKDAsIDIwLCBieSA9IDAuMDAxKSwNCiAgeSA9IGRub3JtKHNlcSgwLCAyMCwgYnkgPSAwLjAwMSksIC4sIHNxcnQoLikpDQopKQ0KDQojIFVzZSBnZ3Bsb3QyIHRvIHBsb3QNCg0KZ2dwbG90KG5fZGF0LCBhZXMoeCwgeSwgY29sb3IgPSBmYWN0b3IobCwgbGV2ZWxzID0gMToxMCkpKSArDQogIGdlb21fbGluZSgpICsNCiAgZ2VvbV9wb2ludChkYXRhID0gcF9kYXQsIGFlcyh4LCB5LCBjb2xvciA9IGZhY3RvcihsLCBsZXZlbHMgPSAxOjEwKSkpICsNCiAgbGFicyhjb2xvciA9ICJMYW1iZGE6IikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCioqU28gc2llaHQgZGllIFBvaXNzb24tVmVydGVpbHVuZyBhdXMuIFNpZSBuw6RoZXJ0IHNpY2ggZXIgTm9ybWFsdmVydGVpbHVuZy4qKg0KRWluIGtsYXNzaXNjaGVzIEJlaXNwaWVsIGRlciBQb2lzc29uLVZlcnRlaWx1bmcgaXN0IGRpZSBBbnphaGwgZGVyIFNvbGRhdGVuIGRlciBwcmV1w59pc2NoZW4gQXJtZWUsIGRpZSBwcm8gSmFociBkdXJjaCBlaW5lbiBQZmVyZGV0cml0dCB2ZXJzZWhlbnRsaWNoIGdldMO2dGV0IHd1cmRlbi4gRGllIEFuemFobCBkZXIgTXV0YXRpb25lbiBlaW5lcyBiZXN0aW1tdGVuIEROQS1TdHJhbmcgcHJvIFplaXRlaW5oZWl0IG9kZXIgZGllIEFuemFobCBkZXIgQmVzdWNoZXIgZWluZXIgV2Vic2l0ZSBwcm8gTWludXRlIHNpbmQgd2VpdGVyZSBzZWhyIGd1dGUgQmVpc3BpZWxlLg0KDQo=