3.8 R을 이용한 인자분석

[ex 3.1] 주성분인자법을 이용한 인자분석


  • 다음 자료 3.1은 무료 검진 프로그램인 Positive Health Inventory (PHI)를 개발하여 프로그램의 유효성을 모니터링한 자료이다.
  • (http://cw.psypress.com/multivariate-analysis/datasets/)

  • 11개의 검진 항목이 있으며 128명의 자료가 있다. R을 이용하여 주성분인자법을 이용한 인자분석을 실행해 보자. “psych” 패키지의 principal() 함수를 통해 주성분인자법을 이용하여 인자모형을 추정한다.

    (1) 자료 읽기 및 요약 통계량


    read.csv() 함수를 이용하여 csv 파일을 읽어 들인다. summary()를 이용해 데이터의 요약 통계량을 구하면 다음과 같다.

    <R 3.1> 자료 읽기 및 요약 통계량
    med_data <- read.csv("../Data2022/medFactor.csv")
    head(med_data)


    summary(med_data)



    (2) 초기 인자분석 실행하기


    <R 3.2> 초기 인자분석 실행


    # install.packages("GPArotation")
    # install.packages("psych")
    library(GPArotation)
    library(psych)


    med_factor <- principal(med_data, rotate = "none")
    names(med_factor)
    med_factor$values
    plot(med_factor$values, type = "b", pch = 19)

  • principal() 함수를 이용해 주성분인자법을 이용한 인자분석을 실행한다. 인자분석을 실행하기 전에 principal() 함수를 이용하기 위해서는 “psych”와 “GPArotation”을 가동해야 한다. principal() 함수는 주성분인자법을 이용하는 것으로 rotate에 “none”, “varimax”, “quatimax”, “promax”, “oblimin”, “simplimax” 등 다양한 인자회전법을 이용하여 인자분석을 실행할 수 있다.
  • 인자분석을 실행하고 난 후 names() 함수를 이용하여 principal() 함수가 산출한 값들의 목록을 볼 수 있다. “values”는 고윳값을 나타내고, “rotate”은 회전방법을 보여 준다. 고윳값을 살펴 보면 세 번째 인자까지 고윳값이 1 이상인 것을 알 수 있다.
  • 또 스크리 그림에서는 네 번째 인자 다음부터 그래프의 기울기가 완만해지는 것을 볼 수 있다. 따라서 유효한 인자의 수는 3~4개로 생각할 수 있다.




  • (3) 인자회전


    본 예제에서는 직교회전의 varimax와 사각회전의 oblimin을 이용하였다.

    (i) varimax 인자회전
    <R 3.3> varimax 인자회전


    med_varimax <- principal(med_data, nfactors = 3, rotate = "varimax", scores = T, method = "regression")
    med_varimax


  • varimax를 이용한 인자분석에 대한 결과를 살펴보자. 결괏값의 “h2”가 각 변수의 공통성(communality)을 나타내고, “u2”가 고유분산(uniqueness or specific variance)을 나타낸다. 각 변수들이 유의한 3개의 인자 RC1, RC2, RC3에 의해 설명되는 부분의 비율인 공통성은 인자부하값을 이용하여 다음과 같이 구해진다.

    lung : 0.47 = 0.66^2 + 0.12^2 + 0.16^2 muscle : 0.64 = 0.11^2 + (-0.09)^2 + 0.79^2 liver : 0.66 = 0.78^2 + 0.13^2 + 0.17^2 …


  • 공통성은 많은 변수 중에서 서로 연관이 있는 일부 문항들을 선택하기 위해 인자분석을 실시하는 경우 문항선택의 기준으로 이용된다. 예를 들어 변수 100개를 이용하여 인자분석을 한 결과 공통성이 0.3 이하인 것이 40개라면, 이 40개 문항은 다른 문항들과 공통점이 별로 없는 것으로 판단할 수 있다.

  • 고유분산은 “u2 = 1 - h2”의 식에서 바로 구할 수 있다. “SS loadings”는 각 인자에 의해 설명되는 분산의 양을 나타낸다. 이는 인자부하값의 제곱의 합으로 다음과 같이 구해진다.

    RC1 : 2.39 = 0.66^2 + 0.11^2 + 0.78^2 + … + (-0.07)^2 RC2 : 2.13 = 0.12^2 + (-0.09)^2 + 0.13^2 + … + 0.65^2 RC3 : 1.59 = 0.16^2 + 0.79^2 + 0.17^2 + … + (-0.28)^2


  • “Proportion Var”는 각 인자가 설명하는 총분산의 비율을 의미한다. RC1이 총분산의 22%, RC2가 19%, RC3이 14%를 설명하여, 세 인자에 의해 설명되는 변동은 총변동이 56%이다. 여기서 수식의 값이 정확하게 일치하지 않는 이유는 반올림에 의한 것이다.

  • 회전된 요인에 대한 변수들의 요인 적재값을 보면 첫 번째 인자는 lung, liver, kidney, heart가 높은 값을 가지며 step은 상대적으로 높은 적재값을 가진다. 두 번째 인자는 stamina, stretch, blow, urine의 값이 높다. 마지막으로 세 번재 인자는 muscle과 skeleton에서 높은 값을 가진다. 따라서 첫 번째 인자는 생물의학(biomedical), 두 번재 인자는 인체기능(performance), 세 번째 인자는 근육골계통력(muscular-skeletal strength)으로 특정지을 수 있다.

  • 인자분석은 주성분분석과 달리 인자들의 결합으로 원 변수들을 표현한다. 따라서
    lung = 0.66 * factor1 + 0.12 * factor2 + 0.16 * factor3 + e1 muscle = 0.11 * factor1 - 0.09 * factor2 + 0.79 * factor3 + e2
  • 와 같이 각 변수를 인자와 오차항을 이용하여 인자모형을 나타낼 수 있다.

  • 인자점수 추정방법은 회귀분석, Bartlett, Anderson-Rubin 등이 있다. 다음은 회귀분석을 이용한 인자점수 결과의 일부이다. principal() 함수를 이용하여 인자점수를 계산하려면 scores = TRUE로 설정해야 한다. 이때 추정방법은 method에서 “regression” 혹은 “Bartlett”으로 설정할 수 있다.




  • <R 3.4> 인자점수
    head(med_varimax$scores)



    (ii) oblimin 회전 결과
    <R 3.5> 인자회전
    med_oblimin <- principal(med_data, nfactors = 3, rotate = "oblimin", scores = T, method = "regression")
    med_oblimin

  • oblimin을 이용한 인자분석에 대한 결과이다. varimax와 마찬가지로 세 인자에 대해 묶여지는 변수는 같으며 다만 인자 적재값이 차이가 나는 것을 볼 수 있다. oblimin 방법을 이용한 결과에 대한 각 변수의 인자모형은 다음과 같다.

    lung = 0.66 * factor1 + 0.01 * factor2 + 0.10 * factor3 + e1 muscle = 0.02 * factor1 - 0.16 * factor2 + 0.79 * factor3 + e2


  • 회귀분석을 이용한 각 개체에 대한 인자점수의 결과는 다음과 같다.

  • <R 3.6> 인자점수
    head(med_oblimin$scores)

    ###### (iii) 행렬도
    ###### <R 3.7> 행렬도
  • 행렬도(biplot)를 작성하기 위한 명령이다. 위의 그림은 varimax를 이용하여 나타낸 행렬도이다. 행렬도를 보면 첫 번째 주성분을 X축, 두 번째 주성분을 Y축으로 하여 각 변수와 각 개체의 산점도가 표시되었다. 여기서 각 변수의 화살표는 벡터를 의미한다.

    biplot(med_varimax)



  • [ex 3.2] 최우추정법을 이용한 인자분석


  • R을 이용하여 최우추정법을 이용한 인자분석을 실행해 보자. 본 예제에서는 R의 “datasets”에 있는 “state.x77”을 이용하여 분석해 보도록 한다. (자료 3.2)
  • “stats” 패키지의 factanal() 함수를 통해 최우추정법을 이용하여 인자모형을 추정한다.

    (1) 자료 및 요약통계량


  • “state.x77”은 R의 “datasets”에 기본적으로 포함된 자료로써 1970년대 미국 50개 주의 인구, 수입, 문맹, 생활수준 기대, 살인, 고등교육수준, 날씨, 지역면적에 대한 정보이다. 자료의 변수를 보면 “Population, Income, Illiteracy, Life Exp, Murder, HS Grad, Frost, Area”로 구성되어 있다.

    <R 3.8> 요약통계량
    state <- state.x77
    head(state)
    summary(state)


    ##### (2) 인자분석 실행하기

  • <R 3.9>와 같은 명령어를 통해 각 인자에 대한 고윳값을 구할 수 있다. factanal() 함수를 이용하여 나온 인자부하값을 이용하여 고윳값을 구한다. 이때, factanal() 함수를 이용하여 나온 인자부하값을 이용하여 고윳값을 구한다. 이때, factanal()에서 인자 수를 4개로 설정하여 4개의 인자에 대한 고윳값만 산출되었다. 세 번째 인자까지만 고윳값이 1 이상이므로 3개의 인자가 유효하다고 판단할 수 있다.

  • <R 3.9> 고윳값 구하기
    library(stats)
    state_fact0 <- factanal(state, factors = 4)
    sosq <- function(v) { sum(v^2) }
    loadings <- as.matrix(state_fact0$loadings)
    eigen_value <- apply(loadings, 2, sosq)
    eigen_value

  • factanal() 함수를 이용한 인자분석은 기본적으로 varimax 회전이 설정되어 있다. 회전을 하지 않을 경우 rotation = “none”으로 설정하고, promax 회전을 이용할 경우 rotation = “promax”를 설정하여 각 방법에 대한 인자적재값을 비교할 수 있다.


    ###### <R 3.10> 인자분석 실행

    library(stats)
    state_fact <- factanal(state, factors = 3, rotation = "none")
    # state_fact1 <- factanal(state, factors = 3, rotation = "varimax")
    # state_face2 <- factanal(state, factors = 3, rotation = "promax")
    names(state_fact)



  • (3) 인자분석 결과
  • (i) varimax 회전 결과 (Population 제외 전)


    ###### <R 3.11> varimax 회전 결과 (Population 제외 전)

    state_fact1 <- factanal(state, factors = 3, rotation = "varimax")
    state_fact1

  • varimax 인자회전 후 결과이다. “Uniquenesses”는 고유분산(uniqueness or specific variance)을 나타낸다. “1 - 고유분산”이 공통성(communality or common variance)이 되므로 각 변수의 공통성을 계산할 수 있다. “Population”의 공통성이 0.187의 매우 작은 값을 가져 제외하는 것이 타당하다.


  • (ii) varimax 회전 결과 (Population 제외)


    ###### <R 3.12> varimax 회전 결과 (Population 제외)

    state_fact1_1 <- factanal(state[ , -1], factors = 3, rotation = "varimax", scores = "Bartlett")
    state_fact1_1

  • “Population”을 제외한 후 인자분석을 실행한 결과이다. 인자를 3개로 설정하였을 때 p-value가 0.0631로 귀무가설(“유효한 인자가 3개이다.”)을 받아들인다. 첫 번재 인자가 33.1%, 두 번재가 20.7%, 세 번째 인자가 20.5%인 설명력을 가지는 것을 알 수 있다.
  • 첫 번째 인자는 문맹(illiteracy), 살인(murder), 생활수준 기대(life exp), 고등교육수준(HS Grad)이 비중이 큰 인자로 문맹과 살인은 생활수준 기대와 고등교육수준과 반대의 부호를 가진다. 따라서 고등교육수준과 생활수준에 대한 기대가 낮을 수록 문맹률과 살인율이 높아진다고 볼 수 있다. 두 번째 인자는 수입(income)과 고등교육수준, 지역(Area)이 높은 값을 가지며 세 번째 인자는 기후 (Frost)와 문맹이 인자 적재값이 높게 나타났다.
  • 첫 번재는 ‘삶의 질 인자’, 두 번째는 ‘사회적 지위 인자’, 세 번째는 ’기후 인자’로 볼 수 있다. 각 변수를 인자모형으로 나타내면 다음과 같다.

    Income = 0.264 * factor1 + 0.621 * factor2 + 0.105 * factor3 + e1 Illiteracy = -0.599 * factor1 - 0.301 * factor2 - 0.537 * factor3 + e2



    ###### (iii) 인자점수(factor score)
  • factanal() 함수에서 인자점수를 계산하려면, scores에서 “regression”, “Bartlett”을 선택하여 구할 수 있다. 단, 기본값은 “none”으로 따로 설정하지 않으면 인자점수를 계산하지 않는다. 다음은 Bartlett’s weighted least-squares를 이용한 인자점수 일부에 대한 결과이다.
    ###### <R 3.13> 인자점수

    head(state_fact1_1$scores)


    ###### (iv) 인자패턴
    ###### <R 3.14> 인자패턴

    # plot(factor1, factor2)
    namev <- colnames(state)
    fa <- state_fact1_1
    plot(fa$loadings[, 1], fa$loadings[, 2], xlab = "factor1", ylab = "factor2", pch = 19)
    text(x=fa$loadings[, 1], y=fa$loadings[, 2], labels = namev, adj = -0.1, cex = 0.8)
    abline(h=0, v=0, lty=2)
    plot(fa$loadings[, 1], fa$loadings[, 3], xlab = "factor1", ylab = "factor3", pch = 19)
    text(x=fa$loadings[, 1], y=fa$loadings[, 3], labels = namev, adj = -0.1, cex = 0.8)
    abline(h=0, v=0, lty=2)

  • 인자패턴 그래프로서 각 변수에 대한 인자 적재값을 알려주므로 인자의 의미에 대한 정보를 시각적으로 표현할 수 있다. 위의 첫 번째 그림은 첫 번째 인자와 두 번째 인자에 대한 패턴이고, 두 번째 그림은 첫 번째 인자와 세 번째 인자에 대한 인자패텅의 결과이다.




  • [ex 3.3] minres (minimum residual)을 이용한 인자분석


  • <자료 3.3>은 여학생 73명에 대해 6개 항목의 심리 테스트를 실시한 결과이다. (Holzinger & Swineford, 1939)
  • grntFem.csv

  • 변수에 대한 설명은 다음과 같다. R을 이용하여 minres (minimum residual)를 이용한 인자분석을 실행해 보자. “psych” 패키지의 fa() 함수를 통해 인자모형을 추정한다.
  • visperc : visual perception scores (시지각)
  • cubes : test of spatial visualization (공간시각화력)
  • lozenges : test of spatial orientation (공간적 방향 인지력)
  • paragraph : paragraph comprehension score (문단 이해력)
  • sentence : sentence completion score (문장 완성력)
  • wordmean : word meaning score (단어 이해력)



    ##### (1) 자료 불러오기 및 요약

  • 다음과 같이 “grntFem.csv” 자료를 불러온다. summary() 함수를 이용해 데이터의 기초통계량으로 요약해 본다.

    <R 3.15> 자료 불러오기 및 요약
    fem <- read.csv("../Data2022/grntFem.csv")
    head(fem)
    summary(fem)



    (2) 인자분석 실행하기

  • fa() 함수를 이용하여 인자분석을 실행한다. “fm”은 인자추출방법으로 minres (minimum residual), wls (weighted least squares), pa (principal factor solution), ml (maximum likelihood factor analysis) 등이 있다. 함수에 대한 자세한 사항은 “?fa”를 이용하여 참고하길 바란다. 본 예제에서는 minres를 이용하고, 회전을 하지 않는 방법으로 인자분석을 실행하였다.


    <R 3.16> 인자분석
    library(psych)
    uls <- fa(fem, 2, rotate = "none", fm = "minres")
    names(uls)



  • (3) 인자분석 결과


    (i) 고윳값 및 스크리 그림


    <R 3.17> 고윳값 및 스크리 그림
    uls$values
    plot(uls$values, type = "b", pch = 19)

  • 고윳값과 스크리 그림에 대한 결과이다. 고윳값은 첫 번째 인자만 1 이상인 값이 나왔다. 스크리 그림을 보면 세 번째 인자 이후부터 기울기가 급격하게 완만해지는 것을 볼 수 있다. 두 번째 인자의 고윳값이 0.923으로 1보다 작지만 유효한 인자로 보도록 한다.


  • (ii) 인자부하값 및 공통성


    <R 3.18> 인자분석 결과
    uls

  • fa() 함수를 이용하여 인자분석을 실행한 결과이다. 먼저 공통성을 보면 변수 전체 0.4보다 큰 값을 가지므로 추출된 요인들이 변수들의 속성을 잘 반영한다고 볼 수 있다. 첫 번째 인자는 46%, 두 번째 인자는 15%의 설명력을 지닌다.
  • 첫 번째 인자의 변수들의 부하값을 보면 paragraph, sentence, wordmean이 큰 값을 가지고 두 번째 인자는 visperc, cubes, lozenges가 큰 값을 가진다. 첫 번째 인자는 언어력(verbal), 두 번째 인자는 공간지각 능력(spatial)으로 인자를 특정할 수 있다. 각 변수에 대한 인자모형은 다음과 같다.


    visperc = 0.55 * factor1 + 0.42 * factor2 + e1 cubes = 0.45 * factor1 + 0.56 * factor2 + e2 …



  • (iii) 인자점수(factor score)

  • fa() 함수도 scores에서 “regression”, “Thursonte”, “tenBerge”를 선택하여 인자점수를 계산할 수 있다. 옵션에 대한 자세한 사항은 “?fa()”를 통해 찾아 보도록 하자. 다음의 결과는 회귀분석을 이용한 인자점수의 결과이다(일부).


  • <R 3.19> 인자점수(일부)
    head(uls$scores)



    (iv) 행렬도(biplot)

  • 다음은 인자분석 후 행렬도의 결과이다. 각 인자와 관련된 변수들이 비슷한 위치 및 방향을 가지고 분포하는 것을 알 수 있다.

    biplot(uls, cex = 0.7)
  • LS0tCnRpdGxlOiAiW+uLpOuzgOufieu2hOyEnV0gY2hhcHRlciAzLiDsnbjsnpDrtoTshJ0iCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KPGJyPgo8aHI+Cjxicj4KCiMjIyAzLjggUuydhCDsnbTsmqntlZwg7J247J6Q67aE7ISdCgojIyMjIFtleCAzLjFdIOyjvOyEseu2hOyduOyekOuyleydhCDsnbTsmqntlZwg7J247J6Q67aE7ISdCgo8YnI+Cgo8bGk+IOuLpOydjCDsnpDro4wgMy4x7J2AIOustOujjCDqsoDsp4Qg7ZSE66Gc6re4656o7J24IFBvc2l0aXZlIEhlYWx0aCBJbnZlbnRvcnkgKFBISSnrpbwg6rCc67Cc7ZWY7JesIO2UhOuhnOq3uOueqOydmCDsnKDtmqjshLHsnYQg66qo64uI7YSw66eB7ZWcIOyekOujjOydtOuLpC4gCjxsaT4gKGh0dHA6Ly9jdy5wc3lwcmVzcy5jb20vbXVsdGl2YXJpYXRlLWFuYWx5c2lzL2RhdGFzZXRzLykKPGJyPgoKPGxpPiAxMeqwnOydmCDqsoDsp4Qg7ZWt66qp7J20IOyeiOycvOupsCAxMjjrqoXsnZgg7J6Q66OM6rCAIOyeiOuLpC4gUuydhCDsnbTsmqntlZjsl6wg7KO87ISx67aE7J247J6Q67KV7J2EIOydtOyaqe2VnCDsnbjsnpDrtoTshJ3snYQg7Iuk7ZaJ7ZW0IOuztOyekC4gInBzeWNoIiDtjKjtgqTsp4DsnZggcHJpbmNpcGFsKCkg7ZWo7IiY66W8IO2Gte2VtCDso7zshLHrtoTsnbjsnpDrspXsnYQg7J207Jqp7ZWY7JesIOyduOyekOuqqO2YleydhCDstpTsoJXtlZzri6QuIAo8YnI+Cjxicj4KCiMjIyMjICgxKSDsnpDro4wg7J296riwIOuwjyDsmpTslb0g7Ya16rOE65+JCgo8YnI+CgpyZWFkLmNzdigpIO2VqOyImOulvCDsnbTsmqntlZjsl6wgY3N2IO2MjOydvOydhCDsnb3slrQg65Ok7J2464ukLiBzdW1tYXJ5KCnrpbwg7J207Jqp7ZW0IOuNsOydtO2EsOydmCDsmpTslb0g7Ya16rOE65+J7J2EIOq1rO2VmOuptCDri6TsnYzqs7wg6rCZ64ukLgo8YnI+CgojIyMjIyMgPFIgMy4xPiDsnpDro4wg7J296riwIOuwjyDsmpTslb0g7Ya16rOE65+JCmBgYHtyfQptZWRfZGF0YSA8LSByZWFkLmNzdigiLi4vRGF0YTIwMjIvbWVkRmFjdG9yLmNzdiIpCmhlYWQobWVkX2RhdGEpCmBgYAo8YnI+CgpgYGB7cn0Kc3VtbWFyeShtZWRfZGF0YSkKYGBgCjxicj4KPGhyPgo8YnI+CgojIyMjIyAoMikg7LSI6riwIOyduOyekOu2hOyEnSDsi6TtlontlZjquLAKPGJyPgoKIyMjIyMjIDxSIDMuMj4g7LSI6riwIOyduOyekOu2hOyEnSDsi6TtlokKCjxicj4KYGBge3J9CiMgaW5zdGFsbC5wYWNrYWdlcygiR1BBcm90YXRpb24iKQojIGluc3RhbGwucGFja2FnZXMoInBzeWNoIikKbGlicmFyeShHUEFyb3RhdGlvbikKbGlicmFyeShwc3ljaCkKYGBgCgo8YnI+CgpgYGB7cn0KbWVkX2ZhY3RvciA8LSBwcmluY2lwYWwobWVkX2RhdGEsIHJvdGF0ZSA9ICJub25lIikKYGBgCgpgYGB7cn0KbmFtZXMobWVkX2ZhY3RvcikKYGBgCgpgYGB7cn0KbWVkX2ZhY3RvciR2YWx1ZXMKYGBgCgpgYGB7cn0KcGxvdChtZWRfZmFjdG9yJHZhbHVlcywgdHlwZSA9ICJiIiwgcGNoID0gMTkpCmBgYAo8YnI+CjxsaT4gcHJpbmNpcGFsKCkg7ZWo7IiY66W8IOydtOyaqe2VtCDso7zshLHrtoTsnbjsnpDrspXsnYQg7J207Jqp7ZWcIOyduOyekOu2hOyEneydhCDsi6TtlontlZzri6QuIOyduOyekOu2hOyEneydhCDsi6TtlontlZjquLAg7KCE7JeQIHByaW5jaXBhbCgpIO2VqOyImOulvCDsnbTsmqntlZjquLAg7JyE7ZW07ISc64qUICJwc3ljaCLsmYAgIkdQQXJvdGF0aW9uIuydhCDqsIDrj5ntlbTslbwg7ZWc64ukLiBwcmluY2lwYWwoKSDtlajsiJjripQg7KO87ISx67aE7J247J6Q67KV7J2EIOydtOyaqe2VmOuKlCDqsoPsnLzroZwgcm90YXRl7JeQICJub25lIiwgInZhcmltYXgiLCAicXVhdGltYXgiLCAicHJvbWF4IiwgIm9ibGltaW4iLCAic2ltcGxpbWF4IiDrk7Eg64uk7JaR7ZWcIOyduOyekO2ajOyghOuyleydhCDsnbTsmqntlZjsl6wg7J247J6Q67aE7ISd7J2EIOyLpO2Wie2VoCDsiJgg7J6I64ukLgo8bGk+IOyduOyekOu2hOyEneydhCDsi6TtlontlZjqs6Ag64KcIO2bhCBuYW1lcygpIO2VqOyImOulvCDsnbTsmqntlZjsl6wgcHJpbmNpcGFsKCkg7ZWo7IiY6rCAIOyCsOy2nO2VnCDqsJLrk6TsnZgg66qp66Gd7J2EIOuzvCDsiJgg7J6I64ukLiAidmFsdWVzIuuKlCDqs6DsnLPqsJLsnYQg64KY7YOA64K06rOgLCAicm90YXRlIuydgCDtmozsoITrsKnrspXsnYQg67O07JesIOykgOuLpC4g6rOg7Jyz6rCS7J2EIOyCtO2OtCDrs7TrqbQg7IS4IOuyiOynuCDsnbjsnpDquYzsp4Ag6rOg7Jyz6rCS7J20IDEg7J207IOB7J24IOqyg+ydhCDslYwg7IiYIOyeiOuLpC4gCjxsaT4g65iQIOyKpO2BrOumrCDqt7jrprzsl5DshJzripQg64SkIOuyiOynuCDsnbjsnpAg64uk7J2M67aA7YSwIOq3uOuemO2UhOydmCDquLDsmrjquLDqsIAg7JmE66eM7ZW07KeA64qUIOqyg+ydhCDrs7wg7IiYIOyeiOuLpC4g65Sw65287IScIOycoO2aqO2VnCDsnbjsnpDsnZgg7IiY64qUIDN+NOqwnOuhnCDsg53qsIHtlaAg7IiYIOyeiOuLpC4KCjxicj4KPGhyPgo8YnI+CgojIyMjIyAoMykg7J247J6Q7ZqM7KCECjxicj4KCuuzuCDsmIjsoJzsl5DshJzripQg7KeB6rWQ7ZqM7KCE7J2YIHZhcmltYXjsmYAg7IKs6rCB7ZqM7KCE7J2YIG9ibGltaW7snYQg7J207Jqp7ZWY7JiA64ukLiAKCiMjIyMjIyAoaSkgdmFyaW1heCDsnbjsnpDtmozsoIQKCiMjIyMjIyA8UiAzLjM+IHZhcmltYXgg7J247J6Q7ZqM7KCECgo8YnI+CgpgYGB7cn0KbWVkX3ZhcmltYXggPC0gcHJpbmNpcGFsKG1lZF9kYXRhLCBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJ2YXJpbWF4Iiwgc2NvcmVzID0gVCwgbWV0aG9kID0gInJlZ3Jlc3Npb24iKQptZWRfdmFyaW1heApgYGAKPGJyPgoKPGxpPiB2YXJpbWF466W8IOydtOyaqe2VnCDsnbjsnpDrtoTshJ3sl5Ag64yA7ZWcIOqysOqzvOulvCDsgrTtjrTrs7TsnpAuIOqysOq0j+qwkuydmCAiaDIi6rCAIOqwgSDrs4DsiJjsnZgg6rO17Ya17ISxKGNvbW11bmFsaXR5KeydhCDrgpjtg4DrgrTqs6AsICJ1MiLqsIAg6rOg7Jyg67aE7IKwKHVuaXF1ZW5lc3Mgb3Igc3BlY2lmaWMgdmFyaWFuY2Up7J2EIOuCmO2DgOuCuOuLpC4g6rCBIOuzgOyImOuTpOydtCDsnKDsnZjtlZwgM+qwnOydmCDsnbjsnpAgUkMxLCBSQzIsIFJDM+yXkCDsnZjtlbQg7ISk66qF65CY64qUIOu2gOu2hOydmCDruYTsnKjsnbgg6rO17Ya17ISx7J2AIOyduOyekOu2gO2VmOqwkuydhCDsnbTsmqntlZjsl6wg64uk7J2M6rO8IOqwmeydtCDqtaztlbTsp4Tri6QuCjxicj4KCmx1bmcgOiAwLjQ3ID0gMC42Nl4yICsgMC4xMl4yICsgMC4xNl4yCm11c2NsZSA6IDAuNjQgPSAwLjExXjIgKyAoLTAuMDkpXjIgKyAwLjc5XjIKbGl2ZXIgOiAwLjY2ID0gMC43OF4yICsgMC4xM14yICsgMC4xN14yCiAgICAgICAgICAgLi4uCiAgICAgICAgICAgCjxicj4KCjxsaT4g6rO17Ya17ISx7J2AIOunjuydgCDrs4DsiJgg7KSR7JeQ7IScIOyEnOuhnCDsl7DqtIDsnbQg7J6I64qUIOydvOu2gCDrrLjtla3rk6TsnYQg7ISg7YOd7ZWY6riwIOychO2VtCDsnbjsnpDrtoTshJ3snYQg7Iuk7Iuc7ZWY64qUIOqyveyasCDrrLjtla3shKDtg53snZgg6riw7KSA7Jy866GcIOydtOyaqeuQnOuLpC4g7JiI66W8IOuTpOyWtCDrs4DsiJggMTAw6rCc66W8IOydtOyaqe2VmOyXrCDsnbjsnpDrtoTshJ3snYQg7ZWcIOqysOqzvCDqs7XthrXshLHsnbQgMC4zIOydtO2VmOyduCDqsoPsnbQgNDDqsJzrnbzrqbQsIOydtCA0MOqwnCDrrLjtla3snYAg64uk66W4IOusuO2VreuTpOqzvCDqs7XthrXsoJDsnbQg67OE66GcIOyXhuuKlCDqsoPsnLzroZwg7YyQ64uo7ZWgIOyImCDsnojri6QuCgo8bGk+IOqzoOycoOu2hOyCsOydgCAidTIgPSAxIC0gaDIi7J2YIOyLneyXkOyEnCDrsJTroZwg6rWs7ZWgIOyImCDsnojri6QuICJTUyBsb2FkaW5ncyLripQg6rCBIOyduOyekOyXkCDsnZjtlbQg7ISk66qF65CY64qUIOu2hOyCsOydmCDslpHsnYQg64KY7YOA64K464ukLiDsnbTripQg7J247J6Q67aA7ZWY6rCS7J2YIOygnOqzseydmCDtlansnLzroZwg64uk7J2M6rO8IOqwmeydtCDqtaztlbTsp4Tri6QuCjxicj4KClJDMSA6IDIuMzkgPSAwLjY2XjIgKyAwLjExXjIgKyAwLjc4XjIgKyAuLi4gKyAoLTAuMDcpXjIKUkMyIDogMi4xMyA9IDAuMTJeMiArICgtMC4wOSleMiArIDAuMTNeMiArIC4uLiArIDAuNjVeMgpSQzMgOiAxLjU5ID0gMC4xNl4yICsgMC43OV4yICsgMC4xN14yICsgLi4uICsgKC0wLjI4KV4yCgo8YnI+Cgo8bGk+ICJQcm9wb3J0aW9uIFZhciLripQg6rCBIOyduOyekOqwgCDshKTrqoXtlZjripQg7LSd67aE7IKw7J2YIOu5hOycqOydhCDsnZjrr7jtlZzri6QuIFJDMeydtCDstJ3rtoTsgrDsnZggMjIlLCBSQzLqsIAgMTklLCBSQzPsnbQgMTQl66W8IOyEpOuqhe2VmOyXrCwg7IS4IOyduOyekOyXkCDsnZjtlbQg7ISk66qF65CY64qUIOuzgOuPmeydgCDstJ3rs4Drj5nsnbQgNTYl7J2064ukLiDsl6zquLDshJwg7IiY7Iud7J2YIOqwkuydtCDsoJXtmZXtlZjqsowg7J287LmY7ZWY7KeAIOyViuuKlCDsnbTsnKDripQg67CY7Jis66a87JeQIOydmO2VnCDqsoPsnbTri6QuCgo8bGk+IO2ajOyghOuQnCDsmpTsnbjsl5Ag64yA7ZWcIOuzgOyImOuTpOydmCDsmpTsnbgg7KCB7J6s6rCS7J2EIOuztOuptCDssqsg67KI7Ke4IOyduOyekOuKlCBsdW5nLCBsaXZlciwga2lkbmV5LCBoZWFydOqwgCDrhpLsnYAg6rCS7J2EIOqwgOyngOupsCBzdGVw7J2AIOyDgeuMgOyggeycvOuhnCDrhpLsnYAg7KCB7J6s6rCS7J2EIOqwgOynhOuLpC4g65GQIOuyiOynuCDsnbjsnpDripQgc3RhbWluYSwgc3RyZXRjaCwgYmxvdywgdXJpbmXsnZgg6rCS7J20IOuGkuuLpC4g66eI7KeA66eJ7Jy866GcIOyEuCDrsojsnqwg7J247J6Q64qUIG11c2NsZeqzvCBza2VsZXRvbuyXkOyEnCDrhpLsnYAg6rCS7J2EIOqwgOynhOuLpC4g65Sw65287IScIOyyqyDrsojsp7gg7J247J6Q64qUIOyDneusvOydmO2VmShiaW9tZWRpY2FsKSwg65GQIOuyiOyerCDsnbjsnpDripQg7J247LK06riw64qlKHBlcmZvcm1hbmNlKSwg7IS4IOuyiOynuCDsnbjsnpDripQg6re87Jyh6rOo6rOE7Ya166ClKG11c2N1bGFyLXNrZWxldGFsIHN0cmVuZ3RoKeycvOuhnCDtirnsoJXsp4DsnYQg7IiYIOyeiOuLpC4KCjxsaT4g7J247J6Q67aE7ISd7J2AIOyjvOyEseu2hOu2hOyEneqzvCDri6zrpqwg7J247J6Q65Ok7J2YIOqysO2VqeycvOuhnCDsm5Ag67OA7IiY65Ok7J2EIO2RnO2YhO2VnOuLpC4g65Sw65287IScCjxicj4KbHVuZyA9IDAuNjYgKiBmYWN0b3IxICsgMC4xMiAqIGZhY3RvcjIgKyAwLjE2ICogZmFjdG9yMyArIGUxCm11c2NsZSA9IDAuMTEgKiBmYWN0b3IxIC0gMC4wOSAqIGZhY3RvcjIgKyAwLjc5ICogZmFjdG9yMyArIGUyCjxicj4KPGxpPiDsmYAg6rCZ7J20IOqwgSDrs4DsiJjrpbwg7J247J6Q7JmAIOyYpOywqO2VreydhCDsnbTsmqntlZjsl6wg7J247J6Q66qo7ZiV7J2EIOuCmO2DgOuCvCDsiJgg7J6I64ukLiAKCjxsaT4g7J247J6Q7KCQ7IiYIOy2lOygleuwqeuyleydgCDtmozqt4DrtoTshJ0sIEJhcnRsZXR0LCBBbmRlcnNvbi1SdWJpbiDrk7HsnbQg7J6I64ukLiDri6TsnYzsnYAg7ZqM6reA67aE7ISd7J2EIOydtOyaqe2VnCDsnbjsnpDsoJDsiJgg6rKw6rO87J2YIOydvOu2gOydtOuLpC4gcHJpbmNpcGFsKCkg7ZWo7IiY66W8IOydtOyaqe2VmOyXrCDsnbjsnpDsoJDsiJjrpbwg6rOE7IKw7ZWY66Ck66m0IHNjb3JlcyA9IFRSVUXroZwg7ISk7KCV7ZW07JW8IO2VnOuLpC4g7J2065WMIOy2lOygleuwqeuyleydgCBtZXRob2Tsl5DshJwgInJlZ3Jlc3Npb24iIO2YueydgCAiQmFydGxldHQi7Jy866GcIOyEpOygle2VoCDsiJgg7J6I64ukLiAKCjxicj4KPGhyPgo8YnI+CgojIyMjIyMgPFIgMy40PiDsnbjsnpDsoJDsiJgKYGBge3J9CmhlYWQobWVkX3ZhcmltYXgkc2NvcmVzKQpgYGAKPGJyPgo8aHI+Cjxicj4KCiMjIyMjIyAoaWkpIG9ibGltaW4g7ZqM7KCEIOqysOqzvCAKCiMjIyMjIyA8UiAzLjU+IOyduOyekO2ajOyghApgYGB7cn0KbWVkX29ibGltaW4gPC0gcHJpbmNpcGFsKG1lZF9kYXRhLCBuZmFjdG9ycyA9IDMsIHJvdGF0ZSA9ICJvYmxpbWluIiwgc2NvcmVzID0gVCwgbWV0aG9kID0gInJlZ3Jlc3Npb24iKQptZWRfb2JsaW1pbgpgYGAKPGJyPgo8bGk+IG9ibGltaW7snYQg7J207Jqp7ZWcIOyduOyekOu2hOyEneyXkCDrjIDtlZwg6rKw6rO87J2064ukLiB2YXJpbWF47JmAIOuniOywrOqwgOyngOuhnCDshLgg7J247J6Q7JeQIOuMgO2VtCDrrLbsl6zsp4DripQg67OA7IiY64qUIOqwmeycvOupsCDri6Trp4wg7J247J6QIOyggeyerOqwkuydtCDssKjsnbTqsIAg64KY64qUIOqyg+ydhCDrs7wg7IiYIOyeiOuLpC4gb2JsaW1pbiDrsKnrspXsnYQg7J207Jqp7ZWcIOqysOqzvOyXkCDrjIDtlZwg6rCBIOuzgOyImOydmCDsnbjsnpDrqqjtmJXsnYAg64uk7J2M6rO8IOqwmeuLpC4KPGJyPgoKbHVuZyA9IDAuNjYgKiBmYWN0b3IxICsgMC4wMSAqIGZhY3RvcjIgKyAwLjEwICogZmFjdG9yMyArIGUxCm11c2NsZSA9IDAuMDIgKiBmYWN0b3IxIC0gMC4xNiAqIGZhY3RvcjIgKyAwLjc5ICogZmFjdG9yMyArIGUyCgo8YnI+CjxsaT4g7ZqM6reA67aE7ISd7J2EIOydtOyaqe2VnCDqsIEg6rCc7LK07JeQIOuMgO2VnCDsnbjsnpDsoJDsiJjsnZgg6rKw6rO864qUIOuLpOydjOqzvCDqsJnri6QuCjxicj4KCiMjIyMjIyA8UiAzLjY+IOyduOyekOygkOyImApgYGB7cn0KaGVhZChtZWRfb2JsaW1pbiRzY29yZXMpCmBgYAoKPGJyPgojIyMjIyMgKGlpaSkg7ZaJ66Cs64+ECjxicj4KIyMjIyMjIDxSIDMuNz4g7ZaJ66Cs64+ECjxicj4KPGxpPiDtlonroKzrj4QoYmlwbG90KeulvCDsnpHshLHtlZjquLAg7JyE7ZWcIOuqheugueydtOuLpC4g7JyE7J2YIOq3uOumvOydgCB2YXJpbWF466W8IOydtOyaqe2VmOyXrCDrgpjtg4Drgrgg7ZaJ66Cs64+E7J2064ukLiDtlonroKzrj4Trpbwg67O066m0IOyyqyDrsojsp7gg7KO87ISx67aE7J2EIFjstpUsIOuRkCDrsojsp7gg7KO87ISx67aE7J2EIFnstpXsnLzroZwg7ZWY7JesIOqwgSDrs4DsiJjsmYAg6rCBIOqwnOyytOydmCDsgrDsoJDrj4TqsIAg7ZGc7Iuc65CY7JeI64ukLiDsl6zquLDshJwg6rCBIOuzgOyImOydmCDtmZTsgrTtkZzripQg67Kh7YSw66W8IOydmOuvuO2VnOuLpC4KCmBgYHtyfQpiaXBsb3QobWVkX3ZhcmltYXgpCmBgYAo8YnI+Cjxocj4KPGJyPgoKIyMjIyBbZXggMy4yXSDstZzsmrDstpTsoJXrspXsnYQg7J207Jqp7ZWcIOyduOyekOu2hOyEnQoKPGJyPgoKPGxpPiBS7J2EIOydtOyaqe2VmOyXrCDstZzsmrDstpTsoJXrspXsnYQg7J207Jqp7ZWcIOyduOyekOu2hOyEneydhCDsi6TtlontlbQg67O07J6QLiDrs7gg7JiI7KCc7JeQ7ISc64qUIFLsnZggImRhdGFzZXRzIuyXkCDsnojripQgInN0YXRlLng3NyLsnYQg7J207Jqp7ZWY7JesIOu2hOyEne2VtCDrs7Trj4TroZ0g7ZWc64ukLiAo7J6Q66OMIDMuMikgCjxsaT4gInN0YXRzIiDtjKjtgqTsp4DsnZggZmFjdGFuYWwoKSDtlajsiJjrpbwg7Ya17ZW0IOy1nOyasOy2lOygleuyleydhCDsnbTsmqntlZjsl6wg7J247J6Q66qo7ZiV7J2EIOy2lOygle2VnOuLpC4KPGJyPgoKIyMjIyMgKDEpIOyekOujjCDrsI8g7JqU7JW97Ya16rOE65+JCgo8YnI+Cgo8bGk+ICJzdGF0ZS54Nzci7J2AIFLsnZggImRhdGFzZXRzIuyXkCDquLDrs7jsoIHsnLzroZwg7Y+s7ZWo65CcIOyekOujjOuhnOyNqCAxOTcw64WE64yAIOuvuOq1rSA1MOqwnCDso7zsnZgg7J246rWsLCDsiJjsnoUsIOusuOunuSwg7IOd7Zmc7IiY7KSAIOq4sOuMgCwg7IK07J24LCDqs6Drk7HqtZDsnKHsiJjspIAsIOuCoOyUqCwg7KeA7Jet66m07KCB7JeQIOuMgO2VnCDsoJXrs7TsnbTri6QuIOyekOujjOydmCDrs4DsiJjrpbwg67O066m0ICJQb3B1bGF0aW9uLCBJbmNvbWUsIElsbGl0ZXJhY3ksIExpZmUgRXhwLCBNdXJkZXIsIEhTIEdyYWQsIEZyb3N0LCBBcmVhIuuhnCDqtazshLHrkJjslrQg7J6I64ukLgo8YnI+Cjxicj4KCiMjIyMjIyA8UiAzLjg+IOyalOyVve2GteqzhOufiQoKYGBge3J9CnN0YXRlIDwtIHN0YXRlLng3NwpoZWFkKHN0YXRlKQpgYGAKCmBgYHtyfQpzdW1tYXJ5KHN0YXRlKQpgYGAKCjxicj4KIyMjIyMgKDIpIOyduOyekOu2hOyEnSDsi6TtlontlZjquLAKPGJyPgoKPGxpPiA8UiAzLjk+7JmAIOqwmeydgCDrqoXroLnslrTrpbwg7Ya17ZW0IOqwgSDsnbjsnpDsl5Ag64yA7ZWcIOqzoOycs+qwkuydhCDqtaztlaAg7IiYIOyeiOuLpC4gZmFjdGFuYWwoKSDtlajsiJjrpbwg7J207Jqp7ZWY7JesIOuCmOyYqCDsnbjsnpDrtoDtlZjqsJLsnYQg7J207Jqp7ZWY7JesIOqzoOycs+qwkuydhCDqtaztlZzri6QuIOydtOuVjCwgZmFjdGFuYWwoKSDtlajsiJjrpbwg7J207Jqp7ZWY7JesIOuCmOyYqCDsnbjsnpDrtoDtlZjqsJLsnYQg7J207Jqp7ZWY7JesIOqzoOycs+qwkuydhCDqtaztlZzri6QuIOydtOuVjCwgZmFjdGFuYWwoKeyXkOyEnCDsnbjsnpAg7IiY66W8IDTqsJzroZwg7ISk7KCV7ZWY7JesIDTqsJzsnZgg7J247J6Q7JeQIOuMgO2VnCDqs6DsnLPqsJLrp4wg7IKw7Lac65CY7JeI64ukLiDshLgg67KI7Ke4IOyduOyekOq5jOyngOunjCDqs6DsnLPqsJLsnbQgMSDsnbTsg4HsnbTrr4DroZwgM+qwnOydmCDsnbjsnpDqsIAg7Jyg7Zqo7ZWY64uk6rOgIO2MkOuLqO2VoCDsiJgg7J6I64ukLgo8YnI+CgojIyMjIyMgPFIgMy45PiDqs6DsnLPqsJIg6rWs7ZWY6riwCmBgYHtyfQpsaWJyYXJ5KHN0YXRzKQpzdGF0ZV9mYWN0MCA8LSBmYWN0YW5hbChzdGF0ZSwgZmFjdG9ycyA9IDQpCnNvc3EgPC0gZnVuY3Rpb24odikgeyBzdW0odl4yKSB9CmxvYWRpbmdzIDwtIGFzLm1hdHJpeChzdGF0ZV9mYWN0MCRsb2FkaW5ncykKZWlnZW5fdmFsdWUgPC0gYXBwbHkobG9hZGluZ3MsIDIsIHNvc3EpCmVpZ2VuX3ZhbHVlCmBgYAo8YnI+CjxsaT4gZmFjdGFuYWwoKSDtlajsiJjrpbwg7J207Jqp7ZWcIOyduOyekOu2hOyEneydgCDquLDrs7jsoIHsnLzroZwgdmFyaW1heCDtmozsoITsnbQg7ISk7KCV65CY7Ja0IOyeiOuLpC4g7ZqM7KCE7J2EIO2VmOyngCDslYrsnYQg6rK97JqwIHJvdGF0aW9uID0gIm5vbmUi7Jy866GcIOyEpOygle2VmOqzoCwgcHJvbWF4IO2ajOyghOydhCDsnbTsmqntlaAg6rK97JqwIHJvdGF0aW9uID0gInByb21heCLrpbwg7ISk7KCV7ZWY7JesIOqwgSDrsKnrspXsl5Ag64yA7ZWcIOyduOyekOyggeyerOqwkuydhCDruYTqtZDtlaAg7IiYIOyeiOuLpC4gCgo8YnI+CiMjIyMjIyA8UiAzLjEwPiDsnbjsnpDrtoTshJ0g7Iuk7ZaJCmBgYHtyfQpsaWJyYXJ5KHN0YXRzKQpzdGF0ZV9mYWN0IDwtIGZhY3RhbmFsKHN0YXRlLCBmYWN0b3JzID0gMywgcm90YXRpb24gPSAibm9uZSIpCiMgc3RhdGVfZmFjdDEgPC0gZmFjdGFuYWwoc3RhdGUsIGZhY3RvcnMgPSAzLCByb3RhdGlvbiA9ICJ2YXJpbWF4IikKIyBzdGF0ZV9mYWNlMiA8LSBmYWN0YW5hbChzdGF0ZSwgZmFjdG9ycyA9IDMsIHJvdGF0aW9uID0gInByb21heCIpCm5hbWVzKHN0YXRlX2ZhY3QpCmBgYAoKPGJyPgo8aHI+Cjxicj4KCiMjIyMjICgzKSDsnbjsnpDrtoTshJ0g6rKw6rO8CjxsaT4KIyMjIyMjIChpKSB2YXJpbWF4IO2ajOyghCDqsrDqs7wgKFBvcHVsYXRpb24g7KCc7Jm4IOyghCkKPGJyPgojIyMjIyMgPFIgMy4xMT4gdmFyaW1heCDtmozsoIQg6rKw6rO8IChQb3B1bGF0aW9uIOygnOyZuCDsoIQpCmBgYHtyfQpzdGF0ZV9mYWN0MSA8LSBmYWN0YW5hbChzdGF0ZSwgZmFjdG9ycyA9IDMsIHJvdGF0aW9uID0gInZhcmltYXgiKQpzdGF0ZV9mYWN0MQpgYGAKCjxicj4KPGxpPiB2YXJpbWF4IOyduOyekO2ajOyghCDtm4Qg6rKw6rO87J2064ukLiAiVW5pcXVlbmVzc2VzIuuKlCDqs6DsnKDrtoTsgrAodW5pcXVlbmVzcyBvciBzcGVjaWZpYyB2YXJpYW5jZSnsnYQg64KY7YOA64K464ukLiAiMSAtIOqzoOycoOu2hOyCsCLsnbQg6rO17Ya17ISxKGNvbW11bmFsaXR5IG9yIGNvbW1vbiB2YXJpYW5jZSnsnbQg65CY66+A66GcIOqwgSDrs4DsiJjsnZgg6rO17Ya17ISx7J2EIOqzhOyCsO2VoCDsiJgg7J6I64ukLiAiUG9wdWxhdGlvbiLsnZgg6rO17Ya17ISx7J20IDAuMTg37J2YIOunpOyasCDsnpHsnYAg6rCS7J2EIOqwgOyguCDsoJzsmbjtlZjripQg6rKD7J20IO2DgOuLue2VmOuLpC4KCjxicj4KCiMjIyMjIyAoaWkpIHZhcmltYXgg7ZqM7KCEIOqysOqzvCAoUG9wdWxhdGlvbiDsoJzsmbgpCjxicj4KIyMjIyMjIDxSIDMuMTI+IHZhcmltYXgg7ZqM7KCEIOqysOqzvCAoUG9wdWxhdGlvbiDsoJzsmbgpCmBgYHtyfQpzdGF0ZV9mYWN0MV8xIDwtIGZhY3RhbmFsKHN0YXRlWyAsIC0xXSwgZmFjdG9ycyA9IDMsIHJvdGF0aW9uID0gInZhcmltYXgiLCBzY29yZXMgPSAiQmFydGxldHQiKQpzdGF0ZV9mYWN0MV8xCmBgYAo8YnI+CjxsaT4gIlBvcHVsYXRpb24i7J2EIOygnOyZuO2VnCDtm4Qg7J247J6Q67aE7ISd7J2EIOyLpO2Wie2VnCDqsrDqs7zsnbTri6QuIOyduOyekOulvCAz6rCc66GcIOyEpOygle2VmOyYgOydhCDrlYwgcC12YWx1ZeqwgCAwLjA2MzHroZwg6reA66y06rCA7ISkKCLsnKDtmqjtlZwg7J247J6Q6rCAIDPqsJzsnbTri6QuIinsnYQg67Cb7JWE65Ok7J2464ukLiDssqsg67KI7J6sIOyduOyekOqwgCAzMy4xJSwg65GQIOuyiOyerOqwgCAyMC43JSwg7IS4IOuyiOynuCDsnbjsnpDqsIAgMjAuNSXsnbgg7ISk66qF66Cl7J2EIOqwgOyngOuKlCDqsoPsnYQg7JWMIOyImCDsnojri6QuIAo8bGk+IOyyqyDrsojsp7gg7J247J6Q64qUIOusuOunuShpbGxpdGVyYWN5KSwg7IK07J24KG11cmRlciksIOyDne2ZnOyImOykgCDquLDrjIAobGlmZSBleHApLCDqs6Drk7HqtZDsnKHsiJjspIAoSFMgR3JhZCnsnbQg67mE7KSR7J20IO2BsCDsnbjsnpDroZwg66y466e56rO8IOyCtOyduOydgCDsg53tmZzsiJjspIAg6riw64yA7JmAIOqzoOuTseq1kOycoeyImOykgOqzvCDrsJjrjIDsnZgg67aA7Zi466W8IOqwgOynhOuLpC4g65Sw65287IScIOqzoOuTseq1kOycoeyImOykgOqzvCDsg53tmZzsiJjspIDsl5Ag64yA7ZWcIOq4sOuMgOqwgCDrgq7snYQg7IiY66GdIOusuOunueuloOqzvCDsgrTsnbjsnKjsnbQg64aS7JWE7KeE64uk6rOgIOuzvCDsiJgg7J6I64ukLiDrkZAg67KI7Ke4IOyduOyekOuKlCDsiJjsnoUoaW5jb21lKeqzvCDqs6Drk7HqtZDsnKHsiJjspIAsIOyngOyXrShBcmVhKeydtCDrhpLsnYAg6rCS7J2EIOqwgOyngOupsCDshLgg67KI7Ke4IOyduOyekOuKlCDquLDtm4QgKEZyb3N0KeyZgCDrrLjrp7nsnbQg7J247J6QIOyggeyerOqwkuydtCDrhpLqsowg64KY7YOA64Ks64ukLiAKPGxpPiDssqsg67KI7J6s64qUICfsgrbsnZgg7KeIIOyduOyekCcsIOuRkCDrsojsp7jripQgJ+yCrO2ajOyggSDsp4DsnIQg7J247J6QJywg7IS4IOuyiOynuOuKlCAn6riw7ZuEIOyduOyekCfroZwg67O8IOyImCDsnojri6QuIOqwgSDrs4DsiJjrpbwg7J247J6Q66qo7ZiV7Jy866GcIOuCmO2DgOuCtOuptCDri6TsnYzqs7wg6rCZ64ukLgo8YnI+CgpJbmNvbWUgPSAwLjI2NCAqIGZhY3RvcjEgKyAwLjYyMSAqIGZhY3RvcjIgKyAwLjEwNSAqIGZhY3RvcjMgKyBlMQpJbGxpdGVyYWN5ID0gLTAuNTk5ICogZmFjdG9yMSAtIDAuMzAxICogZmFjdG9yMiAtIDAuNTM3ICogZmFjdG9yMyArIGUyCgo8YnI+Cjxicj4KIyMjIyMjIChpaWkpIOyduOyekOygkOyImChmYWN0b3Igc2NvcmUpCjxsaT4gZmFjdGFuYWwoKSDtlajsiJjsl5DshJwg7J247J6Q7KCQ7IiY66W8IOqzhOyCsO2VmOugpOuptCwgc2NvcmVz7JeQ7IScICJyZWdyZXNzaW9uIiwgIkJhcnRsZXR0IuydhCDshKDtg53tlZjsl6wg6rWs7ZWgIOyImCDsnojri6QuIOuLqCwg6riw67O46rCS7J2AICJub25lIuycvOuhnCDrlLDroZwg7ISk7KCV7ZWY7KeAIOyViuycvOuptCDsnbjsnpDsoJDsiJjrpbwg6rOE7IKw7ZWY7KeAIOyViuuKlOuLpC4g64uk7J2M7J2AIEJhcnRsZXR0J3Mgd2VpZ2h0ZWQgbGVhc3Qtc3F1YXJlc+ulvCDsnbTsmqntlZwg7J247J6Q7KCQ7IiYIOydvOu2gOyXkCDrjIDtlZwg6rKw6rO87J2064ukLgo8YnI+CiMjIyMjIyA8UiAzLjEzPiDsnbjsnpDsoJDsiJgKYGBge3J9CmhlYWQoc3RhdGVfZmFjdDFfMSRzY29yZXMpCmBgYAo8YnI+CiMjIyMjIyAoaXYpIOyduOyekO2MqO2EtAo8YnI+CiMjIyMjIyA8UiAzLjE0PiDsnbjsnpDtjKjthLQKYGBge3J9CiMgcGxvdChmYWN0b3IxLCBmYWN0b3IyKQpuYW1ldiA8LSBjb2xuYW1lcyhzdGF0ZSkKZmEgPC0gc3RhdGVfZmFjdDFfMQpwbG90KGZhJGxvYWRpbmdzWywgMV0sIGZhJGxvYWRpbmdzWywgMl0sIHhsYWIgPSAiZmFjdG9yMSIsIHlsYWIgPSAiZmFjdG9yMiIsIHBjaCA9IDE5KQp0ZXh0KHg9ZmEkbG9hZGluZ3NbLCAxXSwgeT1mYSRsb2FkaW5nc1ssIDJdLCBsYWJlbHMgPSBuYW1ldiwgYWRqID0gLTAuMSwgY2V4ID0gMC44KQphYmxpbmUoaD0wLCB2PTAsIGx0eT0yKQpgYGAKYGBge3J9CnBsb3QoZmEkbG9hZGluZ3NbLCAxXSwgZmEkbG9hZGluZ3NbLCAzXSwgeGxhYiA9ICJmYWN0b3IxIiwgeWxhYiA9ICJmYWN0b3IzIiwgcGNoID0gMTkpCnRleHQoeD1mYSRsb2FkaW5nc1ssIDFdLCB5PWZhJGxvYWRpbmdzWywgM10sIGxhYmVscyA9IG5hbWV2LCBhZGogPSAtMC4xLCBjZXggPSAwLjgpCmFibGluZShoPTAsIHY9MCwgbHR5PTIpCmBgYAo8YnI+CjxsaT4g7J247J6Q7Yyo7YS0IOq3uOuemO2UhOuhnOyEnCDqsIEg67OA7IiY7JeQIOuMgO2VnCDsnbjsnpAg7KCB7J6s6rCS7J2EIOyVjOugpOyjvOuvgOuhnCDsnbjsnpDsnZgg7J2Y66+47JeQIOuMgO2VnCDsoJXrs7Trpbwg7Iuc6rCB7KCB7Jy866GcIO2RnO2YhO2VoCDsiJgg7J6I64ukLiDsnITsnZgg7LKrIOuyiOynuCDqt7jrprzsnYAg7LKrIOuyiOynuCDsnbjsnpDsmYAg65GQIOuyiOynuCDsnbjsnpDsl5Ag64yA7ZWcIO2MqO2EtOydtOqzoCwg65GQIOuyiOynuCDqt7jrprzsnYAg7LKrIOuyiOynuCDsnbjsnpDsmYAg7IS4IOuyiOynuCDsnbjsnpDsl5Ag64yA7ZWcIOyduOyekO2MqO2FheydmCDqsrDqs7zsnbTri6QuCgo8YnI+Cjxocj4KPGJyPgoKIyMjIyBbZXggMy4zXSBtaW5yZXMgKG1pbmltdW0gcmVzaWR1YWwp7J2EIOydtOyaqe2VnCDsnbjsnpDrtoTshJ0KPGJyPgo8bGk+IDzsnpDro4wgMy4zPuydgCDsl6ztlZnsg50gNzPrqoXsl5Ag64yA7ZW0IDbqsJwg7ZWt66qp7J2YIOyLrOumrCDthYzsiqTtirjrpbwg7Iuk7Iuc7ZWcIOqysOqzvOydtOuLpC4gKEhvbHppbmdlciAmIFN3aW5lZm9yZCwgMTkzOSkKPGxpPiBncm50RmVtLmNzdgoKPGxpPiDrs4DsiJjsl5Ag64yA7ZWcIOyEpOuqheydgCDri6TsnYzqs7wg6rCZ64ukLiBS7J2EIOydtOyaqe2VmOyXrCBtaW5yZXMgKG1pbmltdW0gcmVzaWR1YWwp66W8IOydtOyaqe2VnCDsnbjsnpDrtoTshJ3snYQg7Iuk7ZaJ7ZW0IOuztOyekC4gInBzeWNoIiDtjKjtgqTsp4DsnZggZmEoKSDtlajsiJjrpbwg7Ya17ZW0IOyduOyekOuqqO2YleydhCDstpTsoJXtlZzri6QuCjxsaT4gdmlzcGVyYyA6IHZpc3VhbCBwZXJjZXB0aW9uIHNjb3JlcyAo7Iuc7KeA6rCBKQo8bGk+IGN1YmVzIDogdGVzdCBvZiBzcGF0aWFsIHZpc3VhbGl6YXRpb24gKOqzteqwhOyLnOqwge2ZlOugpSkKPGxpPiBsb3plbmdlcyA6IHRlc3Qgb2Ygc3BhdGlhbCBvcmllbnRhdGlvbiAo6rO16rCE7KCBIOuwqe2WpSDsnbjsp4DroKUpCjxsaT4gcGFyYWdyYXBoIDogcGFyYWdyYXBoIGNvbXByZWhlbnNpb24gc2NvcmUgKOusuOuLqCDsnbTtlbTroKUpCjxsaT4gc2VudGVuY2UgOiBzZW50ZW5jZSBjb21wbGV0aW9uIHNjb3JlICjrrLjsnqUg7JmE7ISx66ClKQo8bGk+IHdvcmRtZWFuIDogd29yZCBtZWFuaW5nIHNjb3JlICjri6jslrQg7J207ZW066ClKQoKPGJyPgo8YnI+CiMjIyMjICgxKSDsnpDro4wg67aI65+s7Jik6riwIOuwjyDsmpTslb0KCjxsaT4g64uk7J2M6rO8IOqwmeydtCAiZ3JudEZlbS5jc3YiIOyekOujjOulvCDrtojrn6zsmKjri6QuIHN1bW1hcnkoKSDtlajsiJjrpbwg7J207Jqp7ZW0IOuNsOydtO2EsOydmCDquLDstIjthrXqs4Trn4nsnLzroZwg7JqU7JW97ZW0IOuzuOuLpC4KCiMjIyMjIyA8UiAzLjE1PiDsnpDro4wg67aI65+s7Jik6riwIOuwjyDsmpTslb0KYGBge3J9CmZlbSA8LSByZWFkLmNzdigiLi4vRGF0YTIwMjIvZ3JudEZlbS5jc3YiKQpoZWFkKGZlbSkKYGBgCmBgYHtyfQpzdW1tYXJ5KGZlbSkKYGBgCgo8YnI+Cjxicj4KCiMjIyMjICgyKSDsnbjsnpDrtoTshJ0g7Iuk7ZaJ7ZWY6riwCjxicj4KPGxpPiBmYSgpIO2VqOyImOulvCDsnbTsmqntlZjsl6wg7J247J6Q67aE7ISd7J2EIOyLpO2Wie2VnOuLpC4gImZtIuydgCDsnbjsnpDstpTstpzrsKnrspXsnLzroZwgbWlucmVzIChtaW5pbXVtIHJlc2lkdWFsKSwgd2xzICh3ZWlnaHRlZCBsZWFzdCBzcXVhcmVzKSwgcGEgKHByaW5jaXBhbCBmYWN0b3Igc29sdXRpb24pLCBtbCAobWF4aW11bSBsaWtlbGlob29kIGZhY3RvciBhbmFseXNpcykg65Ox7J20IOyeiOuLpC4g7ZWo7IiY7JeQIOuMgO2VnCDsnpDshLjtlZwg7IKs7ZWt7J2AICI/ZmEi66W8IOydtOyaqe2VmOyXrCDssLjqs6DtlZjquLgg67CU656A64ukLiDrs7gg7JiI7KCc7JeQ7ISc64qUIG1pbnJlc+ulvCDsnbTsmqntlZjqs6AsIO2ajOyghOydhCDtlZjsp4Ag7JWK64qUIOuwqeuyleycvOuhnCDsnbjsnpDrtoTshJ3snYQg7Iuk7ZaJ7ZWY7JiA64ukLiAKCjxicj4KCiMjIyMjIyA8UiAzLjE2PiDsnbjsnpDrtoTshJ0KYGBge3J9CmxpYnJhcnkocHN5Y2gpCnVscyA8LSBmYShmZW0sIDIsIHJvdGF0ZSA9ICJub25lIiwgZm0gPSAibWlucmVzIikKbmFtZXModWxzKQpgYGAKCjxicj4KPGJyPgoKIyMjIyMgKDMpIOyduOyekOu2hOyEnSDqsrDqs7wKPGJyPgoKIyMjIyMjIChpKSDqs6DsnLPqsJIg67CPIOyKpO2BrOumrCDqt7jrprwKPGJyPgoKIyMjIyMjIDxSIDMuMTc+IOqzoOycs+qwkiDrsI8g7Iqk7YGs66asIOq3uOumvApgYGB7cn0KdWxzJHZhbHVlcwpgYGAKYGBge3J9CnBsb3QodWxzJHZhbHVlcywgdHlwZSA9ICJiIiwgcGNoID0gMTkpCmBgYAo8YnI+CjxsaT4g6rOg7Jyz6rCS6rO8IOyKpO2BrOumrCDqt7jrprzsl5Ag64yA7ZWcIOqysOqzvOydtOuLpC4g6rOg7Jyz6rCS7J2AIOyyqyDrsojsp7gg7J247J6Q66eMIDEg7J207IOB7J24IOqwkuydtCDrgpjsmZTri6QuIOyKpO2BrOumrCDqt7jrprzsnYQg67O066m0IOyEuCDrsojsp7gg7J247J6QIOydtO2bhOu2gO2EsCDquLDsmrjquLDqsIAg6riJ6rKp7ZWY6rKMIOyZhOunjO2VtOyngOuKlCDqsoPsnYQg67O8IOyImCDsnojri6QuIOuRkCDrsojsp7gg7J247J6Q7J2YIOqzoOycs+qwkuydtCAwLjkyM+ycvOuhnCAx67O064ukIOyekeyngOunjCDsnKDtmqjtlZwg7J247J6Q66GcIOuztOuPhOuhnSDtlZzri6QuIAoKPGJyPgoKIyMjIyMjIChpaSkg7J247J6Q67aA7ZWY6rCSIOuwjyDqs7XthrXshLEKPGJyPgoKIyMjIyMjIDxSIDMuMTg+IOyduOyekOu2hOyEnSDqsrDqs7wgCmBgYHtyfQp1bHMKYGBgCjxicj4KPGxpPiBmYSgpIO2VqOyImOulvCDsnbTsmqntlZjsl6wg7J247J6Q67aE7ISd7J2EIOyLpO2Wie2VnCDqsrDqs7zsnbTri6QuIOuovOyggCDqs7XthrXshLHsnYQg67O066m0IOuzgOyImCDsoITssrQgMC4067O064ukIO2BsCDqsJLsnYQg6rCA7KeA66+A66GcIOy2lOy2nOuQnCDsmpTsnbjrk6TsnbQg67OA7IiY65Ok7J2YIOyGjeyEseydhCDsnpgg67CY7JiB7ZWc64uk6rOgIOuzvCDsiJgg7J6I64ukLiDssqsg67KI7Ke4IOyduOyekOuKlCA0NiUsIOuRkCDrsojsp7gg7J247J6Q64qUIDE1JeydmCDshKTrqoXroKXsnYQg7KeA64uM64ukLgo8bGk+IOyyqyDrsojsp7gg7J247J6Q7J2YIOuzgOyImOuTpOydmCDrtoDtlZjqsJLsnYQg67O066m0IHBhcmFncmFwaCwgc2VudGVuY2UsIHdvcmRtZWFu7J20IO2BsCDqsJLsnYQg6rCA7KeA6rOgIOuRkCDrsojsp7gg7J247J6Q64qUIHZpc3BlcmMsIGN1YmVzLCBsb3plbmdlc+qwgCDtgbAg6rCS7J2EIOqwgOynhOuLpC4g7LKrIOuyiOynuCDsnbjsnpDripQg7Ja47Ja066ClKHZlcmJhbCksIOuRkCDrsojsp7gg7J247J6Q64qUIOqzteqwhOyngOqwgSDriqXroKUoc3BhdGlhbCnsnLzroZwg7J247J6Q66W8IO2Kueygle2VoCDsiJgg7J6I64ukLiDqsIEg67OA7IiY7JeQIOuMgO2VnCDsnbjsnpDrqqjtmJXsnYAg64uk7J2M6rO8IOqwmeuLpC4KCjxicj4KCnZpc3BlcmMgPSAwLjU1ICogZmFjdG9yMSArIDAuNDIgKiBmYWN0b3IyICsgZTEKY3ViZXMgPSAwLjQ1ICogZmFjdG9yMSArIDAuNTYgKiBmYWN0b3IyICsgZTIKICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgCjxicj4KPGJyPgoKIyMjIyMjIChpaWkpIOyduOyekOygkOyImChmYWN0b3Igc2NvcmUpCjxicj4KPGxpPiBmYSgpIO2VqOyImOuPhCBzY29yZXPsl5DshJwgInJlZ3Jlc3Npb24iLCAiVGh1cnNvbnRlIiwgInRlbkJlcmdlIuulvCDshKDtg53tlZjsl6wg7J247J6Q7KCQ7IiY66W8IOqzhOyCsO2VoCDsiJgg7J6I64ukLiDsmLXshZjsl5Ag64yA7ZWcIOyekOyEuO2VnCDsgqztla3snYAgIj9mYSgpIuulvCDthrXtlbQg7LC+7JWEIOuztOuPhOuhnSDtlZjsnpAuIOuLpOydjOydmCDqsrDqs7zripQg7ZqM6reA67aE7ISd7J2EIOydtOyaqe2VnCDsnbjsnpDsoJDsiJjsnZgg6rKw6rO87J2064ukKOydvOu2gCkuCgo8YnI+CgojIyMjIyMgPFIgMy4xOT4g7J247J6Q7KCQ7IiYKOydvOu2gCkKYGBge3J9CmhlYWQodWxzJHNjb3JlcykKYGBgCjxicj4KPGJyPgoKIyMjIyMjIChpdikg7ZaJ66Cs64+EKGJpcGxvdCkKPGJyPgo8bGk+IOuLpOydjOydgCDsnbjsnpDrtoTshJ0g7ZuEIO2WieugrOuPhOydmCDqsrDqs7zsnbTri6QuIOqwgSDsnbjsnpDsmYAg6rSA66Co65CcIOuzgOyImOuTpOydtCDruYTsirftlZwg7JyE7LmYIOuwjyDrsKntlqXsnYQg6rCA7KeA6rOgIOu2hO2PrO2VmOuKlCDqsoPsnYQg7JWMIOyImCDsnojri6QuCmBgYHtyfQpiaXBsb3QodWxzLCBjZXggPSAwLjcpCmBgYAoK