[4.2]

Да се покаже дека \(\boldsymbol{z}=(\boldsymbol{T'})^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \implies E(\boldsymbol{z})=\boldsymbol{0},cov(\boldsymbol{z})=\boldsymbol{I}\)

\[ E(\boldsymbol{z})=E((\boldsymbol{T'})^{-1}(\boldsymbol{y}-\boldsymbol{\mu}))=(\boldsymbol{T'})^{-1}E(\boldsymbol{y}-\boldsymbol{\mu})=(\boldsymbol{T'})^{-1}(E(\boldsymbol{y})-\boldsymbol{\mu})=(\boldsymbol{T'})^{-1}(\boldsymbol{\mu}-\boldsymbol{\mu})=\boldsymbol{0}\\ cov(\boldsymbol{z})=cov((\boldsymbol{T'})^{-1}(\boldsymbol{y}-\boldsymbol{\mu}))= (\boldsymbol{T}')^{-1}cov(\boldsymbol{y})[(\boldsymbol{T}')^{-1}]'= (\boldsymbol{T}')^{-1}\boldsymbol{T}'\boldsymbol{T}\boldsymbol{T}^{-1}=\boldsymbol{I} \]

[4.5]

Да се покаже дека \[\frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}}+\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}}+\bar{\boldsymbol{y}}-\boldsymbol{\mu})=\frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})+\frac{n}{2}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})\]

\[ \frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}}+\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}}+\bar{\boldsymbol{y}}-\boldsymbol{\mu})=\\ \frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})+ \frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})+ \frac{1}{2}\sum_{i=1}^{n}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})+ \frac{1}{2}\sum_{i=1}^{n}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})=\\ \frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})+ \frac{1}{2}(n\bar{\boldsymbol{y}}-n\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})+ \frac{1}{2}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1} (n\bar{\boldsymbol{y}}-n\bar{\boldsymbol{y}})+ \frac{n}{2}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})= \\ \frac{1}{2}\sum_{i=1}^{n}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}_i-\bar{\boldsymbol{y}})+\frac{n}{2}(\bar{\boldsymbol{y}}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\bar{\boldsymbol{y}}-\boldsymbol{\mu}) \]

[4.9]

Да се покаже дека \(F_n=\frac{n-p-1}{p}(\frac{1}{w}-1)\)

\[ w=1-\frac{nD_n^2}{(n-1)^2} \implies F_n=\frac{n-p-1}{p}(\frac{1}{1-\frac{nD_n^2}{(n-1)^2}}-1)=\frac{n-p-1}{p}(\frac{1}{w}-1) \]

[4.11]

\[ \boldsymbol{y} \sim N_3(\boldsymbol{\mu}, \boldsymbol{\Sigma}); \boldsymbol{\mu}=\begin{pmatrix}3\\1\\4\end{pmatrix}; \boldsymbol{\Sigma}=\begin{pmatrix}6 & 1 & -2\\1 & 13 & 4\\-2 & 4 & 4\end{pmatrix} \]

(a)

Да се најде \(\boldsymbol{z}=(\boldsymbol{T}')^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim N_3(\boldsymbol{0},\boldsymbol{I})\)

Чолески декомпозиција:

cholesky <- function(a) {
  d = dim(a)[1]
  t = matrix(rep(0, d * d), nrow=d, ncol=d)
  t[1, 1] = sqrt(a[1, 1])
  for (j in 2:d) {
    t[1, j] = a[1, j] / t[1, 1]
  }
  for (i in 2:d) {
    for (j in 2:d) {
      s = 0
      if (i == j) {
        for (k in 1:(i-1)) {
          s = s + t[k, i] ^ 2
        }
        t[i, i] = sqrt(a[i, i] - s)
      } else if (i < j) {
        for (k in 1:(i-1)) {
          s = s + t[k, i] * t[k, j]
        }
        t[i, j] = (a[i, j] - s) / t[i, i]
      }
    }
  }
  return(t)
}

Sigma = matrix(
  c(6, 1, -2,
    1, 13, 4,
    -2, 4, 4
  ),
  nrow=3,
  ncol=3
)
T = cholesky(Sigma)
T
        [,1]      [,2]       [,3]
[1,] 2.44949 0.4082483 -0.8164966
[2,] 0.00000 3.5823642  1.2096295
[3,] 0.00000 0.0000000  1.3675269

Векторот \(\boldsymbol{z}\):

\[ \boldsymbol{z} = \begin{pmatrix} 2.45 & 00 & 0\\ 0.41 & 3.58 & 0\\ -0.82 & 1.21 & 1.37\end{pmatrix}^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \]

(b)

Да се најде \(\boldsymbol{z}=(\boldsymbol{\Sigma}^{\frac{1}{2}})^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim N_3(\boldsymbol{0},\boldsymbol{I})\)

Прво правиме спектрална декомпозиција на \(\boldsymbol{\Sigma}\). Матрицата е симетрична, затоа има 3 сопствени вредности. Карактеристичната равенка изгледа вака:

\[ |\boldsymbol{\Sigma}-\lambda\boldsymbol{I}|=\begin{vmatrix}6-\lambda & 1 & -2\\1 & 13-\lambda & 4\\-2 & 4 & 4-\lambda\end{vmatrix}=\\ (6-\lambda)\begin{vmatrix}13-\lambda & 4\\4 & 4-\lambda\end{vmatrix} -\begin{vmatrix}1 & 4\\-2 & 4-\lambda\end{vmatrix} -2\begin{vmatrix}1 & 13-\lambda\\-2 & 4\end{vmatrix}=\\ (6-\lambda)(36-17\lambda+\lambda^2)-(12-\lambda)-2(30-2\lambda)=\\ 144-133\lambda+23\lambda^2-\lambda^3 \]

Корените на равенката се:

lambdas = polyroot(z=c(144, -133, 23, -1))
print(lambdas)
[1]  1.401827+0i  7.071196-0i 14.526977+0i

За да ги најдеме сопствените вектори, потребно ни е да го решиме системот равенки:

\[ \begin{pmatrix}6-\lambda & 1 & -2\\1 & 13-\lambda & 4\\-2 & 4 & 4-\lambda\end{pmatrix} \begin{pmatrix}x_1\\x_2\\x_3\end{pmatrix}= \begin{pmatrix}0\\0\\0\end{pmatrix} \]

Во овој систем знаеме дека едната равенка е вишок. Затоа, претпоставувајќи дека \(x_3=1\), додавајќи ја последната равенка на првите две го добиваме системот:

\[ \begin{pmatrix} (6-\lambda)-2 & (1)+4\\ (1)-2 & (13-\lambda)+4 \end{pmatrix} \begin{pmatrix}x_1\\x_2\end{pmatrix}= \begin{pmatrix} -[(-2) + (4 - \lambda)]\\ -[(4)+(4-\lambda)] \end{pmatrix} \]

Овој систем го решаваме со кодот од домашната за Глава 2:

solve_equations <- function(a, b) {
  a <- matrix(data=a, nrow=2, ncol=2, byrow=TRUE)
  b <- matrix(data=b, nrow=2, ncol=1, byrow=FALSE)
  sol <- solve(a, b)
  nu <- c(sol[1], sol[2], 1)
  nu_length <- sqrt(sum(nu ^ 2))
  return(nu / nu_length)
}

solve_nu <- function(l) {
  a <- c(
    6 - l - 2, 1 + 4, 
    1 - 2, 13 - l + 4)
  b <- c(
    2 - (4 - l), 
    -4 - (4 - l)
  )
  return(solve_equations(a, b))
}

Сопствениoт вектор за \(\lambda_1\) со модул 1 e:

nu_1 = solve_nu(lambdas[1])
print(nu_1)
[1]  0.4358269+0i -0.3267970+0i  0.8386052-0i

Сопствениoт вектор за \(\lambda_2\) со модул 1 e:

nu_2 = solve_nu(lambdas[2])
print(nu_2)
[1] -0.8996077-0i -0.1296166-0i  0.4170197-0i

Сопствениoт вектор за \(\lambda_3\) со модул 1 e:

nu_3 = solve_nu(lambdas[3])
print(nu_3)
[1] 0.02758366+0i 0.93616414+0i 0.35047945-0i

Конечно ги добиваме \(C\) и \(D\) (оцде се користи %*% за множење матрици со цел да се провери дека \(CDC'\) е исто со почетната матрица):

C = matrix(
  data=as.numeric(c(nu_1, nu_2, nu_3)), 
  nrow=3, 
  ncol=3, 
  byrow=FALSE
)
imaginary parts discarded in coercion
D = diag(x=as.numeric(lambdas), nrow=3, ncol=3)
imaginary parts discarded in coercion
C %*% D %*% t(C)
     [,1] [,2] [,3]
[1,]    6    1   -2
[2,]    1   13    4
[3,]   -2    4    4

Сега наоѓаме \(\boldsymbol{\Sigma}^{\frac{1}{2}}=\boldsymbol{C}\boldsymbol{D}^{\frac{1}{2}}\boldsymbol{C}'\). Истовремено и проверуваме дали е точно најдено со тоа што го креваме на квадрат и наоѓаме и инверзна матрица..

D_sr = diag(x=as.numeric(sqrt(lambdas)), nrow=3, ncol=3)
imaginary parts discarded in coercion
Sigma_sr = C %*% D_sr %*% t(C)
Sigma_sr
           [,1]      [,2]       [,3]
[1,]  2.3798448 0.2398604 -0.5280208
[2,]  0.2398604 3.5114681  0.7823418
[3,] -0.5280208 0.7823418  1.7632740
Sigma_sr %*% Sigma_sr
     [,1] [,2] [,3]
[1,]    6    1   -2
[2,]    1   13    4
[3,]   -2    4    4
solve(Sigma_sr)
            [,1]        [,2]       [,3]
[1,]  0.46496849 -0.06966936  0.1701484
[2,] -0.06966936  0.32645938 -0.1657086
[3,]  0.17014841 -0.16570861  0.6916013

Решението е:

\[ \boldsymbol{z}=(\boldsymbol{\Sigma}^{\frac{1}{2}})^{-1}(\boldsymbol{y}-\boldsymbol{\mu})=\begin{pmatrix} 0.46 & -0.07 & 0.17\\ -0.07 & 0.33 & -0.17\\ 0.17 & -0.17 & 0.69 \end{pmatrix}(\boldsymbol{y}-\boldsymbol{\mu}) \sim N_3(\boldsymbol{0},\boldsymbol{I}) \]

(c)

Дистрибуцијата на \((\boldsymbol{y}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}-\boldsymbol{\mu})\) е хи-квадратна со 3 степени на слобода, т.е. \((\boldsymbol{y}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim \chi^2_3\).

[4.13]

\[ \boldsymbol{y} \sim N_4(\boldsymbol{\mu}, \boldsymbol{\Sigma}); \boldsymbol{\mu}=\begin{pmatrix}-2\\3\\-1\\5\end{pmatrix}; \boldsymbol{\Sigma}=\begin{pmatrix} 11 & −8 & 3 & 9\\ −8 & 9 & −3 & 6\\ 3 & −3 & 2 & 3\\ 9 & 6 & 3 & 9 \end{pmatrix} \]

(a)

Да се најде \(\boldsymbol{z}=(\boldsymbol{T}')^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim N_4(\boldsymbol{0},\boldsymbol{I})\)

Чолески декомпозиција со кодот од претходната задача:

Sigma = matrix(
  c(11, -8, 3, 9, 
    -8, 9, -3, 6, 
    3, -3, 2, 3, 
    9, 6, 3, 9),
  nrow=4,
  ncol=4
)
T = cholesky(Sigma)
NaNs produced
T
         [,1]      [,2]       [,3]     [,4]
[1,] 3.316625 -2.412091  0.9045340 2.713602
[2,] 0.000000  1.783765 -0.4586825 7.033131
[3,] 0.000000  0.000000  0.9856108 3.826489
[4,] 0.000000  0.000000  0.0000000      NaN

Една од вредностите е NaN бидејќи \(\boldsymbol{\Sigma}\) не е позитивно дефинитна (веројатно има некоја грешка во задачата).

(b)

Да се најде \(\boldsymbol{z}=(\boldsymbol{\Sigma}^{\frac{1}{2}})^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim N_4(\boldsymbol{0},\boldsymbol{I})\)

Не може да се најде бидејќи \(\boldsymbol{\Sigma}\) не е позитивно дефинитна (веројатно има некоја грешка во задачата).

(c)

Дистрибуцијата на \((\boldsymbol{y}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}-\boldsymbol{\mu})\) е хи-квадратна со 4 степени на слобода, т.е. \((\boldsymbol{y}-\boldsymbol{\mu})'\boldsymbol{\Sigma}^{-1}(\boldsymbol{y}-\boldsymbol{\mu}) \sim \chi^2_4\).

LS0tDQp0aXRsZTogItCT0LvQsNCy0LAgMzogVGhlIE11bHRpdmFyaWF0ZSBOb3JtYWwgRGlzdHJpYnV0aW9uIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KIyBbNC4yXQ0KDQrQlNCwINGB0LUg0L/QvtC60LDQttC1INC00LXQutCwICRcYm9sZHN5bWJvbHt6fT0oXGJvbGRzeW1ib2x7VCd9KV57LTF9KFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pIFxpbXBsaWVzIEUoXGJvbGRzeW1ib2x7en0pPVxib2xkc3ltYm9sezB9LGNvdihcYm9sZHN5bWJvbHt6fSk9XGJvbGRzeW1ib2x7SX0kDQoNCiQkDQpFKFxib2xkc3ltYm9se3p9KT1FKChcYm9sZHN5bWJvbHtUJ30pXnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkpPShcYm9sZHN5bWJvbHtUJ30pXnstMX1FKFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pPShcYm9sZHN5bWJvbHtUJ30pXnstMX0oRShcYm9sZHN5bWJvbHt5fSktXGJvbGRzeW1ib2x7XG11fSk9KFxib2xkc3ltYm9se1QnfSleey0xfShcYm9sZHN5bWJvbHtcbXV9LVxib2xkc3ltYm9se1xtdX0pPVxib2xkc3ltYm9sezB9XFwNCmNvdihcYm9sZHN5bWJvbHt6fSk9Y292KChcYm9sZHN5bWJvbHtUJ30pXnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkpPQ0KKFxib2xkc3ltYm9se1R9Jyleey0xfWNvdihcYm9sZHN5bWJvbHt5fSlbKFxib2xkc3ltYm9se1R9Jyleey0xfV0nPQ0KKFxib2xkc3ltYm9se1R9Jyleey0xfVxib2xkc3ltYm9se1R9J1xib2xkc3ltYm9se1R9XGJvbGRzeW1ib2x7VH1eey0xfT1cYm9sZHN5bWJvbHtJfQ0KJCQNCg0KIyBbNC41XQ0KDQrQlNCwINGB0LUg0L/QvtC60LDQttC1INC00LXQutCwICQkXGZyYWN7MX17Mn1cc3VtX3tpPTF9XntufShcYm9sZHN5bWJvbHt5fV9pLVxiYXJ7XGJvbGRzeW1ib2x7eX19K1xiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYm9sZHN5bWJvbHt5fV9pLVxiYXJ7XGJvbGRzeW1ib2x7eX19K1xiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pPVxmcmFjezF9ezJ9XHN1bV97aT0xfV57bn0oXGJvbGRzeW1ib2x7eX1faS1cYmFye1xib2xkc3ltYm9se3l9fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0pK1xmcmFje259ezJ9KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYmFye1xib2xkc3ltYm9se3l9fS1cYm9sZHN5bWJvbHtcbXV9KSQkDQoNCiQkDQpcZnJhY3sxfXsyfVxzdW1fe2k9MX1ee259KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0rXGJhcntcYm9sZHN5bWJvbHt5fX0tXGJvbGRzeW1ib2x7XG11fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0rXGJhcntcYm9sZHN5bWJvbHt5fX0tXGJvbGRzeW1ib2x7XG11fSk9XFwNClxmcmFjezF9ezJ9XHN1bV97aT0xfV57bn0oXGJvbGRzeW1ib2x7eX1faS1cYmFye1xib2xkc3ltYm9se3l9fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0pKw0KXGZyYWN7MX17Mn1cc3VtX3tpPTF9XntufShcYm9sZHN5bWJvbHt5fV9pLVxiYXJ7XGJvbGRzeW1ib2x7eX19KSdcYm9sZHN5bWJvbHtcU2lnbWF9XnstMX0oXGJhcntcYm9sZHN5bWJvbHt5fX0tXGJvbGRzeW1ib2x7XG11fSkrDQpcZnJhY3sxfXsyfVxzdW1fe2k9MX1ee259KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYm9sZHN5bWJvbHt5fV9pLVxiYXJ7XGJvbGRzeW1ib2x7eX19KSsNClxmcmFjezF9ezJ9XHN1bV97aT0xfV57bn0oXGJhcntcYm9sZHN5bWJvbHt5fX0tXGJvbGRzeW1ib2x7XG11fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pPVxcDQpcZnJhY3sxfXsyfVxzdW1fe2k9MX1ee259KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYm9sZHN5bWJvbHt5fV9pLVxiYXJ7XGJvbGRzeW1ib2x7eX19KSsNClxmcmFjezF9ezJ9KG5cYmFye1xib2xkc3ltYm9se3l9fS1uXGJhcntcYm9sZHN5bWJvbHt5fX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYmFye1xib2xkc3ltYm9se3l9fS1cYm9sZHN5bWJvbHtcbXV9KSsNClxmcmFjezF9ezJ9KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfQ0KKG5cYmFye1xib2xkc3ltYm9se3l9fS1uXGJhcntcYm9sZHN5bWJvbHt5fX0pKw0KXGZyYWN7bn17Mn0oXGJhcntcYm9sZHN5bWJvbHt5fX0tXGJvbGRzeW1ib2x7XG11fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pPQ0KXFwNClxmcmFjezF9ezJ9XHN1bV97aT0xfV57bn0oXGJvbGRzeW1ib2x7eX1faS1cYmFye1xib2xkc3ltYm9se3l9fSknXGJvbGRzeW1ib2x7XFNpZ21hfV57LTF9KFxib2xkc3ltYm9se3l9X2ktXGJhcntcYm9sZHN5bWJvbHt5fX0pK1xmcmFje259ezJ9KFxiYXJ7XGJvbGRzeW1ib2x7eX19LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYmFye1xib2xkc3ltYm9se3l9fS1cYm9sZHN5bWJvbHtcbXV9KQ0KJCQNCg0KIyBbNC45XQ0KDQrQlNCwINGB0LUg0L/QvtC60LDQttC1INC00LXQutCwICRGX249XGZyYWN7bi1wLTF9e3B9KFxmcmFjezF9e3d9LTEpJA0KDQokJA0Kdz0xLVxmcmFje25EX25eMn17KG4tMSleMn0gXGltcGxpZXMgRl9uPVxmcmFje24tcC0xfXtwfShcZnJhY3sxfXsxLVxmcmFje25EX25eMn17KG4tMSleMn19LTEpPVxmcmFje24tcC0xfXtwfShcZnJhY3sxfXt3fS0xKQ0KJCQNCg0KIyBbNC4xMV0NCg0KJCQNClxib2xkc3ltYm9se3l9IFxzaW0gTl8zKFxib2xkc3ltYm9se1xtdX0sIFxib2xkc3ltYm9se1xTaWdtYX0pOw0KXGJvbGRzeW1ib2x7XG11fT1cYmVnaW57cG1hdHJpeH0zXFwxXFw0XGVuZHtwbWF0cml4fTsNClxib2xkc3ltYm9se1xTaWdtYX09XGJlZ2lue3BtYXRyaXh9NiAmIDEgJiAtMlxcMSAmIDEzICYgNFxcLTIgJiA0ICYgNFxlbmR7cG1hdHJpeH0NCiQkDQoNCiMjIyAoYSkNCg0K0JTQsCDRgdC1INC90LDRmNC00LUgJFxib2xkc3ltYm9se3p9PShcYm9sZHN5bWJvbHtUfScpXnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkgXHNpbSBOXzMoXGJvbGRzeW1ib2x7MH0sXGJvbGRzeW1ib2x7SX0pJA0KDQrQp9C+0LvQtdGB0LrQuCDQtNC10LrQvtC80L/QvtC30LjRhtC40ZjQsDoNCg0KYGBge3J9DQpjaG9sZXNreSA8LSBmdW5jdGlvbihhKSB7DQogIGQgPSBkaW0oYSlbMV0NCiAgdCA9IG1hdHJpeChyZXAoMCwgZCAqIGQpLCBucm93PWQsIG5jb2w9ZCkNCiAgdFsxLCAxXSA9IHNxcnQoYVsxLCAxXSkNCiAgZm9yIChqIGluIDI6ZCkgew0KICAgIHRbMSwgal0gPSBhWzEsIGpdIC8gdFsxLCAxXQ0KICB9DQogIGZvciAoaSBpbiAyOmQpIHsNCiAgICBmb3IgKGogaW4gMjpkKSB7DQogICAgICBzID0gMA0KICAgICAgaWYgKGkgPT0gaikgew0KICAgICAgICBmb3IgKGsgaW4gMTooaS0xKSkgew0KICAgICAgICAgIHMgPSBzICsgdFtrLCBpXSBeIDINCiAgICAgICAgfQ0KICAgICAgICB0W2ksIGldID0gc3FydChhW2ksIGldIC0gcykNCiAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHsNCiAgICAgICAgZm9yIChrIGluIDE6KGktMSkpIHsNCiAgICAgICAgICBzID0gcyArIHRbaywgaV0gKiB0W2ssIGpdDQogICAgICAgIH0NCiAgICAgICAgdFtpLCBqXSA9IChhW2ksIGpdIC0gcykgLyB0W2ksIGldDQogICAgICB9DQogICAgfQ0KICB9DQogIHJldHVybih0KQ0KfQ0KDQpTaWdtYSA9IG1hdHJpeCgNCiAgYyg2LCAxLCAtMiwNCiAgICAxLCAxMywgNCwNCiAgICAtMiwgNCwgNA0KICApLA0KICBucm93PTMsDQogIG5jb2w9Mw0KKQ0KVCA9IGNob2xlc2t5KFNpZ21hKQ0KVA0KYGBgDQoNCtCS0LXQutGC0L7RgNC+0YIgJFxib2xkc3ltYm9se3p9JDoNCg0KJCQNClxib2xkc3ltYm9se3p9ID0gXGJlZ2lue3BtYXRyaXh9DQoyLjQ1ICYgMDAgJiAwXFwNCjAuNDEgJiAzLjU4ICYgMFxcDQotMC44MiAmIDEuMjEgJiAxLjM3XGVuZHtwbWF0cml4fV57LTF9KFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pDQokJA0KDQojIyMgKGIpDQoNCtCU0LAg0YHQtSDQvdCw0ZjQtNC1ICRcYm9sZHN5bWJvbHt6fT0oXGJvbGRzeW1ib2x7XFNpZ21hfV57XGZyYWN7MX17Mn19KV57LTF9KFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pIFxzaW0gTl8zKFxib2xkc3ltYm9sezB9LFxib2xkc3ltYm9se0l9KSQNCg0K0J/RgNCy0L4g0L/RgNCw0LLQuNC80LUg0YHQv9C10LrRgtGA0LDQu9C90LAg0LTQtdC60L7QvNC/0L7Qt9C40YbQuNGY0LAg0L3QsCAkXGJvbGRzeW1ib2x7XFNpZ21hfSQuINCc0LDRgtGA0LjRhtCw0YLQsCDQtSDRgdC40LzQtdGC0YDQuNGH0L3QsCwg0LfQsNGC0L7QsCDQuNC80LAgMyDRgdC+0L/RgdGC0LLQtdC90Lgg0LLRgNC10LTQvdC+0YHRgtC4LiDQmtCw0YDQsNC60YLQtdGA0LjRgdGC0LjRh9C90LDRgtCwINGA0LDQstC10L3QutCwINC40LfQs9C70LXQtNCwINCy0LDQutCwOg0KDQokJA0KfFxib2xkc3ltYm9se1xTaWdtYX0tXGxhbWJkYVxib2xkc3ltYm9se0l9fD1cYmVnaW57dm1hdHJpeH02LVxsYW1iZGEgJiAxICYgLTJcXDEgJiAxMy1cbGFtYmRhICYgNFxcLTIgJiA0ICYgNC1cbGFtYmRhXGVuZHt2bWF0cml4fT1cXA0KKDYtXGxhbWJkYSlcYmVnaW57dm1hdHJpeH0xMy1cbGFtYmRhICYgNFxcNCAmIDQtXGxhbWJkYVxlbmR7dm1hdHJpeH0NCi1cYmVnaW57dm1hdHJpeH0xICYgNFxcLTIgJiA0LVxsYW1iZGFcZW5ke3ZtYXRyaXh9DQotMlxiZWdpbnt2bWF0cml4fTEgJiAxMy1cbGFtYmRhXFwtMiAmIDRcZW5ke3ZtYXRyaXh9PVxcDQooNi1cbGFtYmRhKSgzNi0xN1xsYW1iZGErXGxhbWJkYV4yKS0oMTItXGxhbWJkYSktMigzMC0yXGxhbWJkYSk9XFwNCjE0NC0xMzNcbGFtYmRhKzIzXGxhbWJkYV4yLVxsYW1iZGFeMw0KJCQNCg0K0JrQvtGA0LXQvdC40YLQtSDQvdCwINGA0LDQstC10L3QutCw0YLQsCDRgdC1Og0KDQpgYGB7cn0NCmxhbWJkYXMgPSBwb2x5cm9vdCh6PWMoMTQ0LCAtMTMzLCAyMywgLTEpKQ0KcHJpbnQobGFtYmRhcykNCmBgYA0K0JfQsCDQtNCwINCz0Lgg0L3QsNGY0LTQtdC80LUg0YHQvtC/0YHRgtCy0LXQvdC40YLQtSDQstC10LrRgtC+0YDQuCwg0L/QvtGC0YDQtdCx0L3QviDQvdC4INC1INC00LAg0LPQviDRgNC10YjQuNC80LUg0YHQuNGB0YLQtdC80L7RgiDRgNCw0LLQtdC90LrQuDoNCg0KJCQNClxiZWdpbntwbWF0cml4fTYtXGxhbWJkYSAmIDEgJiAtMlxcMSAmIDEzLVxsYW1iZGEgJiA0XFwtMiAmIDQgJiA0LVxsYW1iZGFcZW5ke3BtYXRyaXh9DQpcYmVnaW57cG1hdHJpeH14XzFcXHhfMlxceF8zXGVuZHtwbWF0cml4fT0NClxiZWdpbntwbWF0cml4fTBcXDBcXDBcZW5ke3BtYXRyaXh9DQokJA0KDQrQktC+INC+0LLQvtGYINGB0LjRgdGC0LXQvCDQt9C90LDQtdC80LUg0LTQtdC60LAg0LXQtNC90LDRgtCwINGA0LDQstC10L3QutCwINC1INCy0LjRiNC+0LouINCX0LDRgtC+0LAsINC/0YDQtdGC0L/QvtGB0YLQsNCy0YPQstCw0ZjRnNC4INC00LXQutCwICR4XzM9MSQsINC00L7QtNCw0LLQsNGY0ZzQuCDRmNCwINC/0L7RgdC70LXQtNC90LDRgtCwINGA0LDQstC10L3QutCwINC90LAg0L/RgNCy0LjRgtC1INC00LLQtSDQs9C+INC00L7QsdC40LLQsNC80LUg0YHQuNGB0YLQtdC80L7RgjoNCg0KJCQNClxiZWdpbntwbWF0cml4fQ0KKDYtXGxhbWJkYSktMiAmICgxKSs0XFwNCigxKS0yICYgKDEzLVxsYW1iZGEpKzQNClxlbmR7cG1hdHJpeH0NClxiZWdpbntwbWF0cml4fXhfMVxceF8yXGVuZHtwbWF0cml4fT0NClxiZWdpbntwbWF0cml4fQ0KLVsoLTIpICsgKDQgLSBcbGFtYmRhKV1cXA0KLVsoNCkrKDQtXGxhbWJkYSldDQpcZW5ke3BtYXRyaXh9DQokJA0KDQrQntCy0L7RmCDRgdC40YHRgtC10Lwg0LPQviDRgNC10YjQsNCy0LDQvNC1INGB0L4g0LrQvtC00L7RgiDQvtC0INC00L7QvNCw0YjQvdCw0YLQsCDQt9CwINCT0LvQsNCy0LAgMjoNCg0KYGBge3J9DQpzb2x2ZV9lcXVhdGlvbnMgPC0gZnVuY3Rpb24oYSwgYikgew0KICBhIDwtIG1hdHJpeChkYXRhPWEsIG5yb3c9MiwgbmNvbD0yLCBieXJvdz1UUlVFKQ0KICBiIDwtIG1hdHJpeChkYXRhPWIsIG5yb3c9MiwgbmNvbD0xLCBieXJvdz1GQUxTRSkNCiAgc29sIDwtIHNvbHZlKGEsIGIpDQogIG51IDwtIGMoc29sWzFdLCBzb2xbMl0sIDEpDQogIG51X2xlbmd0aCA8LSBzcXJ0KHN1bShudSBeIDIpKQ0KICByZXR1cm4obnUgLyBudV9sZW5ndGgpDQp9DQoNCnNvbHZlX251IDwtIGZ1bmN0aW9uKGwpIHsNCiAgYSA8LSBjKA0KICAgIDYgLSBsIC0gMiwgMSArIDQsIA0KICAgIDEgLSAyLCAxMyAtIGwgKyA0KQ0KICBiIDwtIGMoDQogICAgMiAtICg0IC0gbCksIA0KICAgIC00IC0gKDQgLSBsKQ0KICApDQogIHJldHVybihzb2x2ZV9lcXVhdGlvbnMoYSwgYikpDQp9DQpgYGANCg0K0KHQvtC/0YHRgtCy0LXQvdC4b9GCINCy0LXQutGC0L7RgCDQt9CwICRcbGFtYmRhXzEkINGB0L4g0LzQvtC00YPQuyAxIGU6DQoNCmBgYHtyfQ0KbnVfMSA9IHNvbHZlX251KGxhbWJkYXNbMV0pDQpwcmludChudV8xKQ0KYGBgDQoNCtCh0L7Qv9GB0YLQstC10L3QuG/RgiDQstC10LrRgtC+0YAg0LfQsCAkXGxhbWJkYV8yJCDRgdC+INC80L7QtNGD0LsgMSBlOg0KDQpgYGB7cn0NCm51XzIgPSBzb2x2ZV9udShsYW1iZGFzWzJdKQ0KcHJpbnQobnVfMikNCmBgYA0KDQrQodC+0L/RgdGC0LLQtdC90Lhv0YIg0LLQtdC60YLQvtGAINC30LAgJFxsYW1iZGFfMyQg0YHQviDQvNC+0LTRg9C7IDEgZToNCg0KYGBge3J9DQpudV8zID0gc29sdmVfbnUobGFtYmRhc1szXSkNCnByaW50KG51XzMpDQpgYGANCg0K0JrQvtC90LXRh9C90L4g0LPQuCDQtNC+0LHQuNCy0LDQvNC1ICRDJCDQuCAkRCQgKNC+0YbQtNC1INGB0LUg0LrQvtGA0LjRgdGC0LggJSolINC30LAg0LzQvdC+0LbQtdGa0LUg0LzQsNGC0YDQuNGG0Lgg0YHQviDRhtC10Lsg0LTQsCDRgdC1INC/0YDQvtCy0LXRgNC4INC00LXQutCwICRDREMnJCDQtSDQuNGB0YLQviDRgdC+INC/0L7Rh9C10YLQvdCw0YLQsCDQvNCw0YLRgNC40YbQsCk6DQoNCmBgYHtyfQ0KQyA9IG1hdHJpeCgNCiAgZGF0YT1hcy5udW1lcmljKGMobnVfMSwgbnVfMiwgbnVfMykpLCANCiAgbnJvdz0zLCANCiAgbmNvbD0zLCANCiAgYnlyb3c9RkFMU0UNCikNCkQgPSBkaWFnKHg9YXMubnVtZXJpYyhsYW1iZGFzKSwgbnJvdz0zLCBuY29sPTMpDQpDICUqJSBEICUqJSB0KEMpDQpgYGANCg0K0KHQtdCz0LAg0L3QsNC+0ZPQsNC80LUgJFxib2xkc3ltYm9se1xTaWdtYX1ee1xmcmFjezF9ezJ9fT1cYm9sZHN5bWJvbHtDfVxib2xkc3ltYm9se0R9XntcZnJhY3sxfXsyfX1cYm9sZHN5bWJvbHtDfSckLiDQmNGB0YLQvtCy0YDQtdC80LXQvdC+INC4INC/0YDQvtCy0LXRgNGD0LLQsNC80LUg0LTQsNC70Lgg0LUg0YLQvtGH0L3QviDQvdCw0ZjQtNC10L3QviDRgdC+INGC0L7QsCDRiNGC0L4g0LPQviDQutGA0LXQstCw0LzQtSDQvdCwINC60LLQsNC00YDQsNGCINC4INC90LDQvtGT0LDQvNC1INC4INC40L3QstC10YDQt9C90LAg0LzQsNGC0YDQuNGG0LAuLg0KDQpgYGB7cn0NCkRfc3IgPSBkaWFnKHg9YXMubnVtZXJpYyhzcXJ0KGxhbWJkYXMpKSwgbnJvdz0zLCBuY29sPTMpDQpTaWdtYV9zciA9IEMgJSolIERfc3IgJSolIHQoQykNClNpZ21hX3NyDQpTaWdtYV9zciAlKiUgU2lnbWFfc3INCnNvbHZlKFNpZ21hX3NyKQ0KYGBgDQoNCtCg0LXRiNC10L3QuNC10YLQviDQtToNCg0KJCQNClxib2xkc3ltYm9se3p9PShcYm9sZHN5bWJvbHtcU2lnbWF9XntcZnJhY3sxfXsyfX0pXnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSk9XGJlZ2lue3BtYXRyaXh9DQowLjQ2ICYgLTAuMDcgJiAwLjE3XFwNCi0wLjA3ICYgMC4zMyAmIC0wLjE3XFwNCjAuMTcgJiAtMC4xNyAmIDAuNjkNClxlbmR7cG1hdHJpeH0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkgXHNpbSBOXzMoXGJvbGRzeW1ib2x7MH0sXGJvbGRzeW1ib2x7SX0pDQokJA0KDQojIyMgKGMpDQoNCtCU0LjRgdGC0YDQuNCx0YPRhtC40ZjQsNGC0LAg0L3QsCAkKFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYm9sZHN5bWJvbHt5fS1cYm9sZHN5bWJvbHtcbXV9KSQg0LUg0YXQuC3QutCy0LDQtNGA0LDRgtC90LAg0YHQviAzINGB0YLQtdC/0LXQvdC4INC90LAg0YHQu9C+0LHQvtC00LAsINGCLtC1LiAkKFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pJ1xib2xkc3ltYm9se1xTaWdtYX1eey0xfShcYm9sZHN5bWJvbHt5fS1cYm9sZHN5bWJvbHtcbXV9KSBcc2ltIFxjaGleMl8zJC4NCg0KIyBbNC4xM10NCg0KJCQNClxib2xkc3ltYm9se3l9IFxzaW0gTl80KFxib2xkc3ltYm9se1xtdX0sIFxib2xkc3ltYm9se1xTaWdtYX0pOw0KXGJvbGRzeW1ib2x7XG11fT1cYmVnaW57cG1hdHJpeH0tMlxcM1xcLTFcXDVcZW5ke3BtYXRyaXh9Ow0KXGJvbGRzeW1ib2x7XFNpZ21hfT1cYmVnaW57cG1hdHJpeH0NCjExICYg4oiSOCAmIDMgJiA5XFwNCuKIkjggJiA5ICYg4oiSMyAmIDZcXA0KMyAmIOKIkjMgJiAyICYgM1xcDQo5ICYgNiAmIDMgJiA5DQpcZW5ke3BtYXRyaXh9DQokJA0KDQojIyMgKGEpDQoNCtCU0LAg0YHQtSDQvdCw0ZjQtNC1ICRcYm9sZHN5bWJvbHt6fT0oXGJvbGRzeW1ib2x7VH0nKV57LTF9KFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pIFxzaW0gTl80KFxib2xkc3ltYm9sezB9LFxib2xkc3ltYm9se0l9KSQNCg0K0KfQvtC70LXRgdC60Lgg0LTQtdC60L7QvNC/0L7Qt9C40YbQuNGY0LAg0YHQviDQutC+0LTQvtGCINC+0LQg0L/RgNC10YLRhdC+0LTQvdCw0YLQsCDQt9Cw0LTQsNGH0LA6DQoNCmBgYHtyfQ0KU2lnbWEgPSBtYXRyaXgoDQogIGMoMTEsIC04LCAzLCA5LCANCiAgICAtOCwgOSwgLTMsIDYsIA0KICAgIDMsIC0zLCAyLCAzLCANCiAgICA5LCA2LCAzLCA5KSwNCiAgbnJvdz00LA0KICBuY29sPTQNCikNClQgPSBjaG9sZXNreShTaWdtYSkNClQNCmBgYA0KDQrQldC00L3QsCDQvtC0INCy0YDQtdC00L3QvtGB0YLQuNGC0LUg0LUgTmFOINCx0LjQtNC10ZjRnNC4ICRcYm9sZHN5bWJvbHtcU2lnbWF9JCDQvdC1INC1INC/0L7Qt9C40YLQuNCy0L3QviDQtNC10YTQuNC90LjRgtC90LAgKNCy0LXRgNC+0ZjQsNGC0L3QviDQuNC80LAg0L3QtdC60L7RmNCwINCz0YDQtdGI0LrQsCDQstC+INC30LDQtNCw0YfQsNGC0LApLg0KDQojIyMgKGIpDQoNCtCU0LAg0YHQtSDQvdCw0ZjQtNC1ICRcYm9sZHN5bWJvbHt6fT0oXGJvbGRzeW1ib2x7XFNpZ21hfV57XGZyYWN7MX17Mn19KV57LTF9KFxib2xkc3ltYm9se3l9LVxib2xkc3ltYm9se1xtdX0pIFxzaW0gTl80KFxib2xkc3ltYm9sezB9LFxib2xkc3ltYm9se0l9KSQNCg0K0J3QtSDQvNC+0LbQtSDQtNCwINGB0LUg0L3QsNGY0LTQtSDQsdC40LTQtdGY0ZzQuCAkXGJvbGRzeW1ib2x7XFNpZ21hfSQg0L3QtSDQtSDQv9C+0LfQuNGC0LjQstC90L4g0LTQtdGE0LjQvdC40YLQvdCwICjQstC10YDQvtGY0LDRgtC90L4g0LjQvNCwINC90LXQutC+0ZjQsCDQs9GA0LXRiNC60LAg0LLQviDQt9Cw0LTQsNGH0LDRgtCwKS4NCg0KIyMjIChjKQ0KDQrQlNC40YHRgtGA0LjQsdGD0YbQuNGY0LDRgtCwINC90LAgJChcYm9sZHN5bWJvbHt5fS1cYm9sZHN5bWJvbHtcbXV9KSdcYm9sZHN5bWJvbHtcU2lnbWF9XnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkkINC1INGF0Lgt0LrQstCw0LTRgNCw0YLQvdCwINGB0L4gNCDRgdGC0LXQv9C10L3QuCDQvdCwINGB0LvQvtCx0L7QtNCwLCDRgi7QtS4gJChcYm9sZHN5bWJvbHt5fS1cYm9sZHN5bWJvbHtcbXV9KSdcYm9sZHN5bWJvbHtcU2lnbWF9XnstMX0oXGJvbGRzeW1ib2x7eX0tXGJvbGRzeW1ib2x7XG11fSkgXHNpbSBcY2hpXjJfNCQuDQo=