목차


기초 통계 분석

통계학

특정 집단을 대상으로 수행한 조사나 실험을 통해 나온 결과에 대한 요약된 형태의 표현으로 조사나 실험에 의해 확보될 수 있다. 관찰 및 조사로 얻을 수 있는 자료로부터 수치상의 성질, 규칙성 또는 불규칙성을 찾아낸다. 통계적 기법은, 실험 계획, 데이터의 요약이나 해석을 실시하는데 있어서의 근거를 제공하는 학문으로 통계학의 방법을 통해, 실제의 수치들을 왜곡하여 해석하는 것을 막고 연구를 바탕으로 합리적인 의사결정을 하게 한다.

기술통계과 추론통계

  • 추론통계 : 모집단의 일부를 추출하여 표본 내용을 근거로 하여 모집단의 전체 특성을 추측하고 검정(추론)하는 통계적 방법을 다루는 통계
  • 기술통계 : 방대한 자료를 그래프나 몇 개의 숫자로 요약하여, 그 자료의 전반적인 내용을 쉽고 빠르게 파악할 수 있는 기법을 다루는 통계

표본조사(Sample survey)

표본조사 : 집단 모두를 조사하는 총조사는 비용과 시간이 많이 소요되므로 특별한 경우를 제외하고는 집단 전체가 아닌 표본을 조사하게 되는데 이러한 조사를 표본조사라 한다.

모집단(population) : 표본조사에서 조사하고자 하는 대상 집단 전체

원소(element) : 모집단을 구성하는 개체

표본(sample) : 조사하기 위해 뽑은 모집단의 일부

모수(parameter)표본을 통해 구하고자 하는 모집단에 대한 정보

표본추출의 종류

  • 단순랜덤추출법 : N개의 원소로 구성된 모집단에서 n개의 표본을 추출할 때 각 원소에 번호를 부여해 n개를 임의로 선택해 그 해당 번호에 해당하는 원소를 표본으로 추출
  • 계통추출법 : 모집단의 모든 원소에 일련번호를 부여하고 이를 순서대로 나열한 후 N/n씩 n개의 구간으로 나눈다. 첫 구간에서 하나를 임의로 선택한 후에 K개씩 띄어서 표본을 추출
  • 층화추출법 : 상당히 이질적인 원소들로 구성된 모집단에서 각 계층을 고루 대표할 수 있도록 표본을 추출하는 방법
  • 집락추출법 : 모집단의 몇 개의 집락(cluster)이 결합된 형태인 경우 각 집단에서 원소들에게 일련번호를 부여하고 일부 집락을 랜덤으로 선택하고 그 선택된 각 집락에서 표본을 임의로 선택

표본추출 방법에 따른 장단점

  • 단순랜덤추출법 : 모집단에 대한 사전 지식이 필요없으며, 일반화가 용이하나 표본의 규모가 커야하며, 표본오차가 크다는 단점을 지님.
  • 계통추출법 : 표본을 선정하기 쉽고 비용이 적게 들지만, 표본이 주기성을 띄는 경우 문제가 발생
  • 층화추출법 : 표본의 크기가 작아도 대표성이 보장되며, 층별 특수성을 알 수 있으며 비교가 가능하나, 각 층에대한 정보가 필요하고 시간과 비용이 크게 증가
  • 집락추출법 : 광범위한 모집단에 적용이 용이하나 집단 내 이질성 확보가 어렵다는 단점을 지닌다.

표본조사의 측정방법

  • 명목척도 : 이름을 나타내는 척도. 측정 대상이 어떤 집단에 속하는지 분류할 때 사용되는 척도 ex) 성별, 출생지
  • 순서척도 : 관찰대상이 지니는 속성에 따라 순위를 결정하는 척도. ex) 등수
  • 등간(구간)척도 : 관측 대상이 지닌 속성의 차이를 양적으로 측정하기 위해 간격을 균일하게 분할하여 측정하는 척도. 절대적인 원점이 없어 두 관측값 사이의 비율은 의미가 없다. ex) 온도, 지수, 리커트척도
  • 비율척도 : 절대적 기준인 0값이 존재하며 모든 사칙연산이 가능한 등간척도. ex) 무게 나이, 연간소득, 제품가격

참고 : 온도의 0도는 물이 어든 점의 기준일 뿐이지 온도 자체가 존재하지 않는다는 뜻이 아니므로 등간척도에 해당

추론통계(Inferential statistics)

확률 : 특정 사건이 발생할 가능성을 나타내는 척도

통계분석에서 자료를 수집하고 수집된 자료로 부터 어떤 정보를 얻고자 하는 경우에는 수집된 자료가 특정한 확률분포를 따른다고 가정한다.

이산확률분포로는 베르누이, 이항, 기하, 다항, 포아송 분포 등이 있으며, 연속형 분포로는 균일, 정규, 지수, t-분포, \(\chi^2\)분포, F-분포 등이 존재


추정(estimation)과 검정(hypothesis)

  • 점추정(point estimation) : 우리가 알고싶어하는 모수를 표본들을 이용하여 추정하는 것.
  • 구간추정(interval estimation) : 유의수준 하에서 모수가 포함되리라고 여겨지는 신뢰구간을 추정하는 것.
  • 신뢰구간(confidence interval) : 표본 통계량에서 모집단 모수 값이 포함될 가능성이 있는 값의 범위

가설검정(Hypothesis Test)

연구자의 주장이 합리성이 있는가를 검토하는 통계적 방법

  • 귀무가설(null hypothesis) : 연구자가 부정하고자 하는 가설
  • 대립가설(alternative hypothesis) : 연구자의 주장에 대한 가설

검정통계량(test statistic) : 주어진 확률표본에 근거하여 가설검정에 사용되는 통계량

유의수준(significance level) : 귀무가설이 참일 때 귀무가설을 기각할 확률의 크기(1종오류).\(\alpha\)로 표기

기각역(critical region) : 귀무가설을 기각하는 표본공간의 부분집합

가설검정의 순서

유의수준 및 귀무가설, 대립가설 설정
검정통계량의 설정
기각역의 설정
검정통계량 계산
통계적 의사결정

가설검정 자세히

기술통계(Descriptive Statistics)

방대한 자료를 그래프나 몇 개의 숫자로 요약하여, 그 자료의 전반적인 내용을 쉽고 빠르게 파악할 수 있는 기법을 다루는 통계

평균, 중앙값, 표준편차, 분산, 1사분위수, 3사분위수, 최대값, 최소값 등 R에서는 summary라는 함수를 이용해 기초통계량을 확인할 수 있다. 

기본적으로 summary()사용 시 최소값, 최대값, 1,3사분위수, 중앙값, 평균값을 구해준다.

iris data 설명

iris 자료는 R에서 기본으로 제공하는 붓꽃에 대한 자료

변수

  • Sepal.Length : 꽃받침의 길이정보
  • Sepal.Width : 꽃받침의 너비정보
  • Petal.Length : 꽃잎의 길이정보
  • Petal.Width : 꽃잎의 너비정보
  • Species : 꽃의 종류(setosa, versicolor, virginica)
summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width          Species  
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100   setosa    :50  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300   versicolor:50  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300   virginica :50  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199                  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800                  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500                  
mean(iris$Sepal.Length)
[1] 5.843333
median(iris$Sepal.Length)
[1] 5.8
sd(iris$Sepal.Length)
[1] 0.8280661
var(iris$Sepal.Length)
[1] 0.6856935
quantile(iris$Sepal.Length,.25)
25% 
5.1 
quantile(iris$Sepal.Length,.75)
75% 
6.4 
max(iris$Sepal.Length)
[1] 7.9
min(iris$Sepal.Length)
[1] 4.3

인과관계와 상관관계

  • 인과관계 : 원인과 결과의 관계
  • 상관관계 : 두 변수 사이의 관계의 강도. 통계적으로는 두 변수간에 나타나는 선형적 관계

두 변수간의 관계를 알기위해 통계적으로 상관계수를 이용하는데 등간척도 이상으로 측정되는 변수에 대하여는 피어슨 상관계수를 서열척도인 두 변수들 간에는 스피어만 상관계수를 사용한다.

피어슨, 스피어만 상관계수로 구분
    피어슨 상관계수
두 변수 간의 선형관계의 크기를 측정하는 값. 비선형적 상관관계는 나타내지 못함.

스피어만 상관계수
두 변수 간의 비선형적 관계도 나타 낼 수 있는 값
두 변수들을 모두 순위로 변환 시킨 후, 두 순위 사이의 피어슨 상관계수로 정의
library(Hmisc)
#피어슨 상관계수
cor(iris$Sepal.Length,iris$Petal.Length)
[1] 0.8717538
rcorr(as.matrix(iris[,-5]),type='pearson')
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length         1.00       -0.12         0.87        0.82
Sepal.Width         -0.12        1.00        -0.43       -0.37
Petal.Length         0.87       -0.43         1.00        0.96
Petal.Width          0.82       -0.37         0.96        1.00

n= 150 


P
             Sepal.Length Sepal.Width Petal.Length Petal.Width
Sepal.Length              0.1519      0.0000       0.0000     
Sepal.Width  0.1519                   0.0000       0.0000     
Petal.Length 0.0000       0.0000                   0.0000     
Petal.Width  0.0000       0.0000      0.0000                  
#산점도행렬
pairs(iris[,-5])


#스피어만 상관계수
set.seed(1)
data=data.frame(Korea=sample(1:100,10),Math=sample(1:100,10),English=sample(1:100,10),Science=sample(1:100,10))
rcorr(as.matrix(data),type='spearman')
        Korea  Math English Science
Korea    1.00  0.21   -0.33   -0.05
Math     0.21  1.00   -0.37    0.14
English -0.33 -0.37    1.00    0.08
Science -0.05  0.14    0.08    1.00

n= 10 


P
        Korea  Math   English Science
Korea          0.5563 0.3466  0.8810 
Math    0.5563        0.2931  0.7009 
English 0.3466 0.2931         0.8287 
Science 0.8810 0.7009 0.8287         

회귀분석(Regression Analysis)

회귀분석의 가정

선형성 : 독립변수와 종속변수가 서로 선형관계

독립성 : 잔차와 독립변수가 서로 독립

등분산성 : 독립변수의 모든 값에 대해 오차들의 분산이 모두 일정

비상관성(비다중공선성) : 관측치들의 잔차들끼리 서로 상관관계가 없다.

정규성 : 잔차항이 정규분포를 따른다.

회귀분석의 종류

단순회귀 : 설명변수가 1개이며 반응변수와의 관계가 직선 \(Y=\beta_0+\beta_1 X+\epsilon\)

다변량회귀 : 설명변수가 여러개이며 반응변수와의 관계가 선형\(Y=\beta_0+\beta_1 X_1\cdots+\beta_k X_k+\epsilon\)

다항회귀 : 설명변수가 여러개이며 반응변수와의 관계가 1차 이상\(Y=\beta_0+\beta_1 X+\cdots+\beta_{11} X^2+\beta_{12} X_1X_2+\epsilon\)

곡선회귀 : 설명변수가 1개이며 반응변수와의 관계가 곡선\(Y=\beta_0+\beta_1 X+\beta_2 X^2+\epsilon\)

비선형회귀 : 회귀식의 모양이 비선형 관계로 이루어져있는 모형\(Y=\alpha e^{-\beta X}+\epsilon\)

#선형회귀 모형 
fit=lm(Petal.Length~Sepal.Length,data=iris)
#모형에 대한 상세 자료
summary(fit)

Call:
lm(formula = Petal.Length ~ Sepal.Length, data = iris)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.47747 -0.59072 -0.00668  0.60484  2.49512 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  -7.10144    0.50666  -14.02   <2e-16 ***
Sepal.Length  1.85843    0.08586   21.65   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.8678 on 148 degrees of freedom
Multiple R-squared:   0.76, Adjusted R-squared:  0.7583 
F-statistic: 468.6 on 1 and 148 DF,  p-value: < 2.2e-16
#모형진단
plot(fit)

#실제값과 예측값에대한 선
plot(iris$Sepal.Length,iris$Petal.Length)
abline(fit,col='red')

회귀모형의 진단

이상치(outlier): 회귀모형으로 잘 예측되지 않는 관측치(즉 아주 큰 양수/음수의 residual)

큰지레점(high leverage point): 비정상적인 예측변수의 값에 의한 관측치. 즉 예측변수측의 이상치로 볼 수 있다. 종속변수의 값은 관측치의 영향력을 계산하는 데 사용하지 않는다.

영향관측치(influential observation): 통계 모형 계수 결정에 불균형한 영향을 미치는 관측치로 Cook’s distance라는 통계치로 확인할 수 있다.

library(nortest)
library(car)
Loading required package: carData
#정규성 검정

shapiro.test(fit$residuals)

    Shapiro-Wilk normality test

data:  fit$residuals
W = 0.99437, p-value = 0.831
ad.test(fit$residuals)

    Anderson-Darling normality test

data:  fit$residuals
A = 0.25622, p-value = 0.7197
ks.test(fit$residuals,'pnorm',mean=0,sd=1)
ties should not be present for the Kolmogorov-Smirnov test

    One-sample Kolmogorov-Smirnov test

data:  fit$residuals
D = 0.052636, p-value = 0.8002
alternative hypothesis: two-sided
#등분산 검정
ncvTest(fit)
Non-constant Variance Score Test 
Variance formula: ~ fitted.values 
Chisquare = 2.830956, Df = 1, p = 0.092463
#독립성 검정
durbinWatsonTest(fit)
 lag Autocorrelation D-W Statistic p-value
   1       0.3869188      1.203885       0
 Alternative hypothesis: rho != 0
#이상치, 지레점, 영향치 확인 
car::outlierTest(fit)
No Studentized residuals with Bonferroni p < 0.05
Largest |rstudent|:

다중공선성

독립변수들 간에 강한 상관관계가 나타나는 문제 일반적으로 다중공선성 문제해결을 위해 변수선택법을 활용하거나 주성분회귀분석을 사용한다.

분산팽창요인(Variation inflation factor) : 다중공선성의 정도를 의미하는 값으로 처음 종속변수를 제외한 다음 나머지 변수들에 대하여 다변량 회귀분석을 한 후 \(\frac{1}{1-R_i^2}\)을 계산한 값.

fit=lm(Petal.Length~.,data=iris)
#분산팽창요인
vif(fit)
                  GVIF Df GVIF^(1/(2*Df))
Sepal.Length  3.736705  1        1.933056
Sepal.Width   2.648127  1        1.627307
Petal.Width  18.496973  1        4.300811
Species      28.551416  2        2.311569
colnames(iris)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"     
#분산팽창요인의 계산

fit=lm(Sepal.Length~.,data=iris[,-3])
summary(fit)

Call:
lm(formula = Sepal.Length ~ ., data = iris[, -3])

Residuals:
     Min       1Q   Median       3Q      Max 
-1.23591 -0.23740 -0.02601  0.18813  1.27132 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)         2.5211     0.3939   6.401 2.01e-09 ***
Sepal.Width         0.6982     0.1195   5.843 3.24e-08 ***
Petal.Width         0.3716     0.1983   1.873  0.06302 .  
Speciesversicolor   0.9881     0.2747   3.597  0.00044 ***
Speciesvirginica    1.2376     0.3913   3.162  0.00191 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4342 on 145 degrees of freedom
Multiple R-squared:  0.7324,    Adjusted R-squared:  0.725 
F-statistic: 99.21 on 4 and 145 DF,  p-value: < 2.2e-16
#Petal.Length와 Sepal.Length의 분산팽창요인 
1/(1-0.7324)
[1] 3.736921

변수선택법

모형의 유의성이 되는 지표는 AIC, BIC 등이 있다. 값이 작을수록 좋은 모형을 나타내는 지표를 의미한다.

전진선택법(forward selection) : 독립변수 0개부터 시작하여 가장 유의미한 변수들을 하나씩 추가하면서 매번 모형의 유의성을 판단
후진제거법(backward elimination) : 모든 독립변수를 넣고 시작하여 유의미하지 않은 변수들을 하나씩 추가하면서 매번 모형의 유의성을 판단
단계별 변수선택(stepwise method) : 독립변수 0개부터 시작하여 변수 추가와 제거 모두를 고려하여 모형의 유의성을 판단

*AIC(Akaike Information Criterion) : \(-2\log L +2K\)

*BIC(Bayesian Information Criterion) : \(-2\log L +2K\log n\)

(L은 우도함수, k는 상수항을 포함한 독립변수의 개수)

코드

scope는 분석할 때 고려할 변수의 범위를 설정

direction은 변수선택 방법을 설정

#전진선택법
step(lm(Sepal.Length~1,data=iris[,-5]),scope=list(lower=~1,upper=~Sepal.Width+Petal.Length+Petal.Width),
direction ='forward')
Start:  AIC=-55.6
Sepal.Length ~ 1

               Df Sum of Sq     RSS      AIC
+ Petal.Length  1    77.643  24.525 -267.641
+ Petal.Width   1    68.353  33.815 -219.460
+ Sepal.Width   1     1.412 100.756  -55.690
<none>                      102.168  -55.602

Step:  AIC=-267.64
Sepal.Length ~ Petal.Length

              Df Sum of Sq    RSS     AIC
+ Sepal.Width  1    8.1963 16.329 -326.66
+ Petal.Width  1    0.6443 23.881 -269.63
<none>                     24.525 -267.64

Step:  AIC=-326.66
Sepal.Length ~ Petal.Length + Sepal.Width

              Df Sum of Sq    RSS     AIC
+ Petal.Width  1    1.8834 14.445 -343.04
<none>                     16.329 -326.66

Step:  AIC=-343.04
Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width


Call:
lm(formula = Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width, 
    data = iris[, -5])

Coefficients:
 (Intercept)  Petal.Length   Sepal.Width   Petal.Width  
      1.8560        0.7091        0.6508       -0.5565  
#후진제거법
step(lm(Sepal.Length~Sepal.Width+Petal.Length+Petal.Width,data=iris[,-5]),scope=list(lower=~1,upper=~Sepal.Width+Petal.Length+Petal.Width),direction ='backward')
Start:  AIC=-343.04
Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width

               Df Sum of Sq    RSS     AIC
<none>                      14.445 -343.04
- Petal.Width   1    1.8834 16.329 -326.66
- Sepal.Width   1    9.4353 23.881 -269.63
- Petal.Length  1   15.4657 29.911 -235.86

Call:
lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width, 
    data = iris[, -5])

Coefficients:
 (Intercept)   Sepal.Width  Petal.Length   Petal.Width  
      1.8560        0.6508        0.7091       -0.5565  
#단계별 변수선택법
step(lm(Sepal.Length~1,data=iris[,-5]),scope=list(lower=~1,upper=~Sepal.Width+Petal.Length+Petal.Width),direction ='both')
Start:  AIC=-55.6
Sepal.Length ~ 1

               Df Sum of Sq     RSS      AIC
+ Petal.Length  1    77.643  24.525 -267.641
+ Petal.Width   1    68.353  33.815 -219.460
+ Sepal.Width   1     1.412 100.756  -55.690
<none>                      102.168  -55.602

Step:  AIC=-267.64
Sepal.Length ~ Petal.Length

               Df Sum of Sq     RSS     AIC
+ Sepal.Width   1     8.196  16.329 -326.66
+ Petal.Width   1     0.644  23.881 -269.63
<none>                       24.525 -267.64
- Petal.Length  1    77.643 102.168  -55.60

Step:  AIC=-326.66
Sepal.Length ~ Petal.Length + Sepal.Width

               Df Sum of Sq     RSS     AIC
+ Petal.Width   1     1.883  14.445 -343.04
<none>                       16.329 -326.66
- Sepal.Width   1     8.196  24.525 -267.64
- Petal.Length  1    84.427 100.756  -55.69

Step:  AIC=-343.04
Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width

               Df Sum of Sq    RSS     AIC
<none>                      14.445 -343.04
- Petal.Width   1    1.8834 16.329 -326.66
- Sepal.Width   1    9.4353 23.881 -269.63
- Petal.Length  1   15.4657 29.911 -235.86

Call:
lm(formula = Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width, 
    data = iris[, -5])

Coefficients:
 (Intercept)  Petal.Length   Sepal.Width   Petal.Width  
      1.8560        0.7091        0.6508       -0.5565  

주성분분석(Principal Component Analysis)

상관관계가 있는 고차원 자료를 자료의 변동을 최대한 보존하는 저차원 자료로 변환하는 방법. 주성분 분석의 경우 cor matrix혹은 cov matrix에 대하여 고유 벡터를 통해 데이터를 선형변환한다. 따라서 새로운 변수들은 선형 독립이 되나 factor가 존재하는 데이터에 대해서 거리를 구할 수 없다는 단점이 있다.

Propertion of Variance: 분산비율, 각 주성분의 차지하는 비율을 말하며 클 수록 영향을 많이 미친다는 것을 의미한다. Cumulative Proportion: 분산의 누적 합계

prcomp 의 경우 SVD(특이값 분해)를 사용하고, princomp의 경우 스팩트럼 분해를 사용한다는 측면에서 prcomp의 수치 정확도가 더 높다.

data(USArrests)
fit=princomp(USArrests,cor=T)
summary(fit)
Importance of components:
                          Comp.1    Comp.2    Comp.3     Comp.4
Standard deviation     1.5748783 0.9948694 0.5971291 0.41644938
Proportion of Variance 0.6200604 0.2474413 0.0891408 0.04335752
Cumulative Proportion  0.6200604 0.8675017 0.9566425 1.00000000
plot(fit,type='l')

biplot(fit)

다른 차원축소기법

시계열(time series analysis)

과거의 현상들에 대해서 상태와 관계를 규명하는데 사용하거나, 미래에 대한 시나리오를 비교하는데 사용

ex) 어떤 투자자가 높은 수익을 창출하였을 때 그 비결을 규명, 기후변화 시나리오

시계열 가정

정상성(stationarity) : 모든 시점에 대해 일정한 평균을 가지며, 분산은 시점에 의존하지 않는다. 또한 공분산은 단지 시차에만 의존하고 특정 시점에 의존하지 않는다. 이를 만족하면 정상성을 띈다고 한다.

자기회귀모형(Auto Regressive model)

  • 이전의 값이 이후의 값에 영향을 미치고 있는 상황을 고려한 모형. 시점 t에서 얻게 될 평균 값은 시점 t-1에서 얻었던 평균값에 \(\varphi\)를 곱하고 c를 더한것과 같다.

\(Y_t=\sum\varphi _i Y_{t-i}+\epsilon_t\)

이동평균모형(Moving Average model)

시간이 지남에 따라 평균값이 지속적으로 증가하거나 감소하는 경향을 고려한 모형. 전반적 추세를 보는데 유용하다.

\(Y_t=e_t-\theta_1e_{t-1}-\cdots-\theta_qe_{t-q}\)

아르마모형(ARMA model)

이동평균과정과 자기회귀 과정을 합한 모양

\(Y_t=\sum\varphi _i Y_{t-i} +e_t-\theta_1e_{t-1}-\cdots-\theta_qe_{t-q}\)

차분

1차 차분 : \(\nabla Y_t=Y_t-Y_{t-1}\) 2차 차분 : \(\nabla^2Y_t=\nabla(\nabla Y_t)=Y_t-2Y_{t-1}+Y_{t-2}\)

ARIMA(Autoregressive integrated moving average)

차분을 한 자료에 대해 아르마모형을 적용

\(\nabla Y_t = \sum \varphi_i\nabla Y_{t-i}+e^t-\sum \theta_ie_{t-i}\)


분해시계열 : 시계열에 영향을 주는 일반적 요인을 분리해 분석하는 방법

추세요인 : 자료가 어떤 특정한 형태를 취할 경우 추세요인이 있다고 한다. 
ex) 이차식의 형태, 지수적 형태 등
계절요인 : 고정된 주기에 따라 자료가 변화할 경우 계절요인이 있다고 한다.
ex) 월, 사분기 등
순환요인 : 특별한 이유없이 알려지지 않은 주기를 가지고 변화하는 경우 순환요인이 있다고 한다.
불규칙요인 : 세 가지 요인으로 설명할 수 없는 오차의 개념의 요인

code

library(TTR)
library(forecast)
This is forecast 8.7 
  Want to stay up-to-date? Read the Hyndsight blog:
  https://robjhyndman.com/hyndsight/
#항공 여객 데이터
AirPassengers
     Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1949 112 118 132 129 121 135 148 148 136 119 104 118
1950 115 126 141 135 125 149 170 170 158 133 114 140
1951 145 150 178 163 172 178 199 199 184 162 146 166
1952 171 180 193 181 183 218 230 242 209 191 172 194
1953 196 196 236 235 229 243 264 272 237 211 180 201
1954 204 188 235 227 234 264 302 293 259 229 203 229
1955 242 233 267 269 270 315 364 347 312 274 237 278
1956 284 277 317 313 318 374 413 405 355 306 271 306
1957 315 301 356 348 355 422 465 467 404 347 305 336
1958 340 318 362 348 363 435 491 505 404 359 310 337
1959 360 342 406 396 420 472 548 559 463 407 362 405
1960 417 391 419 461 472 535 622 606 508 461 390 432
#자료를 시계열자료로 변환
apts <- ts(AirPassengers, frequency = 12)
plot(apts)

# Autocovariance fucntion 
acf(apts)

# partial autocovariance fucntion
pacf(apts)

NA
NA
#최적의 아리마 모형을 찾아줌
auto.arima(AirPassengers)
Series: AirPassengers 
ARIMA(2,1,1)(0,1,0)[12] 

Coefficients:
         ar1     ar2      ma1
      0.5960  0.2143  -0.9819
s.e.  0.0888  0.0880   0.0292

sigma^2 estimated as 132.3:  log likelihood=-504.92
AIC=1017.85   AICc=1018.17   BIC=1029.35
fit=arima(AirPassengers,order=c(2,1,1),seasonal = list(order=c(0,1,0),period=12))
fit.values=forecast(fit)
fit.values
plot(fit.values)

# 분해시계열
f <- decompose(apts)
plot(f)

f2=apts-f$trend
plot(f2)

auto.arima(f2)
Series: f2 
ARIMA(1,0,0)(0,1,0)[12] 

Coefficients:
         ar1
      0.3340
s.e.  0.0864

sigma^2 estimated as 100.1:  log likelihood=-446.21
AIC=896.42   AICc=896.53   BIC=902
fit=arima(f2,order=c(1,0,0),seasonal = list(order=c(0,1,0),period=12))
fit.values=forecast(fit)
fit.values
plot(fit.values)

LS0tCnRpdGxlOiAiQUkg7JmAIE1hY2hpbmUgTGVhcm5pbmfsnYQg7JyE7ZWcIOu5heuNsOydtO2EsCDsi6TsirUiCm91dHB1dDogCiAgaHRtbF9ub3RlYm9vazogCiAgICB0aGVtZTogc3BhY2VsYWIKLS0tCgoKKioqKgoKIyDrqqnssKgKCisgWzIwMTktMDctMTcgKOyYpOyghCkgOiDrjbDsnbTthLDrp4jsnbTri50g6rCc7JqU7JmAIFIg6riw7LSIIOyCrOyaqeuylV0oaHR0cDovL3JwdWJzLmNvbS9xa2Ryazc3Nzc3Ny81MTE5NDIpCisgKipbMjAxOS0wNy0xNyAo7Jik7ZuEKSA6IOq4sOy0iCDthrXqs4TrtoTshJ1dKGh0dHA6Ly9ycHVicy5jb20vcWtkcms3Nzc3NzcvNTExOTQxKSoqCisgWzIwMTktMDctMTggKOyYpOyghCkgOiDsoJXtmJXrjbDsnbTthLDrp4jsnbTri50gLSDsp4Drj4TtlZnsirVdKGh0dHA6Ly9ycHVicy5jb20vcWtkcms3Nzc3NzcvNTExOTQwKQorIFsyMDE5LTA3LTE4ICjsmKTtm4QpIDog7KCV7ZiV642w7J207YSw66eI7J2064udIC0g67mE7KeA64+E7ZWZ7Iq1XShodHRwOi8vcnB1YnMuY29tL3FrZHJrNzc3Nzc3LzUxMTkzOCkKKyBbMjAxOS0wNy0xOSAo7Jik7KCEKSA6IOu5hOygle2YleuNsOydtO2EsOuniOydtOuLnS3snpDro4wg64uk66Oo6riwXShodHRwOi8vcnB1YnMuY29tL3FrZHJrNzc3Nzc3LzUxMTkzNykKKyBbMjAxOS0wNy0xOSAo7Jik7ZuEKSA6IOu5hOygle2YleuNsOydtO2EsOuniOydtOuLnS3thY3siqTtirjrp4jsnbTri51dKGh0dHA6Ly9ycHVicy5jb20vcWtkcms3Nzc3NzcvNTExMTk4KQoKKioqCgojIOq4sOy0iCDthrXqs4Qg67aE7ISdey50YWJzZXQgLnRhYnNldC1mYWRlIC50YWJzZXQtcGlsbHN9CgojIyMg7Ya16rOE7ZWZCgrtirnsoJUg7KeR64uo7J2EIOuMgOyDgeycvOuhnCDsiJjtlontlZwg7KGw7IKs64KYIOyLpO2XmOydhCDthrXtlbQg64KY7JioIOqysOqzvOyXkCDrjIDtlZwg7JqU7JW965CcIO2Yle2DnOydmCDtkZztmITsnLzroZwg7KGw7IKs64KYIOyLpO2XmOyXkCDsnZjtlbQg7ZmV67O065CgIOyImCDsnojri6QuCuq0gOywsCDrsI8g7KGw7IKs66GcIOyWu+ydhCDsiJgg7J6I64qUICoq7J6Q66OM66Gc67aA7YSwIOyImOy5mOyDgeydmCDshLHsp4gsIOq3nOy5meyEsSDrmJDripQg67aI6rec7LmZ7ISxKirsnYQg7LC+7JWE64K464ukLiDthrXqs4TsoIEg6riw67KV7J2ALCDsi6Ttl5gg6rOE7ZqNLCDrjbDsnbTthLDsnZggKirsmpTslb3snbTrgpgg7ZW07ISd7J2EIOyLpOyLnO2VmOuKlOuNsCDsnojslrTshJzsnZgg6re86rGw66W8IOygnOqztSoq7ZWY64qUIO2VmeusuOycvOuhnCDthrXqs4TtlZnsnZgg67Cp67KV7J2EIO2Gte2VtCwg7Iuk7KCc7J2YIOyImOy5mOuTpOydhCDsmZzqs6HtlZjsl6wg7ZW07ISd7ZWY64qUIOqyg+ydhCDrp4nqs6Ag7Jew6rWs66W8IOuwlO2DleycvOuhnCDtlanrpqzsoIHsnbgg7J2Y7IKs6rKw7KCV7J2EIO2VmOqyjCDtlZzri6QuCgojIyMg6riw7Iig7Ya16rOE6rO8IOy2lOuhoO2GteqzhAoKKyDstpTroaDthrXqs4QgOiDrqqjsp5Hri6jsnZgg7J2867aA66W8IOy2lOy2nO2VmOyXrCDtkZzrs7gg64K07Jqp7J2EIOq3vOqxsOuhnCDtlZjsl6wg66qo7KeR64uo7J2YIOyghOyytCDtirnshLHsnYQg7LaU7Lih7ZWY6rOgIOqygOyglSjstpTroaAp7ZWY64qUIO2GteqzhOyggSDrsKnrspXsnYQg64uk66Oo64qUIO2GteqzhAorIOq4sOyIoO2GteqzhCA6IOuwqeuMgO2VnCDsnpDro4zrpbwg6re4656Y7ZSE64KYIOuqhyDqsJzsnZgg7Iir7J6Q66GcIOyalOyVve2VmOyXrCwg6re4IOyekOujjOydmCDsoITrsJjsoIHsnbgg64K07Jqp7J2EIOyJveqzoCDruaDrpbTqsowg7YyM7JWF7ZWgIOyImCDsnojripQg6riw67KV7J2EIOuLpOujqOuKlCDthrXqs4QKCiMjIO2RnOuzuOyhsOyCrChTYW1wbGUgc3VydmV5KQoKKirtkZzrs7jsobDsgqwqKiA6IOynkeuLqCDrqqjrkZDrpbwg7KGw7IKs7ZWY64qUIOy0neyhsOyCrOuKlCAqKuu5hOyaqeqzvCDsi5zqsITsnbQg66eO7J20IOyGjOyalCoq65CY66+A66GcIO2KueuzhO2VnCDqsr3smrDrpbwg7KCc7Jm47ZWY6rOg64qUIOynkeuLqCAqKuyghOyytOqwgCDslYTri4wg7ZGc67O47J2EIOyhsOyCrCoq7ZWY6rKMIOuQmOuKlOuNsCDsnbTrn6ztlZwg7KGw7IKs66W8IO2RnOuzuOyhsOyCrOudvCDtlZzri6QuCgoqKuuqqOynkeuLqCoqKHBvcHVsYXRpb24pIDog7ZGc67O47KGw7IKs7JeQ7IScIOyhsOyCrO2VmOqzoOyekCDtlZjripQg64yA7IOBIOynkeuLqCDsoITssrQKCioq7JuQ7IaMKiooZWxlbWVudCkgOiDrqqjsp5Hri6jsnYQg6rWs7ISx7ZWY64qUIOqwnOyytAoKKirtkZzrs7gqKihzYW1wbGUpIDog7KGw7IKs7ZWY6riwIOychO2VtCDrvZHsnYAg66qo7KeR64uo7J2YIOydvOu2gAoKKirrqqjsiJgqKihwYXJhbWV0ZXIp7ZGc67O47J2EIO2Gte2VtCDqtaztlZjqs6DsnpAg7ZWY64qUIOuqqOynkeuLqOyXkCDrjIDtlZwg7KCV67O0CgohW10oaHR0cHM6Ly90MS5kYXVtY2RuLm5ldC9jZmlsZS90aXN0b3J5LzI0MEJCQjRGNTdDQzI0N0IyMykKCgojIyMg7ZGc67O47LaU7Lac7J2YIOyiheulmAoKKyAqKuuLqOyInOuenOuNpOy2lOy2nOuylSoqIDogTuqwnOydmCDsm5DshozroZwg6rWs7ISx65CcIOuqqOynkeuLqOyXkOyEnCBu6rCc7J2YIO2RnOuzuOydhCDstpTstpztlaAg65WMIOqwgSDsm5Dshozsl5Ag67KI7Zi466W8IOu2gOyXrO2VtCBu6rCc66W8IOyehOydmOuhnCDshKDtg53tlbQg6re4IO2VtOuLuSDrsojtmLjsl5Ag7ZW064u57ZWY64qUIOybkOyGjOulvCDtkZzrs7jsnLzroZwg7LaU7LacCisgKirqs4TthrXstpTstpzrspUqKiA6IOuqqOynkeuLqOydmCDrqqjrk6Ag7JuQ7IaM7JeQIOydvOugqOuyiO2YuOulvCDrtoDsl6ztlZjqs6Ag7J2066W8IOyInOyEnOuMgOuhnCDrgpjsl7TtlZwg7ZuEIE4vbuyUqSBu6rCc7J2YIOq1rOqwhOycvOuhnCDrgpjriIjri6QuIOyyqyDqtazqsITsl5DshJwg7ZWY64KY66W8IOyehOydmOuhnCDshKDtg53tlZwg7ZuE7JeQICoqS+qwnOyUqSDrnYTslrTshJwg7ZGc67O47J2EIOy2lOy2nCoqCisgKirsuLXtmZTstpTstpzrspUqKiA6IOyDgeuLue2eiCDsnbTsp4jsoIHsnbgg7JuQ7IaM65Ok66GcIOq1rOyEseuQnCDrqqjsp5Hri6jsl5DshJwgKirqsIEg6rOE7Li17J2EIOqzoOujqCDrjIDtkZztlaAg7IiYIOyeiOuPhOuhnSDtkZzrs7jsnYQg7LaU7Lac7ZWY64qUIOuwqeuylSoqCisgKirsp5Hrnb3stpTstpzrspUqKiA6IOuqqOynkeuLqOydmCDrqocg6rCc7J2YIOynkeudvShjbHVzdGVyKeydtCDqsrDtlanrkJwg7ZiV7YOc7J24IOqyveyasCDqsIEg7KeR64uo7JeQ7IScIOybkOyGjOuTpOyXkOqyjCDsnbzroKjrsojtmLjrpbwg67aA7Jes7ZWY6rOgICoq7J2867aAIOynkeudveydhCDrnpzrjaTsnLzroZwg7ISg7YOdKirtlZjqs6Ag6re4IOyEoO2DneuQnCDqsIEg7KeR65297JeQ7IScIO2RnOuzuOydhCDsnoTsnZjroZwg7ISg7YOdCgohW10oL2Nsb3VkL3Byb2plY3Qv7Lqh7LKYMTcuUE5HKQoKCiMjIyDtkZzrs7jstpTstpwg67Cp67KV7JeQIOuUsOuluCDsnqXri6jsoJAKCisg64uo7Iic656c642k7LaU7Lac67KVIDog66qo7KeR64uo7JeQIOuMgO2VnCDsgqzsoIQg7KeA7Iud7J20IO2VhOyalOyXhuycvOupsCwg7J2867CY7ZmU6rCAIOyaqeydtO2VmOuCmCDtkZzrs7jsnZgg6rec66qo6rCAIOy7pOyVvO2VmOupsCwg7ZGc67O47Jik7LCo6rCAIO2BrOuLpOuKlCDri6jsoJDsnYQg7KeA64uYLgorIOqzhO2Gtey2lOy2nOuylSA6IO2RnOuzuOydhCDshKDsoJXtlZjquLAg7Im96rOgIOu5hOyaqeydtCDsoIHqsowg65Ok7KeA66eMLCDtkZzrs7jsnbQg7KO86riw7ISx7J2EIOudhOuKlCDqsr3smrAg66y47KCc6rCAIOuwnOyDnQorIOy4te2ZlOy2lOy2nOuylSA6IO2RnOuzuOydmCDtgazquLDqsIAg7J6R7JWE64+EIOuMgO2RnOyEseydtCDrs7TsnqXrkJjrqbAsIOy4teuzhCDtirnsiJjshLHsnYQg7JWMIOyImCDsnojsnLzrqbAg67mE6rWQ6rCAIOqwgOuKpe2VmOuCmCwg6rCBIOy4teyXkOuMgO2VnCDsoJXrs7TqsIAg7ZWE7JqU7ZWY6rOgIOyLnOqwhOqzvCDruYTsmqnsnbQg7YGs6rKMIOymneqwgAorIOynkeudvey2lOy2nOuylSA6IOq0keuylOychO2VnCDrqqjsp5Hri6jsl5Ag7KCB7Jqp7J20IOyaqeydtO2VmOuCmCDsp5Hri6gg64K0IOydtOyniOyEsSDtmZXrs7TqsIAg7Ja066C164uk64qUIOuLqOygkOydhCDsp4Dri4zri6QuCgoKIyMjIO2RnOuzuOyhsOyCrOydmCDsuKHsoJXrsKnrspUKCisg66qF66qp7LKZ64+EIDog7J2066aE7J2EIOuCmO2DgOuCtOuKlCDsspnrj4QuIOy4oeyglSDrjIDsg4HsnbQg7Ja065akIOynkeuLqOyXkCDsho3tlZjripTsp4Ag67aE66WY7ZWgIOuVjCDsgqzsmqnrkJjripQg7LKZ64+ECipleCkg7ISx67OELCDstpzsg53sp4AqCisg7Iic7ISc7LKZ64+EIDog6rSA7LCw64yA7IOB7J20IOyngOuLiOuKlCDsho3shLHsl5Ag65Sw6528IOyInOychOulvCDqsrDsoJXtlZjripQg7LKZ64+ELiAqZXgpIOuTseyImCoKKyDrk7HqsIQo6rWs6rCEKeyymeuPhCA6IOq0gOy4oSDrjIDsg4HsnbQg7KeA64uMIOyGjeyEseydmCDssKjsnbTrpbwg7JaR7KCB7Jy866GcIOy4oeygle2VmOq4sCDsnITtlbQg6rCE6rKp7J2EIOq3oOydvO2VmOqyjCDrtoTtlaDtlZjsl6wg7Lih7KCV7ZWY64qUIOyymeuPhC4g7KCI64yA7KCB7J24IOybkOygkOydtCDsl4bslrQg65GQIOq0gOy4oeqwkiDsgqzsnbTsnZgg67mE7Jyo7J2AIOydmOuvuOqwgCDsl4bri6QuICpleCkg7Jio64+ELCDsp4DsiJgsIOumrOy7pO2KuOyymeuPhCoKKyDruYTsnKjsspnrj4QgOiDsoIjrjIDsoIEg6riw7KSA7J24IDDqsJLsnbQg7KG07J6s7ZWY66mwIOuqqOuToCDsgqzsuZnsl7DsgrDsnbQg6rCA64ql7ZWcIOuTseqwhOyymeuPhC4gKmV4KSDrrLTqsowg64KY7J20LCDsl7DqsITshozrk50sIOygnO2SiOqwgOqyqSoKCioq7LC46rOgKiogOiAq7Jio64+E7J2YIDDrj4TripQg66y87J20IOyWtOuToCDsoJDsnZgg6riw7KSA7J28IOu/kOydtOyngCDsmKjrj4Qg7J6Q7LK06rCAIOyhtOyerO2VmOyngCDslYrripTri6TripQg65y77J20IOyVhOuLiOuvgOuhnCDrk7HqsITsspnrj4Tsl5Ag7ZW064u5KgoKIyMg7LaU66Gg7Ya16rOEKEluZmVyZW50aWFsIHN0YXRpc3RpY3MpCgrtmZXrpaAgOiDtirnsoJUg7IKs6rG07J20IOuwnOyDne2VoCDqsIDriqXshLHsnYQg64KY7YOA64K064qUIOyymeuPhAoK7Ya16rOE67aE7ISd7JeQ7IScIOyekOujjOulvCDsiJjsp5HtlZjqs6Ag7IiY7KeR65CcIOyekOujjOuhnCDrtoDthLAg7Ja065akIOygleuztOulvCDslrvqs6DsnpAg7ZWY64qUIOqyveyasOyXkOuKlCDsiJjsp5HrkJwg7J6Q66OM6rCAICoq7Yq57KCV7ZWcIO2ZleuloOu2hO2PrOulvCDrlLDrpbjri6Tqs6Ag6rCA7KCVKirtlZzri6QuIAoKKuydtOyCsO2ZleuloOu2hO2PrOuhnOuKlCDrsqDrpbTriITsnbQsIOydtO2VrSwg6riw7ZWYLCDri6Ttla0sIO2PrOyVhOyGoSDrtoTtj6wg65Ox7J20IOyeiOycvOupsCwg7Jew7IaN7ZiVIOu2hO2PrOuhnOuKlCDqt6DsnbwsIOygleq3nCwg7KeA7IiYLCB0Leu2hO2PrCwgJFxjaGleMiTrtoTtj6wsICBGLeu2hO2PrCDrk7HsnbQg7KG07J6sKgoKKioqCgojIyMg7LaU7KCVKGVzdGltYXRpb24p6rO8IOqygOyglShoeXBvdGhlc2lzKQoKKyDsoJDstpTsoJUocG9pbnQgZXN0aW1hdGlvbikgOiDsmrDrpqzqsIAg7JWM6rOg7Iu27Ja07ZWY64qUIOuqqOyImOulvCDtkZzrs7jrk6TsnYQg7J207Jqp7ZWY7JesIOy2lOygle2VmOuKlCDqsoMuCisg6rWs6rCE7LaU7KCVKGludGVydmFsIGVzdGltYXRpb24pIDog7Jyg7J2Y7IiY7KSAIO2VmOyXkOyEnCDrqqjsiJjqsIAg7Y+s7ZWo65CY66as65286rOgIOyXrOqyqOyngOuKlCDsi6DrorDqtazqsITsnYQg7LaU7KCV7ZWY64qUIOqygy4KKyDsi6DrorDqtazqsIQoY29uZmlkZW5jZSBpbnRlcnZhbCkgOiDtkZzrs7gg7Ya16rOE65+J7JeQ7IScIOuqqOynkeuLqCDrqqjsiJgg6rCS7J20IO2PrO2VqOuQoCDqsIDriqXshLHsnbQg7J6I64qUIOqwkuydmCDrspTsnIQKCiMjIyDqsIDshKTqsoDsoJUoSHlwb3RoZXNpcyBUZXN0KQoK7Jew6rWs7J6Q7J2YIOyjvOyepeydtCDtlanrpqzshLHsnbQg7J6I64qU6rCA66W8IOqygO2GoO2VmOuKlCDthrXqs4TsoIEg67Cp67KVCgorIOq3gOustOqwgOyEpChudWxsIGh5cG90aGVzaXMpIDog7Jew6rWs7J6Q6rCAIOu2gOygle2VmOqzoOyekCDtlZjripQg6rCA7ISkCisg64yA66a96rCA7ISkKGFsdGVybmF0aXZlIGh5cG90aGVzaXMpIDog7Jew6rWs7J6Q7J2YIOyjvOyepeyXkCDrjIDtlZwg6rCA7ISkCgrqsoDsoJXthrXqs4Trn4kodGVzdCBzdGF0aXN0aWMpIDog7KO87Ja07KeEIO2ZleuloO2RnOuzuOyXkCDqt7zqsbDtlZjsl6wg6rCA7ISk6rKA7KCV7JeQIOyCrOyaqeuQmOuKlCDthrXqs4Trn4kKCuycoOydmOyImOykgChzaWduaWZpY2FuY2UgbGV2ZWwpIDog6reA66y06rCA7ISk7J20IOywuOydvCDrlYwg6reA66y06rCA7ISk7J2EIOq4sOqwge2VoCDtmZXrpaDsnZgg7YGs6riwKDHsooXsmKTrpZgpLiRcYWxwaGEk66GcIO2RnOq4sAoK6riw6rCB7JetKGNyaXRpY2FsIHJlZ2lvbikgOiDqt4DrrLTqsIDshKTsnYQg6riw6rCB7ZWY64qUIO2RnOuzuOqzteqwhOydmCDrtoDrtoTsp5HtlakKCioq6rCA7ISk6rKA7KCV7J2YIOyInOyEnCoqCgogICAg7Jyg7J2Y7IiY7KSAIOuwjyDqt4DrrLTqsIDshKQsIOuMgOumveqwgOyEpCDshKTsoJUKICAgIOqygOygle2GteqzhOufieydmCDshKTsoJUKICAgIOq4sOqwgeyXreydmCDshKTsoJUKICAgIOqygOygle2GteqzhOufiSDqs4TsgrAKICAgIO2GteqzhOyggSDsnZjsgqzqsrDsoJUKClvqsIDshKTqsoDsoJUg7J6Q7IS47Z6IXShodHRwOi8vcnB1YnMuY29tL3FrZHJrNzc3Nzc3LzQ5MDA0NikKCiMjIOq4sOyIoO2GteqzhChEZXNjcmlwdGl2ZSBTdGF0aXN0aWNzKQoK67Cp64yA7ZWcIOyekOujjOulvCDqt7jrnpjtlITrgpgg66qHIOqwnOydmCDsiKvsnpDroZwg7JqU7JW97ZWY7JesLCDqt7gg7J6Q66OM7J2YIOyghOuwmOyggeyduCDrgrTsmqnsnYQg7Im96rOgIOu5oOultOqyjCDtjIzslYXtlaAg7IiYIOyeiOuKlCDquLDrspXsnYQg64uk66Oo64qUIO2GteqzhAoKCiAgICDtj4nqt6AsIOykkeyVmeqwkiwg7ZGc7KSA7Y647LCoLCDrtoTsgrAsIDHsgqzrtoTsnITsiJgsIDPsgqzrtoTsnITsiJgsIOy1nOuMgOqwkiwg7LWc7IaM6rCSIOuTsSBS7JeQ7ISc64qUIHN1bW1hcnnrnbzripQg7ZWo7IiY66W8IOydtOyaqe2VtCDquLDstIjthrXqs4Trn4nsnYQg7ZmV7J247ZWgIOyImCDsnojri6QuIAoKICAgIOq4sOuzuOyggeycvOuhnCBzdW1tYXJ5KCnsgqzsmqkg7IucIOy1nOyGjOqwkiwg7LWc64yA6rCSLCAxLDPsgqzrtoTsnITsiJgsIOykkeyVmeqwkiwg7Y+J6reg6rCS7J2EIOq1rO2VtOykgOuLpC4KCgojIyMgaXJpcyBkYXRhIOyEpOuqhQoKaXJpcyDsnpDro4zripQgUuyXkOyEnCDquLDrs7jsnLzroZwg7KCc6rO17ZWY64qUIOu2k+q9g+yXkCDrjIDtlZwg7J6Q66OMCgoqKuuzgOyImCoqCgorIFNlcGFsLkxlbmd0aCA6IOq9g+uwm+y5qOydmCDquLjsnbTsoJXrs7QKKyBTZXBhbC5XaWR0aCA6IOq9g+uwm+y5qOydmCDrhIjruYTsoJXrs7QKKyBQZXRhbC5MZW5ndGggOiDqvYPsno7snZgg6ri47J207KCV67O0CisgUGV0YWwuV2lkdGggOiDqvYPsno7snZgg64SI67mE7KCV67O0CisgU3BlY2llcyA6IOq9g+ydmCDsooXrpZgoc2V0b3NhLCB2ZXJzaWNvbG9yLCB2aXJnaW5pY2EpCgoKYGBge3J9CnN1bW1hcnkoaXJpcykKbWVhbihpcmlzJFNlcGFsLkxlbmd0aCkKbWVkaWFuKGlyaXMkU2VwYWwuTGVuZ3RoKQpzZChpcmlzJFNlcGFsLkxlbmd0aCkKdmFyKGlyaXMkU2VwYWwuTGVuZ3RoKQpxdWFudGlsZShpcmlzJFNlcGFsLkxlbmd0aCwuMjUpCnF1YW50aWxlKGlyaXMkU2VwYWwuTGVuZ3RoLC43NSkKbWF4KGlyaXMkU2VwYWwuTGVuZ3RoKQptaW4oaXJpcyRTZXBhbC5MZW5ndGgpCmBgYAoKKioqCgojIyMg7J246rO86rSA6rOE7JmAIOyDgeq0gOq0gOqzhAoKKyDsnbjqs7zqtIDqs4QgOiDsm5Dsnbjqs7wg6rKw6rO87J2YIOq0gOqzhAorIOyDgeq0gOq0gOqzhCA6IOuRkCDrs4DsiJgg7IKs7J207J2YIOq0gOqzhOydmCDqsJXrj4QuIO2GteqzhOyggeycvOuhnOuKlCDrkZAg67OA7IiY6rCE7JeQIOuCmO2DgOuCmOuKlCDshKDtmJXsoIEg6rSA6rOECgrrkZAg67OA7IiY6rCE7J2YIOq0gOqzhOulvCDslYzquLDsnITtlbQg7Ya16rOE7KCB7Jy866GcIOyDgeq0gOqzhOyImOulvCDsnbTsmqntlZjripTrjbAg65Ox6rCE7LKZ64+EIOydtOyDgeycvOuhnCDsuKHsoJXrkJjripQg67OA7IiY7JeQIOuMgO2VmOyXrOuKlCDtlLzslrTsiqgg7IOB6rSA6rOE7IiY66W8IOyEnOyXtOyymeuPhOyduCDrkZAg67OA7IiY65OkIOqwhOyXkOuKlCDsiqTtlLzslrTrp4wg7IOB6rSA6rOE7IiY66W8IOyCrOyaqe2VnOuLpC4KCgoJ7ZS87Ja07IqoLCDsiqTtlLzslrTrp4wg7IOB6rSA6rOE7IiY66GcIOq1rOu2hAoJCe2UvOyWtOyKqCDsg4HqtIDqs4TsiJgKCeuRkCDrs4DsiJgg6rCE7J2YIOyEoO2Yleq0gOqzhOydmCDtgazquLDrpbwg7Lih7KCV7ZWY64qUIOqwki4g67mE7ISg7ZiV7KCBIOyDgeq0gOq0gOqzhOuKlCDrgpjtg4DrgrTsp4Ag66q77ZWoLgoKCeyKpO2UvOyWtOunjCDsg4HqtIDqs4TsiJgKCeuRkCDrs4DsiJgg6rCE7J2YIOu5hOyEoO2YleyggSDqtIDqs4Trj4Qg64KY7YOAIOuCvCDsiJgg7J6I64qUIOqwkgoJ65GQIOuzgOyImOuTpOydhCDrqqjrkZAg7Iic7JyE66GcIOuzgO2ZmCDsi5ztgqgg7ZuELCDrkZAg7Iic7JyEIOyCrOydtOydmCDtlLzslrTsiqgg7IOB6rSA6rOE7IiY66GcIOygleydmAoKYGBge3J9CmxpYnJhcnkoSG1pc2MpCiPtlLzslrTsiqgg7IOB6rSA6rOE7IiYCmNvcihpcmlzJFNlcGFsLkxlbmd0aCxpcmlzJFBldGFsLkxlbmd0aCkKcmNvcnIoYXMubWF0cml4KGlyaXNbLC01XSksdHlwZT0ncGVhcnNvbicpCgoj7IKw7KCQ64+E7ZaJ66CsCnBhaXJzKGlyaXNbLC01XSkKCiPsiqTtlLzslrTrp4wg7IOB6rSA6rOE7IiYCnNldC5zZWVkKDEpCmRhdGE9ZGF0YS5mcmFtZShLb3JlYT1zYW1wbGUoMToxMDAsMTApLE1hdGg9c2FtcGxlKDE6MTAwLDEwKSxFbmdsaXNoPXNhbXBsZSgxOjEwMCwxMCksU2NpZW5jZT1zYW1wbGUoMToxMDAsMTApKQpyY29ycihhcy5tYXRyaXgoZGF0YSksdHlwZT0nc3BlYXJtYW4nKQoKYGBgCgoKIyMg7ZqM6reA67aE7ISdKFJlZ3Jlc3Npb24gQW5hbHlzaXMpCgrtmozqt4DrtoTshJ3snZgg6rCA7KCVCgoJ7ISg7ZiV7ISxIDog64+F66a967OA7IiY7JmAIOyiheyGjeuzgOyImOqwgCDshJzroZwg7ISg7ZiV6rSA6rOECgoJ64+F66a97ISxIDog7J6U7LCo7JmAIOuPheumveuzgOyImOqwgCDshJzroZwg64+F66a9CgoJ65Ox67aE7IKw7ISxIDog64+F66a967OA7IiY7J2YIOuqqOuToCDqsJLsl5Ag64yA7ZW0IOyYpOywqOuTpOydmCDrtoTsgrDsnbQg66qo65GQIOydvOyglQoKCeu5hOyDgeq0gOyEsSjruYTri6TspJHqs7XshKDshLEpIDog6rSA7Lih7LmY65Ok7J2YIOyelOywqOuTpOuBvOumrCDshJzroZwg7IOB6rSA6rSA6rOE6rCAIOyXhuuLpC4KCgnsoJXqt5zshLEgOiDsnpTssKjtla3snbQg7KCV6rec67aE7Y+s66W8IOuUsOuluOuLpC4KCiMjIyDtmozqt4DrtoTshJ3snZgg7KKF66WYCgrri6jsiJztmozqt4AgOiDshKTrqoXrs4DsiJjqsIAgMeqwnOydtOupsCDrsJjsnZHrs4DsiJjsmYDsnZgg6rSA6rOE6rCAIOyngeyEoCAkWT1cYmV0YV8wK1xiZXRhXzEgWCtcZXBzaWxvbiQKCuuLpOuzgOufie2ajOq3gCA6IOyEpOuqheuzgOyImOqwgCDsl6zrn6zqsJzsnbTrqbAg67CY7J2R67OA7IiY7JmA7J2YIOq0gOqzhOqwgCDshKDtmJUkWT1cYmV0YV8wK1xiZXRhXzEgWF8xXGNkb3RzK1xiZXRhX2sgWF9rK1xlcHNpbG9uJAoK64uk7ZWt7ZqM6reAIDog7ISk66qF67OA7IiY6rCAIOyXrOufrOqwnOydtOupsCDrsJjsnZHrs4DsiJjsmYDsnZgg6rSA6rOE6rCAIDHssKgg7J207IOBJFk9XGJldGFfMCtcYmV0YV8xIFgrXGNkb3RzK1xiZXRhX3sxMX0gWF4yK1xiZXRhX3sxMn0gWF8xWF8yK1xlcHNpbG9uJAoK6rOh7ISg7ZqM6reAIDog7ISk66qF67OA7IiY6rCAIDHqsJzsnbTrqbAg67CY7J2R67OA7IiY7JmA7J2YIOq0gOqzhOqwgCDqs6HshKAkWT1cYmV0YV8wK1xiZXRhXzEgWCtcYmV0YV8yIFheMitcZXBzaWxvbiQKCuu5hOyEoO2Yle2ajOq3gCA6IO2ajOq3gOyLneydmCDrqqjslpHsnbQg67mE7ISg7ZiVIOq0gOqzhOuhnCDsnbTro6jslrTsoLjsnojripQg66qo7ZiVJFk9XGFscGhhIGVeey1cYmV0YSBYfStcZXBzaWxvbiQKCmBgYHtyfQoj7ISg7ZiV7ZqM6reAIOuqqO2YlSAKZml0PWxtKFBldGFsLkxlbmd0aH5TZXBhbC5MZW5ndGgsZGF0YT1pcmlzKQoj66qo7ZiV7JeQIOuMgO2VnCDsg4HshLgg7J6Q66OMCnN1bW1hcnkoZml0KQoj66qo7ZiV7KeE64uoCnBsb3QoZml0KQoj7Iuk7KCc6rCS6rO8IOyYiOy4oeqwkuyXkOuMgO2VnCDshKAKcGxvdChpcmlzJFNlcGFsLkxlbmd0aCxpcmlzJFBldGFsLkxlbmd0aCkKYWJsaW5lKGZpdCxjb2w9J3JlZCcpCmBgYAojIyMg7ZqM6reA66qo7ZiV7J2YIOynhOuLqAoK7J207IOB7LmYKG91dGxpZXIpOiDtmozqt4DrqqjtmJXsnLzroZwg7J6YIOyYiOy4oeuQmOyngCDslYrripQg6rSA7Lih7LmYKOymiSDslYTso7wg7YGwIOyWkeyImC/snYzsiJjsnZggcmVzaWR1YWwpIAoK7YGw7KeA66CI7KCQKGhpZ2ggbGV2ZXJhZ2UgcG9pbnQpOiDruYTsoJXsg4HsoIHsnbgg7JiI7Lih67OA7IiY7J2YIOqwkuyXkCDsnZjtlZwg6rSA7Lih7LmYLiDspokg7JiI7Lih67OA7IiY7Lih7J2YIOydtOyDgey5mOuhnCDrs7wg7IiYIOyeiOuLpC4g7KKF7IaN67OA7IiY7J2YIOqwkuydgCDqtIDsuKHsuZjsnZgg7JiB7Zal66Cl7J2EIOqzhOyCsO2VmOuKlCDrjbAg7IKs7Jqp7ZWY7KeAIOyViuuKlOuLpC4KCuyYge2Wpeq0gOy4oey5mChpbmZsdWVudGlhbCBvYnNlcnZhdGlvbik6IO2GteqzhCDrqqjtmJUg6rOE7IiYIOqysOygleyXkCDrtojqt6DtmJXtlZwg7JiB7Zal7J2EIOuvuOy5mOuKlCDqtIDsuKHsuZjroZwgQ29va+KAmXMgZGlzdGFuY2XrnbzripQg7Ya16rOE7LmY66GcIO2ZleyduO2VoCDsiJgg7J6I64ukLgoKYGBge3J9CmxpYnJhcnkobm9ydGVzdCkKbGlicmFyeShjYXIpCiPsoJXqt5zshLEg6rKA7KCVCgpzaGFwaXJvLnRlc3QoZml0JHJlc2lkdWFscykKYWQudGVzdChmaXQkcmVzaWR1YWxzKQoKa3MudGVzdChmaXQkcmVzaWR1YWxzLCdwbm9ybScsbWVhbj0wLHNkPTEpCiPrk7HrtoTsgrAg6rKA7KCVCm5jdlRlc3QoZml0KQoj64+F66a97ISxIOqygOyglQpkdXJiaW5XYXRzb25UZXN0KGZpdCkKCiPsnbTsg4HsuZgsIOyngOugiOygkCwg7JiB7Zal7LmYIO2ZleyduCAKY2FyOjpvdXRsaWVyVGVzdChmaXQpCgpgYGAKCiMjIyDri6TspJHqs7XshKDshLEgCgrrj4Xrpr3rs4DsiJjrk6Qg6rCE7JeQIOqwle2VnCDsg4HqtIDqtIDqs4TqsIAg64KY7YOA64KY64qUIOusuOygnArsnbzrsJjsoIHsnLzroZwg64uk7KSR6rO17ISg7ISxIOusuOygnO2VtOqysOydhCDsnITtlbQg67OA7IiY7ISg7YOd67KV7J2EIO2ZnOyaqe2VmOqxsOuCmCDso7zshLHrtoTtmozqt4DrtoTshJ3snYQg7IKs7Jqp7ZWc64ukLgoK67aE7IKw7Yy97LC97JqU7J24KFZhcmlhdGlvbiBpbmZsYXRpb24gZmFjdG9yKSA6IOuLpOykkeqzteyEoOyEseydmCDsoJXrj4Trpbwg7J2Y66+47ZWY64qUIOqwkuycvOuhnCDsspjsnYwg7KKF7IaN67OA7IiY66W8IOygnOyZuO2VnCDri6TsnYwg64KY66i47KeAIOuzgOyImOuTpOyXkCDrjIDtlZjsl6wg64uk67OA65+JIO2ajOq3gOu2hOyEneydhCDtlZwg7ZuEICRcZnJhY3sxfXsxLVJfaV4yfSTsnYQg6rOE7IKw7ZWcIOqwki4KCgpgYGB7cn0KZml0PWxtKFBldGFsLkxlbmd0aH4uLGRhdGE9aXJpcykKI+u2hOyCsO2MveywveyalOyduAp2aWYoZml0KQpjb2xuYW1lcyhpcmlzKQoj67aE7IKw7Yy97LC97JqU7J247J2YIOqzhOyCsAoKZml0PWxtKFNlcGFsLkxlbmd0aH4uLGRhdGE9aXJpc1ssLTNdKQpzdW1tYXJ5KGZpdCkKI1BldGFsLkxlbmd0aOyZgCBTZXBhbC5MZW5ndGjsnZgg67aE7IKw7Yy97LC97JqU7J24IAoxLygxLTAuNzMyNCkKCmBgYAoKIyMjIOuzgOyImOyEoO2DneuylQoK66qo7ZiV7J2YIOycoOydmOyEseydtCDrkJjripQg7KeA7ZGc64qUIEFJQywgQklDIOuTseydtCDsnojri6QuIOqwkuydtCDsnpHsnYTsiJjroZ0g7KKL7J2AIOuqqO2YleydhCDrgpjtg4DrgrTripQg7KeA7ZGc66W8IOydmOuvuO2VnOuLpC4KCiAgICDsoITsp4TshKDtg53rspUoZm9yd2FyZCBzZWxlY3Rpb24pIDog64+F66a967OA7IiYIDDqsJzrtoDthLAg7Iuc7J6R7ZWY7JesIOqwgOyepSDsnKDsnZjrr7jtlZwg67OA7IiY65Ok7J2EIO2VmOuCmOyUqSDstpTqsIDtlZjrqbTshJwg66ek67KIIOuqqO2YleydmCDsnKDsnZjshLHsnYQg7YyQ64uoCiAgICDtm4Tsp4TsoJzqsbDrspUoYmFja3dhcmQgZWxpbWluYXRpb24pIDog66qo65OgIOuPheumveuzgOyImOulvCDrhKPqs6Ag7Iuc7J6R7ZWY7JesIOycoOydmOuvuO2VmOyngCDslYrsnYAg67OA7IiY65Ok7J2EIO2VmOuCmOyUqSDstpTqsIDtlZjrqbTshJwg66ek67KIIOuqqO2YleydmCDsnKDsnZjshLHsnYQg7YyQ64uoCiAgICDri6jqs4Trs4Qg67OA7IiY7ISg7YOdKHN0ZXB3aXNlIG1ldGhvZCkgOiDrj4Xrpr3rs4DsiJggMOqwnOu2gO2EsCDsi5zsnpHtlZjsl6wg67OA7IiYIOy2lOqwgOyZgCDsoJzqsbAg66qo65GQ66W8IOqzoOugpO2VmOyXrCDrqqjtmJXsnZgg7Jyg7J2Y7ISx7J2EIO2MkOuLqAoKKkFJQyhBa2Fpa2UgSW5mb3JtYXRpb24gQ3JpdGVyaW9uKSA6ICQtMlxsb2cgTCArMkskCgoqQklDKEJheWVzaWFuIEluZm9ybWF0aW9uIENyaXRlcmlvbikgOiAkLTJcbG9nIEwgKzJLXGxvZyBuJAoKKEzsnYAg7Jqw64+E7ZWo7IiYLCBr64qUIOyDgeyImO2VreydhCDtj6ztlajtlZwg64+F66a967OA7IiY7J2YIOqwnOyImCkKCiMjIyDsvZTrk5wgCgoqc2NvcGXripQg67aE7ISd7ZWgIOuVjCDqs6DroKTtlaAg67OA7IiY7J2YIOuylOychOulvCDshKTsoJUqCgoqZGlyZWN0aW9u7J2AIOuzgOyImOyEoO2DnSDrsKnrspXsnYQg7ISk7KCVKgoKYGBge3J9CiPsoITsp4TshKDtg53rspUKc3RlcChsbShTZXBhbC5MZW5ndGh+MSxkYXRhPWlyaXNbLC01XSksc2NvcGU9bGlzdChsb3dlcj1+MSx1cHBlcj1+U2VwYWwuV2lkdGgrUGV0YWwuTGVuZ3RoK1BldGFsLldpZHRoKSwKZGlyZWN0aW9uID0nZm9yd2FyZCcpCiPtm4Tsp4TsoJzqsbDrspUKc3RlcChsbShTZXBhbC5MZW5ndGh+U2VwYWwuV2lkdGgrUGV0YWwuTGVuZ3RoK1BldGFsLldpZHRoLGRhdGE9aXJpc1ssLTVdKSxzY29wZT1saXN0KGxvd2VyPX4xLHVwcGVyPX5TZXBhbC5XaWR0aCtQZXRhbC5MZW5ndGgrUGV0YWwuV2lkdGgpLGRpcmVjdGlvbiA9J2JhY2t3YXJkJykKI+uLqOqzhOuzhCDrs4DsiJjshKDtg53rspUKc3RlcChsbShTZXBhbC5MZW5ndGh+MSxkYXRhPWlyaXNbLC01XSksc2NvcGU9bGlzdChsb3dlcj1+MSx1cHBlcj1+U2VwYWwuV2lkdGgrUGV0YWwuTGVuZ3RoK1BldGFsLldpZHRoKSxkaXJlY3Rpb24gPSdib3RoJykKCgpgYGAKCiMjIOyjvOyEseu2hOu2hOyEnShQcmluY2lwYWwgQ29tcG9uZW50IEFuYWx5c2lzKQoK7IOB6rSA6rSA6rOE6rCAIOyeiOuKlCDqs6DssKjsm5Ag7J6Q66OM66W8IOyekOujjOydmCDrs4Drj5nsnYQg7LWc64yA7ZWcIOuztOyhtO2VmOuKlCDsoIDssKjsm5Ag7J6Q66OM66GcIOuzgO2ZmO2VmOuKlCDrsKnrspUuCuyjvOyEseu2hCDrtoTshJ3snZgg6rK97JqwIGNvciBtYXRyaXjtmLnsnYAgY292IG1hdHJpeOyXkCDrjIDtlZjsl6wg6rOg7JygIOuyoe2EsOulvCDthrXtlbQg642w7J207YSw66W8IOyEoO2YleuzgO2ZmO2VnOuLpC4g65Sw65287IScIOyDiOuhnOyatCDrs4DsiJjrk6TsnYAg7ISg7ZiVIOuPheumveydtCDrkJjrgpggZmFjdG9y6rCAIOyhtOyerO2VmOuKlCDrjbDsnbTthLDsl5Ag64yA7ZW07IScIOqxsOumrOulvCDqtaztlaAg7IiYIOyXhuuLpOuKlCDri6jsoJDsnbQg7J6I64ukLgoKUHJvcGVydGlvbiBvZiBWYXJpYW5jZTog67aE7IKw67mE7JyoLCDqsIEg7KO87ISx67aE7J2YIOywqOyngO2VmOuKlCDruYTsnKjsnYQg66eQ7ZWY66mwIO2BtCDsiJjroZ0g7JiB7Zal7J2EIOunjuydtCDrr7jsuZzri6TripQg6rKD7J2EIOydmOuvuO2VnOuLpC4gQ3VtdWxhdGl2ZSBQcm9wb3J0aW9uOiDrtoTsgrDsnZgg64iE7KCBIO2VqeqzhAoKcHJjb21wIOydmCDqsr3smrAgU1ZEKO2KueydtOqwkiDrtoTtlbQp66W8IOyCrOyaqe2VmOqzoCwgcHJpbmNvbXDsnZgg6rK97JqwIOyKpO2Mqe2KuOufvCDrtoTtlbTrpbwg7IKs7Jqp7ZWc64uk64qUIOy4oeuptOyXkOyEnCBwcmNvbXDsnZgg7IiY7LmYIOygle2ZleuPhOqwgCDrjZQg64aS64ukLgoKYGBge3J9CmRhdGEoVVNBcnJlc3RzKQpmaXQ9cHJpbmNvbXAoVVNBcnJlc3RzLGNvcj1UKQpzdW1tYXJ5KGZpdCkKcGxvdChmaXQsdHlwZT0nbCcpCmJpcGxvdChmaXQpCgpgYGAKClvri6Trpbgg7LCo7JuQ7LaV7IaM6riw67KVXShodHRwOi8vcnB1YnMuY29tL3FrZHJrNzc3Nzc3LzUwMzIwNikKCiMjIOyLnOqzhOyXtCh0aW1lIHNlcmllcyBhbmFseXNpcykKCuqzvOqxsOydmCDtmITsg4Hrk6Tsl5Ag64yA7ZW07IScIOyDge2DnOyZgCDqtIDqs4Trpbwg6rec66qF7ZWY64qU642wIOyCrOyaqe2VmOqxsOuCmCwg66+4656Y7JeQIOuMgO2VnCDsi5zrgpjrpqzsmKTrpbwg67mE6rWQ7ZWY64qU642wIOyCrOyaqQoKICAgIGV4KSDslrTrlqQg7Yis7J6Q7J6Q6rCAIOuGkuydgCDsiJjsnbXsnYQg7LC97Lac7ZWY7JiA7J2EIOuVjCDqt7gg67mE6rKw7J2EIOq3nOuqhSwg6riw7ZuE67OA7ZmUIOyLnOuCmOumrOyYpAoKKioqCgojIyMg7Iuc6rOE7Je0IOqwgOyglQoKICAgIOygleyDgeyEsShzdGF0aW9uYXJpdHkpIDog66qo65OgIOyLnOygkOyXkCDrjIDtlbQg7J287KCV7ZWcIO2Pieq3oOydhCDqsIDsp4DrqbAsIOu2hOyCsOydgCDsi5zsoJDsl5Ag7J2Y7KG07ZWY7KeAIOyViuuKlOuLpC4g65iQ7ZWcIOqzteu2hOyCsOydgCDri6jsp4Ag7Iuc7LCo7JeQ66eMIOydmOyhtO2VmOqzoCDtirnsoJUg7Iuc7KCQ7JeQIOydmOyhtO2VmOyngCDslYrripTri6QuIOydtOulvCDrp4zsobHtlZjrqbQg7KCV7IOB7ISx7J2EIOudiOuLpOqzoCDtlZzri6QuCgoKKioqCgojIyMg7J6Q6riw7ZqM6reA66qo7ZiVKEF1dG8gUmVncmVzc2l2ZSBtb2RlbCkKKyDsnbTsoITsnZgg6rCS7J20IOydtO2bhOydmCDqsJLsl5Ag7JiB7Zal7J2EIOuvuOy5mOqzoCDsnojripQg7IOB7Zmp7J2EIOqzoOugpO2VnCDrqqjtmJUuIOyLnOygkCB07JeQ7IScIOyWu+qyjCDrkKAg7Y+J6regIOqwkuydgCDsi5zsoJAgdC0x7JeQ7IScIOyWu+yXiOuNmCDtj4nqt6DqsJLsl5AgJFx2YXJwaGkk66W8IOqzse2VmOqzoCBj66W8IOuNlO2VnOqyg+qzvCDqsJnri6QuIAoKJFlfdD1cc3VtXHZhcnBoaSBfaSBZX3t0LWl9K1xlcHNpbG9uX3QkCgojIyMg7J2064+Z7Y+J6reg66qo7ZiVKE1vdmluZyBBdmVyYWdlIG1vZGVsKQrsi5zqsITsnbQg7KeA64Ko7JeQIOuUsOudvCDtj4nqt6DqsJLsnbQg7KeA7IaN7KCB7Jy866GcIOymneqwgO2VmOqxsOuCmCDqsJDshoztlZjripQg6rK97Zal7J2EIOqzoOugpO2VnCDrqqjtmJUuIOyghOuwmOyggSDstpTshLjrpbwg67O064qU642wIOycoOyaqe2VmOuLpC4KCiRZX3Q9ZV90LVx0aGV0YV8xZV97dC0xfS1cY2RvdHMtXHRoZXRhX3FlX3t0LXF9JAoKIyMjIOyVhOultOuniOuqqO2YlShBUk1BIG1vZGVsKSAK7J2064+Z7Y+J6reg6rO87KCV6rO8IOyekOq4sO2ajOq3gCDqs7zsoJXsnYQg7ZWp7ZWcIOuqqOyWkQoKJFlfdD1cc3VtXHZhcnBoaSBfaSBZX3t0LWl9ICtlX3QtXHRoZXRhXzFlX3t0LTF9LVxjZG90cy1cdGhldGFfcWVfe3QtcX0kCgojIyMg7LCo67aECgox7LCoIOywqOu2hCA6ICRcbmFibGEgIFlfdD1ZX3QtWV97dC0xfSQKMuywqCDssKjrtoQgOiAkXG5hYmxhXjJZX3Q9XG5hYmxhKFxuYWJsYSBZX3QpPVlfdC0yWV97dC0xfStZX3t0LTJ9JAoKIyMjIEFSSU1BKEF1dG9yZWdyZXNzaXZlIGludGVncmF0ZWQgbW92aW5nIGF2ZXJhZ2UpCuywqOu2hOydhCDtlZwg7J6Q66OM7JeQIOuMgO2VtCDslYTrpbTrp4jrqqjtmJXsnYQg7KCB7JqpCgokXG5hYmxhIFlfdCA9IFxzdW0gXHZhcnBoaV9pXG5hYmxhIFlfe3QtaX0rZV50LVxzdW0gXHRoZXRhX2llX3t0LWl9JAoKKioqCgrrtoTtlbTsi5zqs4Tsl7QgOiDsi5zqs4Tsl7Tsl5Ag7JiB7Zal7J2EIOyjvOuKlCDsnbzrsJjsoIEg7JqU7J247J2EIOu2hOumrO2VtCDrtoTshJ3tlZjripQg67Cp67KVCgogICAg7LaU7IS47JqU7J24IDog7J6Q66OM6rCAIOyWtOuWpCDtirnsoJXtlZwg7ZiV7YOc66W8IOy3qO2VoCDqsr3smrAg7LaU7IS47JqU7J247J20IOyeiOuLpOqzoCDtlZzri6QuIAogICAgZXgpIOydtOywqOyLneydmCDtmJXtg5wsIOyngOyImOyggSDtmJXtg5wg65OxCiAgICDqs4TsoIjsmpTsnbggOiDqs6DsoJXrkJwg7KO86riw7JeQIOuUsOudvCDsnpDro4zqsIAg67OA7ZmU7ZWgIOqyveyasCDqs4TsoIjsmpTsnbjsnbQg7J6I64uk6rOgIO2VnOuLpC4KICAgIGV4KSDsm5QsIOyCrOu2hOq4sCDrk7EKICAgIOyInO2ZmOyalOyduCA6IO2KueuzhO2VnCDsnbTsnKDsl4bsnbQg7JWM66Ck7KeA7KeAIOyViuydgCDso7zquLDrpbwg6rCA7KeA6rOgIOuzgO2ZlO2VmOuKlCDqsr3smrAg7Iic7ZmY7JqU7J247J20IOyeiOuLpOqzoCDtlZzri6QuCiAgICDrtojqt5zsuZnsmpTsnbggOiDshLgg6rCA7KeAIOyalOyduOycvOuhnCDshKTrqoXtlaAg7IiYIOyXhuuKlCDsmKTssKjsnZgg6rCc64WQ7J2YIOyalOyduAoKIyMjIGNvZGUKCmBgYHtyfQpsaWJyYXJ5KFRUUikKbGlicmFyeShmb3JlY2FzdCkKI+2VreqztSDsl6zqsJ0g642w7J207YSwCkFpclBhc3NlbmdlcnMKI+yekOujjOulvCDsi5zqs4Tsl7TsnpDro4zroZwg67OA7ZmYCmFwdHMgPC0gdHMoQWlyUGFzc2VuZ2VycywgZnJlcXVlbmN5ID0gMTIpCnBsb3QoYXB0cykKIyBBdXRvY292YXJpYW5jZSBmdWNudGlvbiAKYWNmKGFwdHMpCiMgcGFydGlhbCBhdXRvY292YXJpYW5jZSBmdWNudGlvbgpwYWNmKGFwdHMpCgoKYGBgCmBgYHtyfQoj7LWc7KCB7J2YIOyVhOumrOuniCDrqqjtmJUg7LaU7LKcCmF1dG8uYXJpbWEoQWlyUGFzc2VuZ2VycykKZml0PWFyaW1hKEFpclBhc3NlbmdlcnMsb3JkZXI9YygyLDEsMSksc2Vhc29uYWwgPSBsaXN0KG9yZGVyPWMoMCwxLDApLHBlcmlvZD0xMikpCmZpdC52YWx1ZXM9Zm9yZWNhc3QoZml0KQoj7JiI7Lih6rCSCmZpdC52YWx1ZXMKcGxvdChmaXQudmFsdWVzKQpgYGAKCgpgYGB7cn0KIyDrtoTtlbTsi5zqs4Tsl7QKZiA8LSBkZWNvbXBvc2UoYXB0cykKcGxvdChmKQoj7LaU7IS4IOyalOyduCDsoJzqsbAgCmYyPWFwdHMtZiR0cmVuZApwbG90KGYyKQphdXRvLmFyaW1hKGYyKQpmaXQ9YXJpbWEoZjIsb3JkZXI9YygxLDAsMCksc2Vhc29uYWwgPSBsaXN0KG9yZGVyPWMoMCwxLDApLHBlcmlvZD0xMikpCmZpdC52YWx1ZXM9Zm9yZWNhc3QoZml0KQpmaXQudmFsdWVzCnBsb3QoZml0LnZhbHVlcykKYGBgCgo=