R base cheatsheet.pdf

Object

函数 描述 说明
lobstr::obj_size(x) 对象所占内存空间的大小 (bytes) 由于列表储存的是指针而非数据,所以所占空间往往很小;字符串向量同理
tracemem() /untracemem() 开启/关闭对对象地址变动的追踪 对象被 copy 时,会自动打印一条说明
length(x) 对象的 size
is.*(x) 判断数据类型
as.*(x) 强制转换数据类型
typeof(x)/mode(x) 查看对象的数据类型 若对象为homogeneous data types,则返回元素的数据类型,如 integer, double, character, logical;若为异质性的列表或数据框,则返回 list
class(x) /unclass(x) 查看、去掉对象的类属性 返回 S3 对象的 class 属性
str(x) 对象的class、结构和概要信息
tibble::glimpse() tibble 版str(),不显示class,只显示数据
dim(x)[<-] 返回/重置对象的维度
nrow()/ncol() 返回行数/列数,适用于 matrix, array, data.frame
summary(x) 按列汇总对象的基本信息 对于因子,汇总取每一个水平的行数;对于数值向量,返回重要的分位数;对于其他类型的列,则显示列的长度、类型和模式
head(x, n) 列出对象的前n个元素,默认n为6
tail(x, n) 列出对象的后n个元素
df <- data.table(id = 1:10, lower = letters[1:10])

typeof(df)
#> [1] "list"
class(df)
#> [1] "data.table" "data.frame"
str(df)
#> Classes 'data.table' and 'data.frame':   10 obs. of  2 variables:
#>  $ id   : int  1 2 3 4 5 6 7 8 9 10
#>  $ lower: chr  "a" "b" "c" "d" ...
#>  - attr(*, ".internal.selfref")=<externalptr>
glimpse(df)
#> Rows: 10
#> Columns: 2
#> $ id    <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
#> $ lower <chr> "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"
df %>% summary()
#>        id           lower          
#>  Min.   : 1.00   Length:10         
#>  1st Qu.: 3.25   Class :character  
#>  Median : 5.50   Mode  :character  
#>  Mean   : 5.50                     
#>  3rd Qu.: 7.75                     
#>  Max.   :10.00

Logical

函数/运算符 描述 说明
& / magrittr::and() 向量化”与”
| / magrittr::or() 向量化”或”
! / magrittr::not() 向量化”非”
xor() 向量化”异或” 二者均为T或F,返回F;一为F一为T,返回T
&& 单值”与” 适合与 if 搭配
|| 单值”或” 适合与 if 搭配
any(x, na.rm = FALSE) 是否任一为真 逻辑向量 x 的任何一个(至少一个)元素是 TRUE,返回 TRUE; 没有 TRUE 且包含 NA,返回 NA;只包含 FALSE,返回 FLASE
all(x, na.rm = FALSE) 是否全为真 逻辑向量 x 的任何一个(至少一个)元素是 FLASE,返回 FLASE; 没有 FLASE 且包含 NA,返回 NA;只包含 TRUE,返回 TRUE
>, >=, <, <= 大于、大于等于、小于、小于等于
== (自动转换数据类型后的)值相等
identical(x, y) 严格相等 除了数值,数据类型也要一样
all.equal(a, b)/dplyr::near(a, b) 比较浮点数 a, b 之间是否相等 电脑运算浮点数有误差,所以比较浮点数是否相等时,不能使用==. all.equal()的可容忍误差是 1.5e-8
x %in% y / magrittr::is_in() 依次检查 x 向量中的元素是否包含于 y 返回一个与 x 长度相同的逻辑向量
is.na() 是否是 NA
is.null() 是否是 NULL
c(T, T) & c(T, F)
#> [1]  TRUE FALSE
c(T, T) | c(T, F)
#> [1] TRUE TRUE
!c(T, F)
#> [1] FALSE  TRUE
xor(c(T, T, F, F), c(T, F, T, F))
#> [1] FALSE  TRUE  TRUE FALSE
#' @title 检测递增递减
#' @description 只有x,y,z的对应元素全部递增,才会返回 1;
#'   全部递减,才会返回 -1;其他情况返回 0
test_all_direction <- function(x, y, z) {
  if (all(x < y & y < z)) {
    1
  } else if (all(x > y & y > z)) {
    -1
  } else {
    0
  }
}

any(c(TRUE, FALSE, NA))
#> [1] TRUE
any(c(FALSE, FALSE, NA))
#> [1] NA
any(c(FALSE, FALSE, NA), na.rm = TRUE)
#> [1] FALSE
any(c(FALSE, FALSE))
#> [1] FALSE
all(c(TRUE, FALSE, NA))
#> [1] FALSE
all(c(TRUE, TRUE, NA))
#> [1] NA
all(c(TRUE, TRUE, NA), na.rm = TRUE)
#> [1] TRUE
all(c(TRUE, TRUE))
#> [1] TRUE
1 == 1L
#> [1] TRUE
identical(1, 1L)
#> [1] FALSE
sin(pi) == 0
#> [1] FALSE
all.equal(sin(pi), 0)
#> [1] TRUE
c(1, 2, 5) %in% c(1, 2, 3, 4)
#> [1]  TRUE  TRUE FALSE

Index

函数 描述 说明
which(x) 返回 x 中值为 TRUE 的 index(忽略 NA) x 是一个 logical vector,返回值可能也是一个向量。
which.min(x)/which.max(x) 返回 x 中最小/最大值的 index
match(x, vector) 返回 x 在 vector 中第一次匹配的位置 以上几个函数,若 x 为矩阵,则会将其视为按列展开的向量,返回的是复合条件的元素在向量中的 index
rank(x) 返回各元素在 x 所有元素中(从小到大)的次序
order(x) 按照递增/递减的次序重排列x后,新序列各元素在原序列x中的位置

从而保证 x[order(x)] 为x中元素递增、递减的重排列,使 x[order(x)] 等价于 sort(x)

order()也可用于对一个对象的行或列进行排序

x <- c(-2, -1, 2, 1)
abs(x) >= 1.5
#> [1]  TRUE FALSE  TRUE FALSE
which(abs(x) >= 1.5)
#> [1] 1 3
x <- c(-2, -3, NA, 2, 3, 1, NA, 0, 1, NA, 2)
x >= 0
#>  [1] FALSE FALSE    NA  TRUE  TRUE  TRUE    NA  TRUE  TRUE    NA  TRUE
x[x >= 0] # 选择器使用 condition,会保留 NA 项
#> [1] NA  2  3  1 NA  0  1 NA  2
which(x >= 0)
#> [1]  4  5  6  8  9 11
x[which(x >= 0)] # 选择器使用 index,不保留 NA 项
#> [1] 2 3 1 0 1 2
match('e', letters)
#> [1] 5
rank(c(1, 3, 2, 4))
#> [1] 1 3 2 4

Set

单个向量

  • unique(x), 提取不重复元素
  • duplicated(x), 返回逻辑向量,非重复元素(首次出现)返回 FALSE,重复元素(之前出现过)返回 TRUE

两个向量的集合运算

  • intersect(),交集
  • setdiff(),集合的差,只保留第一个向量含有、第二个向量不含的元素
  • union(),并集,保留所有元素,但重复的只保留一次
  • setequal(),检测两个向量所含的元素是否完全相同(不考虑顺序,像集合一样)

Math

函数/运算符 描述 说明
基础数学
+, -, *, /, %/%(除法取整), %%(除法取余) 四则运算 数学函数皆支持向量化运算
^ \(10^k\) 可以用表达式 10^k,也可以直接写为 1ek1Ek,计算机可以识别
log()/log10()/log2() 对数 参数为负数时,返回 NaN
exp() 以自然对数 \(e\) 为底的指数函数 常用 exp(1) 引入自然对数 \(e\)
sqrt() 平方根 参数为负数时,返回 NaN
abs() 绝对值
factorial() 阶乘
sign() 符号 正数返回1,0返回0,负数返回-1
is.finite()/is.infinite() 是否有限/无穷大
sin()/cos()/tan()/asin()/acos()/atan()/atan2() 三角函数
sinpi(x)/cospi(x)/tanpi(x) 精确计算浮点数的三角函数 相应三角函数的真实参数是 \(\pi\) 倍的x
sinh()/cosh()/tanh()/asinh()/acosh()/atanh() 双曲函数
pi 圆周率
取整
ceiling(x) 不小于x的最小整数
floor(x) 不大于x的最大整数
trunc(x) 向0的方向截取的x中的整数部分
round(x,n) 保留n位小数,四舍五入
signif(x,n) 保留n位有效数字
sprintf(fmt, ...) C-style String Formatting
最值
range() 极值两端 用最小值和最大值返回一个长度为2的向量
max()/min() 最大/小值

na.rm=TRUE这个参数可以去掉所有的缺失值

如果参数为多个向量,返回其中所有元素的最值

pmax()/pmin() 平行最大/小值 如果参数为多个向量,返回相应位置的最大/小值(也是一个向量)
(累计)和/积
sum(x)/prod(x) 向量和/积 返回一个标量
cumsum(x)/cumprod(x) 返回累计和/积序列

返回一个向量

由新增求累计,非常好用的函数

dplyr::cummean(vector) 返回累计和的均值序列
排列组合
combn(x, k) 一个向量x中k个元素的所有组合 返回 matrix
expand.grid(var1 = x1, var2 = x2) /tidyr::crossing() 两个向量对应元素的所有排列,返回 data.frame 两个函数的用法几乎完全相同
进制转换
as.octmode(), as.hexmode() 将十进制数值转换为八进制、十六进制 接受整数,返回字符串
strtoi(x, base = kL) 将k进制的字符串转换为十进制整数 接受字符串,返回整数
5 %% c(1, 2, 3, 4, 5)
#> [1] 0 1 2 1 0
sign(-2:3)
#> [1] -1 -1  0  1  1  1
1 / 0
#> [1] Inf
is.finite(1 / 0)
#> [1] FALSE
log(0)
#> [1] -Inf
is.infinite(log(0))
#> [1] TRUE
#' @title 判断是否正无穷
#' @param x 可以为向量
is_pos_infinite <- function(x) {
  is.infinite(x) & x > 0
}

#' @title 判断是否负无穷
#' @param x 可以为向量
is_neg_infinite <- function(x) {
  is.infinite(x) & x < 0
}

is_pos_infinite(1 / 0)
#> [1] TRUE
is_neg_infinite(log(0))
#> [1] TRUE
sinpi(1)
#> [1] 0
cospi(0)
#> [1] 1
tanpi(1)
#> [1] 0
round(pi, 3)
#> [1] 3.142
signif(pi, 3)
#> [1] 3.14
sprintf("%f", pi)
#> [1] "3.141593"
sprintf("%.3f", pi)
#> [1] "3.142"
sprintf("%1.0f", pi)
#> [1] "3"
sprintf("%5.1f", pi)
#> [1] "  3.1"
sprintf("%05.1f", pi)
#> [1] "003.1"
sprintf("%+f", pi)
#> [1] "+3.141593"
sprintf("% f", pi)
#> [1] " 3.141593"
sprintf("%-10f", pi) # left justified
#> [1] "3.141593  "
sprintf("%e", pi)
#> [1] "3.141593e+00"
sprintf("%E", pi)
#> [1] "3.141593E+00"
sprintf("%g", pi)
#> [1] "3.14159"
sprintf("%g", 1e6 * pi) # -> exponential
#> [1] "3.14159e+06"
sprintf("%.9g", 1e6 * pi) # -> "fixed"
#> [1] "3141592.65"
sprintf("%G", 1e-6 * pi)
#> [1] "3.14159E-06"
max(
  c(1, 2, 3),
  c(2, 1, 2),
  c(1, 3, 4)
)
#> [1] 4
pmax(
  c(1, 2, 3),
  c(2, 1, 2),
  c(1, 3, 4)
)
#> [1] 2 3 4
#' @title 向量化分段函数
#' @description 若输入值小于−5,则取值为−5;
#'   若输入值介于−5~5 之间,则取值就是输入值;
#'   若输入值大于 5,则取值为 5
spread <- function(x) {
  pmin(5, pmax(-5, x))
}
spread(seq(-8, 8))
#>  [1] -5 -5 -5 -5 -4 -3 -2 -1  0  1  2  3  4  5  5  5  5
# 用 ifelse() 的等价写法
spread2 <- function(x) {
  ifelse(x < -5, -5, ifelse(x > 5, 5, x))
}
spread2(seq(-8, 8))
#>  [1] -5 -5 -5 -5 -4 -3 -2 -1  0  1  2  3  4  5  5  5  5
cumsum(1:10)
#>  [1]  1  3  6 10 15 21 28 36 45 55
cumprod(1:10)
#>  [1]       1       2       6      24     120     720    5040   40320  362880
#> [10] 3628800
dplyr::cummean(1:10)
#>  [1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5
combn(letters[1:4], 2)
#>      [,1] [,2] [,3] [,4] [,5] [,6]
#> [1,] "a"  "a"  "a"  "b"  "b"  "c" 
#> [2,] "b"  "c"  "d"  "c"  "d"  "d"
expand.grid(n = c(1, 2, 3), x = c("a", "b"))
#>   n x
#> 1 1 a
#> 2 2 a
#> 3 3 a
#> 4 1 b
#> 5 2 b
#> 6 3 b
# 进制转换
as.octmode(255)
#> [1] "377"
as.hexmode(255)
#> [1] "ff"
strtoi(c("0xff", "077", "123")) # 通过前缀自动识别进制
#> [1] 255  63 123
strtoi(c("ffff", "FFFF"), 16L)
#> [1] 65535 65535
strtoi(c("177", "377"), 8L)
#> [1] 127 255

Numeric

函数 描述 说明
polyroot() 解多项式方程 参数为从常数项到最高阶项的系数向量
Re() 提取复数的实数部分
uniroot(f, interval) 任意一元方程求根

求方程 \(f(x)=0\) 的近似解,返回的列表包含了近似解、近似解处的函数值、迭代次数、根的估计精度等信息

限定 interval,使区间内只有一个解,因为该函数不会智能地列出所有解

D(quote(原函数), "自变量") 求原函数的(偏)导函数 返回一个未被执行的表达式
eval(导函数表达式, list(自变量的值)) 导函数在某点的值
integrate(f, lower,upper) 定积分的数值计算
optimise(f, interval, ..., maximum = FALSE) 极值点横坐标

计算 f(x) 在区间 interval 上最低(或最高)点的位置

uniroot()一样,要限定 interval,使区间内只有一个极值,因为该函数不会智能地列出所有极值

polyroot(c(-2, 1, 1)) # 求 -2 + x + x^2 = 0 的解
#> [1]  1-0i -2+0i
Re(polyroot(c(-2, 1, 1))) # 提取实数部分
#> [1]  1 -2
polyroot(c(1, 0, 1)) # 求 1 + x^2 = 0 的根
#> [1] 0+1i 0-1i
## 求 e^x - 3 * e^(-x^2 + x) + 1 = 0 在 [-2, 2] 上的解
calY <- function(x) {
  exp(x) - 3 * exp(-x^2 + x) + 1
}
x <- seq(-2, 2, by = 0.001)
y <- calY(x)
plot(x, y) # 观察图形发现两个解的大概位置

uniroot(calY, c(-1, 0)) # 在单调区间内分别求解
#> $root
#> [1] -0.4180457
#> 
#> $f.root
#> [1] 1.335516e-05
#> 
#> $iter
#> [1] 5
#> 
#> $init.it
#> [1] NA
#> 
#> $estim.prec
#> [1] 6.103516e-05
uniroot(calY, c(0, 2))
#> $root
#> [1] 0.8643009
#> 
#> $f.root
#> [1] 2.703399e-05
#> 
#> $iter
#> [1] 7
#> 
#> $init.it
#> [1] NA
#> 
#> $estim.prec
#> [1] 6.103516e-05
uniroot(calY, c(-2, 2)) %>% try() # 如果区间包含了两个以上的解,会报错
#> Error in uniroot(calY, c(-2, 2)) : 
#>   f() values at end points not of opposite sign
## 求导
z <- D(quote(sin(x) * cos(x * y)), "x") # 对 x 的偏导函数
z # 导函数
#> cos(x) * cos(x * y) - sin(x) * (sin(x * y) * y)
eval(z, list(x = 1, y = 2))
#> [1] -1.75514
## 定积分
result <- integrate(dnorm, -1.96, 1.96)
result
#> 0.9500042 with absolute error < 1e-11
str(result)
#> List of 5
#>  $ value       : num 0.95
#>  $ abs.error   : num 1.05e-11
#>  $ subdivisions: int 1
#>  $ message     : chr "OK"
#>  $ call        : language integrate(f = dnorm, lower = -1.96, upper = 1.96)
#>  - attr(*, "class")= chr "integrate"
integrate(dnorm, -Inf, Inf)
#> 1 with absolute error < 9.4e-05
## 最优化
optimise(sin, c(0, 2 * pi)) # 极小值在 1.5*pi 处
#> $minimum
#> [1] 4.712391
#> 
#> $objective
#> [1] -1
optimise(sin, c(0, 2 * pi), maximum = TRUE) # 极大值在 pi/2 处
#> $maximum
#> [1] 1.570794
#> 
#> $objective
#> [1] 1

Statistical

函数 描述 说明
Data Transformation
cut(x, breaks, labels = NULL, right = TRUE, …) 将连续数据按数值分段 x 为待分段数据,breaks 为几个区间的边界,labels 为各段的标签. 默认各区间左开右闭,令 right=FALSE 则左闭右开。
scale(x, center = TRUE, scale = TRUE) 标准化

默认状态下,进行均值为0、标准差为1的标准化。

x可以是一个列向量,也可以是整个矩阵/数据框。此时 x 按列分别操作。

描述统计
summary(x) 显示对象的统计概要 显示连续型变量的最小值、最大值、均值和四分位数 显示类别型变量的频数值。
table(x) 统计每个元素的出现频数

若 x 为多个向量,则返回列联表;

table(x)[x] 可返回等长向量,表示向量中每个元素对应的频数

mean()/median()/var()/sd() 平均值/中位数/方差/标准差

参数 trim 的取值在 0(0%) 到 0.5(50%) 之间,表示去掉最大的最小的 trim 比例的数据(认为是异常值),剩下的求平均

如果参数的 size 为偶数,mean() 会返回最中间两个数的平均值

cov(x, y)/cor(x, y) 协方差/相关系数(correlation) 接收一个数据框或矩阵时,返回每两列之间的协方差/相关系数矩阵
mad(x) 绝对中位差(median absolute deviation)
quantile(x, probs) 分位数 x 为待求分位数的数值型向量,probs 为一个由[0,1]之间的概率值组成的数值向量
fivenum() 返回最小值、25百分位数、 中位数、75百分位数、最大值
抽样与模拟
sample(vector, size, replace = F, prob) 抽样

replace 默认为 FALSE,不放回抽样

prob为抽样概率权重向量

replicate(n, expr) 重复运行 对第二个参数的表达式重复运行 n 次,返回向量。常用于产生一个样本
随机数

rnorm(n, mean = 0, sd = 1)

runif(n, min = 0, max = 1)

分布相关函数

函数名为”前缀+具体分布”的形式,如runif()可以生成均匀分布随机数,dnorm()为正态密度函数。

前缀包括:d = 密度函数(density);p = 累计分布函数(cumulative distribution function);q = 分位数函数(quantile function);r = 随机数生成器

具体分布:unif = 均匀分布;norm = 正态分布;pois = 泊松分布;binom = 二项分布。可以通过?Distributions 查询

set.seed() 设定随机数种子
MASS::mvrnorm(n, mean, sigma) 生成多元正态数据

n 为样本大小,mean 为均值向量,sigma 是方差-协方差矩阵

该函数返回一个矩阵

推断统计
lm(y~x, data = df) 线性回归模型
glm(y~x, data = df) 广义线性模型
stats4::mle() 极大似然估计模型 Maximum Likelihood Estimation, MLE
summary(model) 输出模型的更多细节
t.test(x, y) 两个向量均值的t检验
pairwise.t.test 成对数据的t检验
prop.test test for a difference between proportions
aov 方差分析
age <- c(55, 12, 30, 9, 22, 24, 78, 109, 45, 66, 49)
cut(age, breaks = c(-Inf, 12, 30, 60, Inf), labels = c("小孩", "青年", "中年", "老年"))
#>  [1] 中年 小孩 青年 小孩 青年 青年 老年 老年 中年 老年 中年
#> Levels: 小孩 青年 中年 老年
x <- rnorm(50)
y <- 2 * x + 0.5 * rnorm(length(x))
z <- runif(length(x))
m1 <- cbind(x, y, z)
cor(m1)
#>            x          y          z
#> x  1.0000000  0.9700979 -0.1382418
#> y  0.9700979  1.0000000 -0.1253764
#> z -0.1382418 -0.1253764  1.0000000
LS0tDQp0aXRsZTogIkZyZXF1ZW50bHktVXNlZCBGdW5jdGlvbnMiDQpzdWJ0aXRsZTogIiINCmF1dGhvcjogIkh1bW9vbiINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDogaHRtbF9kb2N1bWVudA0KIyBkb2N1bWVudGNsYXNzOiBjdGV4YXJ0DQojIGNsYXNzb3B0aW9uOiBoeXBlcnJlZiwNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0Kc291cmNlKCIuLi9SbWFya2Rvd24tdGVtcGxhdGUvUm1hcmtkb3duX2NvbmZpZy5SIikNCg0KIyMgZ2xvYmFsIG9wdGlvbnMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgd2lkdGggPSBjb25maWckd2lkdGgsDQogIGZpZy53aWR0aCA9IGNvbmZpZyRmaWcud2lkdGgsDQogIGZpZy5hc3AgPSBjb25maWckZmlnLmFzcCwNCiAgb3V0LndpZHRoID0gY29uZmlnJG91dC53aWR0aCwNCiAgZmlnLmFsaWduID0gY29uZmlnJGZpZy5hbGlnbiwNCiAgZmlnLnBhdGggPSBjb25maWckZmlnLnBhdGgsDQogIGZpZy5zaG93ID0gY29uZmlnJGZpZy5zaG93LA0KICB3YXJuID0gY29uZmlnJHdhcm4sDQogIHdhcm5pbmcgPSBjb25maWckd2FybmluZywNCiAgbWVzc2FnZSA9IGNvbmZpZyRtZXNzYWdlLA0KICBlY2hvID0gY29uZmlnJGVjaG8sDQogIGV2YWwgPSBjb25maWckZXZhbCwNCiAgdGlkeSA9IGNvbmZpZyR0aWR5LA0KICBjb21tZW50ID0gY29uZmlnJGNvbW1lbnQsDQogIGNvbGxhcHNlID0gY29uZmlnJGNvbGxhcHNlLA0KICBjYWNoZSA9IGNvbmZpZyRjYWNoZSwNCiAgY2FjaGUuY29tbWVudHMgPSBjb25maWckY2FjaGUuY29tbWVudHMsDQogIGF1dG9kZXAgPSBjb25maWckYXV0b2RlcA0KKQ0KYGBgDQoNCjxhIGhyZWY9Ii4uL3BkZi9jaGVhdHNoZWV0LWJhc2Utci5wZGYiPipSIGJhc2UgY2hlYXRzaGVldC5wZGYqPC9hPg0KDQo8b2JqZWN0IGRhdGE9Ii4uL3BkZi9jaGVhdHNoZWV0LWJhc2Utci5wZGYiIHR5cGU9ImFwcGxpY2F0aW9uL3BkZiIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSI+DQoNCjwvb2JqZWN0Pg0KDQojIyBPYmplY3QNCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IOWHveaVsCAgICAgICAgICAgICAgICAgICAgICAgICB8IOaPj+i/sCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDor7TmmI4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCBgbG9ic3RyOjpvYmpfc2l6ZSh4KWAgICAgICAgIHwg5a+56LGh5omA5Y2g5YaF5a2Y56m66Ze055qE5aSn5bCPIChieXRlcykgICAgICAgICAgICAgICAgICB8IOeUseS6juWIl+ihqOWCqOWtmOeahOaYr+aMh+mSiOiAjOmdnuaVsOaNru+8jOaJgOS7peaJgOWNoOepuumXtOW+gOW+gOW+iOWwj++8m+Wtl+espuS4suWQkemHj+WQjOeQhiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgdHJhY2VtZW0oKWAgL2B1bnRyYWNlbWVtKClgIHwg5byA5ZCvL+WFs+mXreWvueWvueixoeWcsOWdgOWPmOWKqOeahOi/vei4qiAgICAgICAgICAgICAgICAgICB8IOWvueixoeiiqyBjb3B5IOaXtu+8jOS8muiHquWKqOaJk+WNsOS4gOadoeivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBsZW5ndGgoeClgICAgICAgICAgICAgICAgICAgfCDlr7nosaHnmoQgc2l6ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgaXMuKih4KWAgICAgICAgICAgICAgICAgICAgIHwg5Yik5pat5pWw5o2u57G75Z6LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFzLiooeClgICAgICAgICAgICAgICAgICAgICB8IOW8uuWItui9rOaNouaVsOaNruexu+WeiyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHR5cGVvZih4KS9tb2RlKHgpYCAgICAgICAgICB8IOafpeeci+WvueixoeeahOaVsOaNruexu+WeiyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg6Iul5a+56LGh5Li6aG9tb2dlbmVvdXMgZGF0YSB0eXBlc++8jOWImei/lOWbnuWFg+e0oOeahOaVsOaNruexu+Wei++8jOWmgiBpbnRlZ2VyLCBkb3VibGUsIGNoYXJhY3RlciwgbG9naWNhbO+8m+iLpeS4uuW8gui0qOaAp+eahOWIl+ihqOaIluaVsOaNruahhu+8jOWImei/lOWbniBsaXN0IHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgY2xhc3MoeClgIC9gdW5jbGFzcyh4KWAgICAgIHwg5p+l55yL44CB5Y675o6J5a+56LGh55qE57G75bGe5oCnICAgICAgICAgICAgICAgICAgICAgICAgICB8IOi/lOWbniBTMyDlr7nosaHnmoQgY2xhc3Mg5bGe5oCnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHN0cih4KWAgICAgICAgICAgICAgICAgICAgICB8IOWvueixoeeahGNsYXNz44CB57uT5p6E5ZKM5qaC6KaB5L+h5oGvICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHRpYmJsZTo6Z2xpbXBzZSgpYCAgICAgICAgICB8IHRpYmJsZSDniYhgc3RyKClg77yM5LiN5pi+56S6Y2xhc3PvvIzlj6rmmL7npLrmlbDmja4gICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGRpbSh4KVs8LV1gICAgICAgICAgICAgICAgICB8IOi/lOWbni/ph43nva7lr7nosaHnmoTnu7TluqYgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBucm93KClgL2BuY29sKClgICAgICAgICAgICAgfCDov5Tlm57ooYzmlbAv5YiX5pWw77yM6YCC55So5LqOIG1hdHJpeCwgYXJyYXksIGRhdGEuZnJhbWUgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHN1bW1hcnkoeClgICAgICAgICAgICAgICAgICB8IOaMieWIl+axh+aAu+WvueixoeeahOWfuuacrOS/oeaBryAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlr7nkuo7lm6DlrZDvvIzmsYfmgLvlj5bmr4/kuIDkuKrmsLTlubPnmoTooYzmlbDvvJvlr7nkuo7mlbDlgLzlkJHph4/vvIzov5Tlm57ph43opoHnmoTliIbkvY3mlbDvvJvlr7nkuo7lhbbku5bnsbvlnovnmoTliJfvvIzliJnmmL7npLrliJfnmoTplb/luqbjgIHnsbvlnovlkozmqKHlvI8gICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBoZWFkKHgsIG4pYCAgICAgICAgICAgICAgICAgfCDliJflh7rlr7nosaHnmoTliY1u5Liq5YWD57Sg77yM6buY6K6kbuS4ujYgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHRhaWwoeCwgbilgICAgICAgICAgICAgICAgICB8IOWIl+WHuuWvueixoeeahOWQjm7kuKrlhYPntKAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCmBgYHtyfQ0KZGYgPC0gZGF0YS50YWJsZShpZCA9IDE6MTAsIGxvd2VyID0gbGV0dGVyc1sxOjEwXSkNCg0KdHlwZW9mKGRmKQ0KY2xhc3MoZGYpDQpzdHIoZGYpDQpnbGltcHNlKGRmKQ0KDQpkZiAlPiUgc3VtbWFyeSgpDQpgYGANCg0KIyMgTG9naWNhbA0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwg5Ye95pWwL+i/kOeul+espiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5o+P6L+wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8IGAmYCAvIGBtYWdyaXR0cjo6YW5kKClgICAgICAgICAgICAgICAgfCDlkJHph4/ljJYi5LiOIiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHxgIC8gYG1hZ3JpdHRyOjpvcigpYCAgICAgICAgICAgICAgICB8IOWQkemHj+WMliLmiJYiICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgIWAgLyBgbWFncml0dHI6Om5vdCgpYCAgICAgICAgICAgICAgIHwg5ZCR6YeP5YyWIumdniIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB4b3IoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlkJHph4/ljJYi5byC5oiWIiAgICAgICAgICAgICAgICAgICAgICAgIHwg5LqM6ICF5Z2H5Li6VOaIlkbvvIzov5Tlm55G77yb5LiA5Li6RuS4gOS4ulTvvIzov5Tlm55UICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgJiZgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Y2V5YC8IuS4jiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDpgILlkIjkuI4gaWYg5pCt6YWNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgfHxgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Y2V5YC8IuaIliIgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDpgILlkIjkuI4gaWYg5pCt6YWNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgYW55KHgsIG5hLnJtID0gRkFMU0UpYCAgICAgICAgICAgICAgIHwg5piv5ZCm5Lu75LiA5Li655yfICAgICAgICAgICAgICAgICAgICAgICAgfCDpgLvovpHlkJHph48geCDnmoTku7vkvZXkuIDkuKrvvIjoh7PlsJHkuIDkuKrvvInlhYPntKDmmK8gVFJVRe+8jOi/lOWbniBUUlVF77ybIOayoeaciSBUUlVFIOS4lOWMheWQqyBOQe+8jOi/lOWbniBOQe+8m+WPquWMheWQqyBGQUxTRe+8jOi/lOWbniBGTEFTRSAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBhbGwoeCwgbmEucm0gPSBGQUxTRSlgICAgICAgICAgICAgICAgfCDmmK/lkKblhajkuLrnnJ8gICAgICAgICAgICAgICAgICAgICAgICAgIHwg6YC76L6R5ZCR6YePIHgg55qE5Lu75L2V5LiA5Liq77yI6Iez5bCR5LiA5Liq77yJ5YWD57Sg5pivIEZMQVNF77yM6L+U5ZueIEZMQVNF77ybIOayoeaciSBGTEFTRSDkuJTljIXlkKsgTkHvvIzov5Tlm54gTkHvvJvlj6rljIXlkKsgVFJVRe+8jOi/lOWbniBUUlVFIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgPmAsIGA+PWAsIGA8YCwgYDw9YCAgICAgICAgICAgICAgICAgIHwg5aSn5LqO44CB5aSn5LqO562J5LqO44CB5bCP5LqO44CB5bCP5LqO562J5LqOICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYD09YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IO+8iOiHquWKqOi9rOaNouaVsOaNruexu+Wei+WQjueahO+8ieWAvOebuOetiSAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBpZGVudGljYWwoeCwgeSlgICAgICAgICAgICAgICAgICAgICAgfCDkuKXmoLznm7jnrYkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDpmaTkuobmlbDlgLzvvIzmlbDmja7nsbvlnovkuZ/opoHkuIDmoLcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBhbGwuZXF1YWwoYSwgYilgL2BkcGx5cjo6bmVhcihhLCBiKWAgfCDmr5TovoPmta7ngrnmlbAgYSwgYiDkuYvpl7TmmK/lkKbnm7jnrYkgICAgICAgIHwg55S16ISR6L+Q566X5rWu54K55pWw5pyJ6K+v5beu77yM5omA5Lul5q+U6L6D5rWu54K55pWw5piv5ZCm55u4562J5pe277yM5LiN6IO95L2/55SoYD09YC4gYGFsbC5lcXVhbCgpYOeahOWPr+WuueW/jeivr+W3ruaYryAxLjVlLTggICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHggJWluJSB5YCAvIGBtYWdyaXR0cjo6aXNfaW4oKWAgICAgICB8IOS+neasoeajgOafpSB4IOWQkemHj+S4reeahOWFg+e0oOaYr+WQpuWMheWQq+S6jiB5IHwg6L+U5Zue5LiA5LiqKirkuI4geCDplb/luqbnm7jlkIwqKueahOmAu+i+keWQkemHjyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGlzLm5hKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaYr+WQpuaYryBOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBpcy5udWxsKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmmK/lkKbmmK8gTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KDQpgYGB7cn0NCmMoVCwgVCkgJiBjKFQsIEYpDQpjKFQsIFQpIHwgYyhULCBGKQ0KIWMoVCwgRikNCnhvcihjKFQsIFQsIEYsIEYpLCBjKFQsIEYsIFQsIEYpKQ0KDQojJyBAdGl0bGUg5qOA5rWL6YCS5aKe6YCS5YePDQojJyBAZGVzY3JpcHRpb24g5Y+q5pyJeCx5LHrnmoTlr7nlupTlhYPntKDlhajpg6jpgJLlop7vvIzmiY3kvJrov5Tlm54gMe+8mw0KIycgICDlhajpg6jpgJLlh4/vvIzmiY3kvJrov5Tlm54gLTHvvJvlhbbku5bmg4XlhrXov5Tlm54gMA0KdGVzdF9hbGxfZGlyZWN0aW9uIDwtIGZ1bmN0aW9uKHgsIHksIHopIHsNCiAgaWYgKGFsbCh4IDwgeSAmIHkgPCB6KSkgew0KICAgIDENCiAgfSBlbHNlIGlmIChhbGwoeCA+IHkgJiB5ID4geikpIHsNCiAgICAtMQ0KICB9IGVsc2Ugew0KICAgIDANCiAgfQ0KfQ0KDQphbnkoYyhUUlVFLCBGQUxTRSwgTkEpKQ0KYW55KGMoRkFMU0UsIEZBTFNFLCBOQSkpDQphbnkoYyhGQUxTRSwgRkFMU0UsIE5BKSwgbmEucm0gPSBUUlVFKQ0KYW55KGMoRkFMU0UsIEZBTFNFKSkNCg0KYWxsKGMoVFJVRSwgRkFMU0UsIE5BKSkNCmFsbChjKFRSVUUsIFRSVUUsIE5BKSkNCmFsbChjKFRSVUUsIFRSVUUsIE5BKSwgbmEucm0gPSBUUlVFKQ0KYWxsKGMoVFJVRSwgVFJVRSkpDQoNCjEgPT0gMUwNCmlkZW50aWNhbCgxLCAxTCkNCg0Kc2luKHBpKSA9PSAwDQphbGwuZXF1YWwoc2luKHBpKSwgMCkNCg0KYygxLCAyLCA1KSAlaW4lIGMoMSwgMiwgMywgNCkNCmBgYA0KDQojIyBJbmRleA0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwg5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaPj+i/sCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDor7TmmI4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8IGB3aGljaCh4KWAgICAgICAgICAgICAgICAgICAgIHwg6L+U5ZueIHgg5Lit5YC85Li6IFRSVUUg55qEIGluZGV477yI5b+955WlIE5B77yJICAgICAgICAgICAgICAgICAgICAgIHwgeCDmmK/kuIDkuKogbG9naWNhbCB2ZWN0b3LvvIzov5Tlm57lgLzlj6/og73kuZ/mmK/kuIDkuKrlkJHph4/jgIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGB3aGljaC5taW4oeClgL2B3aGljaC5tYXgoeClgIHwg6L+U5ZueIHgg5Lit5pyA5bCPL+acgOWkp+WAvOeahCBpbmRleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgbWF0Y2goeCwgdmVjdG9yKWAgICAgICAgICAgICB8IOi/lOWbniB4IOWcqCB2ZWN0b3Ig5Lit56ys5LiA5qyh5Yy56YWN55qE5L2N572uICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Lul5LiK5Yeg5Liq5Ye95pWw77yMKiroi6UgeCDkuLrnn6npmLXvvIzliJnkvJrlsIblhbbop4bkuLrmjInliJflsZXlvIDnmoTlkJHph48qKu+8jOi/lOWbnueahOaYr+WkjeWQiOadoeS7tueahOWFg+e0oOWcqOWQkemHj+S4reeahCBpbmRleCB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHJhbmsoeClgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57lkITlhYPntKDlnKggeCDmiYDmnInlhYPntKDkuK3vvIjku47lsI/liLDlpKfvvInnmoTmrKHluo8gICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYG9yZGVyKHgpYCAgICAgICAgICAgICAgICAgICAgfCDmjInnhafpgJLlop4v6YCS5YeP55qE5qyh5bqP6YeN5o6S5YiXeOWQju+8jOaWsOW6j+WIl+WQhOWFg+e0oOWcqOWOn+W6j+WIl3jkuK3nmoTkvY3nva4gfCDku47ogIzkv53or4EgYHhbb3JkZXIoeCldYCDkuLp45Lit5YWD57Sg6YCS5aKe44CB6YCS5YeP55qE6YeN5o6S5YiX77yM5L2/IGB4W29yZGVyKHgpXWAg562J5Lu35LqOIGBzb3J0KHgpYCAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBvcmRlcigpYOS5n+WPr+eUqOS6juWvueS4gOS4quWvueixoeeahOihjOaIluWIl+i/m+ihjOaOkuW6jyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KYGBge3J9DQp4IDwtIGMoLTIsIC0xLCAyLCAxKQ0KYWJzKHgpID49IDEuNQ0Kd2hpY2goYWJzKHgpID49IDEuNSkNCg0KeCA8LSBjKC0yLCAtMywgTkEsIDIsIDMsIDEsIE5BLCAwLCAxLCBOQSwgMikNCnggPj0gMA0KeFt4ID49IDBdICMg6YCJ5oup5Zmo5L2/55SoIGNvbmRpdGlvbu+8jOS8muS/neeVmSBOQSDpobkNCndoaWNoKHggPj0gMCkNCnhbd2hpY2goeCA+PSAwKV0gIyDpgInmi6nlmajkvb/nlKggaW5kZXjvvIzkuI3kv53nlZkgTkEg6aG5DQoNCm1hdGNoKCdlJywgbGV0dGVycykNCg0KcmFuayhjKDEsIDMsIDIsIDQpKQ0KYGBgDQoNCiMjIFNldA0KDQojIyMg5Y2V5Liq5ZCR6YePDQoNCi0gICBgdW5pcXVlKHgpYCwg5o+Q5Y+W5LiN6YeN5aSN5YWD57SgDQotICAgYGR1cGxpY2F0ZWQoeClgLCDov5Tlm57pgLvovpHlkJHph4/vvIzpnZ7ph43lpI3lhYPntKDvvIjpppbmrKHlh7rnjrDvvInov5Tlm54gRkFMU0XvvIzph43lpI3lhYPntKDvvIjkuYvliY3lh7rnjrDov4fvvInov5Tlm54gVFJVRQ0KDQojIyMg5Lik5Liq5ZCR6YeP55qE6ZuG5ZCI6L+Q566XDQoNCi0gICBgaW50ZXJzZWN0KClg77yM5Lqk6ZuGDQotICAgYHNldGRpZmYoKWDvvIzpm4blkIjnmoTlt67vvIzlj6rkv53nlZnnrKzkuIDkuKrlkJHph4/lkKvmnInjgIHnrKzkuozkuKrlkJHph4/kuI3lkKvnmoTlhYPntKANCi0gICBgdW5pb24oKWDvvIzlubbpm4bvvIzkv53nlZnmiYDmnInlhYPntKDvvIzkvYbph43lpI3nmoTlj6rkv53nlZnkuIDmrKENCi0gICBgc2V0ZXF1YWwoKWDvvIzmo4DmtYvkuKTkuKrlkJHph4/miYDlkKvnmoTlhYPntKDmmK/lkKblrozlhajnm7jlkIzvvIjkuI3ogIPomZHpobrluo/vvIzlg4/pm4blkIjkuIDmoLfvvIkNCg0KIyMgTWF0aA0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgKirlh73mlbAv6L+Q566X56ymKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDor7TmmI4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8ICoq5Z+656GA5pWw5a2mKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYCtgLCBgLWAsIGAqYCwgYC9gLCBgJS8lYO+8iOmZpOazleWPluaVtO+8iSwgYCUlYO+8iOmZpOazleWPluS9me+8iSAgICAgIHwg5Zub5YiZ6L+Q566XICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmlbDlrablh73mlbDnmobmlK/mjIHlkJHph4/ljJbov5DnrpcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgXmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDluYIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICQxMF5rJCDlj6/ku6XnlKjooajovr7lvI8gYDEwXmtg77yM5Lmf5Y+v5Lul55u05o6l5YaZ5Li6IGAxZWtgIOaIliBgMUVrYO+8jOiuoeeul+acuuWPr+S7peivhuWIqyB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGxvZygpYC9gbG9nMTAoKWAvYGxvZzIoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5a+55pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Y+C5pWw5Li66LSf5pWw5pe277yM6L+U5ZueIE5hTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGV4cCgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Lul6Ieq54S25a+55pWwICRlJCDkuLrlupXnmoTmjIfmlbDlh73mlbAgICAgICAgICAgICAgICB8IOW4uOeUqCBgZXhwKDEpYCDlvJXlhaXoh6rnhLblr7nmlbAgJGUkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHNxcnQoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5bmz5pa55qC5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWPguaVsOS4uui0n+aVsOaXtu+8jOi/lOWbniBOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBhYnMoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOe7neWvueWAvCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgZmFjdG9yaWFsKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDpmLbkuZggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgc2lnbigpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDnrKblj7cgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmraPmlbDov5Tlm54x77yMMOi/lOWbnjDvvIzotJ/mlbDov5Tlm54tMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgaXMuZmluaXRlKClgL2Bpcy5pbmZpbml0ZSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmmK/lkKbmnInpmZAv5peg56m35aSnICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBzaW4oKWAvYGNvcygpYC9gdGFuKClgL2Bhc2luKClgL2BhY29zKClgL2BhdGFuKClgL2BhdGFuMigpYCB8IOS4ieinkuWHveaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHNpbnBpKHgpYC9gY29zcGkoeClgL2B0YW5waSh4KWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg57K+56Gu6K6h566X5rWu54K55pWw55qE5LiJ6KeS5Ye95pWwICAgICAgICAgICAgICAgICAgICB8IOebuOW6lOS4ieinkuWHveaVsOeahOecn+WunuWPguaVsOaYryAkXHBpJCDlgI3nmoR4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHNpbmgoKWAvYGNvc2goKWAvYHRhbmgoKWAvYGFzaW5oKClgL2BhY29zaCgpYC9gYXRhbmgoKWAgICAgIHwg5Y+M5puy5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgcGlgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlnIblkajnjocgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgKirlj5bmlbQqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGNlaWxpbmcoeClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5LiN5bCP5LqOeOeahOacgOWwj+aVtOaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGZsb29yKHgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5LiN5aSn5LqOeOeahOacgOWkp+aVtOaVsCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHRydW5jKHgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5ZCRMOeahOaWueWQkeaIquWPlueahHjkuK3nmoTmlbTmlbDpg6jliIYgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgcm91bmQoeCxuKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDkv53nlZlu5L2N5bCP5pWw77yM5Zub6IiN5LqU5YWlICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBzaWduaWYoeCxuKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOS/neeVmW7kvY3mnInmlYjmlbDlrZcgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHNwcmludGYoZm10LCAuLi4pYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQy1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq5pyA5YC8KiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGByYW5nZSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaegeWAvOS4pOerryAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg55So5pyA5bCP5YC85ZKM5pyA5aSn5YC86L+U5Zue5LiA5Liq6ZW/5bqm5Li6MueahOWQkemHjyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYG1heCgpYC9gbWluKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5pyA5aSnL+Wwj+WAvCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuYS5ybT1UUlVF6L+Z5Liq5Y+C5pWw5Y+v5Lul5Y675o6J5omA5pyJ55qE57y65aSx5YC8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlpoLmnpzlj4LmlbDkuLrlpJrkuKrlkJHph4/vvIzov5Tlm57lhbbkuK3miYDmnInlhYPntKDnmoTmnIDlgLwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgcG1heCgpYC9gcG1pbigpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlubPooYzmnIDlpKcv5bCP5YC8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5aaC5p6c5Y+C5pWw5Li65aSa5Liq5ZCR6YeP77yM6L+U5Zue55u45bqU5L2N572u55qE5pyA5aSnL+Wwj+WAvO+8iOS5n+aYr+S4gOS4quWQkemHj++8iSAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCAqKu+8iOe0r+iuoe+8ieWSjC/np68qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHN1bSh4KS9wcm9kKHgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5ZCR6YeP5ZKML+enryAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57kuIDkuKrmoIfph48gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgY3Vtc3VtKHgpL2N1bXByb2QoeClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57ntK/orqHlkowv56ev5bqP5YiXICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57kuIDkuKrlkJHph48gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg55Sx5paw5aKe5rGC57Sv6K6h77yM6Z2e5bi45aW955So55qE5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgZHBseXI6OmN1bW1lYW4odmVjdG9yKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57ntK/orqHlkoznmoTlnYflgLzluo/liJcgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq5o6S5YiX57uE5ZCIKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGNvbWJuKHgsIGspYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5LiA5Liq5ZCR6YePeOS4rWvkuKrlhYPntKDnmoTmiYDmnInnu4TlkIggICAgICAgICAgICAgICAgfCDov5Tlm54gbWF0cml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBleHBhbmQuZ3JpZCh2YXIxID0geDEsIHZhcjIgPSB4MilgIC9gdGlkeXI6OmNyb3NzaW5nKClgICAgICB8IOS4pOS4quWQkemHj+WvueW6lOWFg+e0oOeahOaJgOacieaOkuWIl++8jOi/lOWbniBkYXRhLmZyYW1lIHwg5Lik5Liq5Ye95pWw55qE55So5rOV5Yeg5LmO5a6M5YWo55u45ZCMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq6L+b5Yi26L2s5o2iKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFzLm9jdG1vZGUoKWAsIGBhcy5oZXhtb2RlKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5bCG5Y2B6L+b5Yi25pWw5YC86L2s5o2i5Li65YWr6L+b5Yi244CB5Y2B5YWt6L+b5Yi2ICAgICAgICAgIHwg5o6l5Y+X5pW05pWw77yM6L+U5Zue5a2X56ym5LiyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBzdHJ0b2koeCwgYmFzZSA9IGtMKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWwhmvov5vliLbnmoTlrZfnrKbkuLLovazmjaLkuLrljYHov5vliLbmlbTmlbAgICAgICAgICAgICAgfCDmjqXlj5flrZfnrKbkuLLvvIzov5Tlm57mlbTmlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KYGBge3J9DQo1ICUlIGMoMSwgMiwgMywgNCwgNSkNCnNpZ24oLTI6MykNCg0KMSAvIDANCmlzLmZpbml0ZSgxIC8gMCkNCmxvZygwKQ0KaXMuaW5maW5pdGUobG9nKDApKQ0KDQojJyBAdGl0bGUg5Yik5pat5piv5ZCm5q2j5peg56m3DQojJyBAcGFyYW0geCDlj6/ku6XkuLrlkJHph48NCmlzX3Bvc19pbmZpbml0ZSA8LSBmdW5jdGlvbih4KSB7DQogIGlzLmluZmluaXRlKHgpICYgeCA+IDANCn0NCg0KIycgQHRpdGxlIOWIpOaWreaYr+WQpui0n+aXoOeptw0KIycgQHBhcmFtIHgg5Y+v5Lul5Li65ZCR6YePDQppc19uZWdfaW5maW5pdGUgPC0gZnVuY3Rpb24oeCkgew0KICBpcy5pbmZpbml0ZSh4KSAmIHggPCAwDQp9DQoNCmlzX3Bvc19pbmZpbml0ZSgxIC8gMCkNCmlzX25lZ19pbmZpbml0ZShsb2coMCkpDQoNCnNpbnBpKDEpDQpjb3NwaSgwKQ0KdGFucGkoMSkNCg0Kcm91bmQocGksIDMpDQpzaWduaWYocGksIDMpDQoNCnNwcmludGYoIiVmIiwgcGkpDQpzcHJpbnRmKCIlLjNmIiwgcGkpDQpzcHJpbnRmKCIlMS4wZiIsIHBpKQ0Kc3ByaW50ZigiJTUuMWYiLCBwaSkNCnNwcmludGYoIiUwNS4xZiIsIHBpKQ0Kc3ByaW50ZigiJStmIiwgcGkpDQpzcHJpbnRmKCIlIGYiLCBwaSkNCnNwcmludGYoIiUtMTBmIiwgcGkpICMgbGVmdCBqdXN0aWZpZWQNCnNwcmludGYoIiVlIiwgcGkpDQpzcHJpbnRmKCIlRSIsIHBpKQ0Kc3ByaW50ZigiJWciLCBwaSkNCnNwcmludGYoIiVnIiwgMWU2ICogcGkpICMgLT4gZXhwb25lbnRpYWwNCnNwcmludGYoIiUuOWciLCAxZTYgKiBwaSkgIyAtPiAiZml4ZWQiDQpzcHJpbnRmKCIlRyIsIDFlLTYgKiBwaSkNCg0KbWF4KA0KICBjKDEsIDIsIDMpLA0KICBjKDIsIDEsIDIpLA0KICBjKDEsIDMsIDQpDQopDQpwbWF4KA0KICBjKDEsIDIsIDMpLA0KICBjKDIsIDEsIDIpLA0KICBjKDEsIDMsIDQpDQopDQoNCiMnIEB0aXRsZSDlkJHph4/ljJbliIbmrrXlh73mlbANCiMnIEBkZXNjcmlwdGlvbiDoi6XovpPlhaXlgLzlsI/kuo7iiJI177yM5YiZ5Y+W5YC85Li64oiSNe+8mw0KIycgICDoi6XovpPlhaXlgLzku4vkuo7iiJI1772eNSDkuYvpl7TvvIzliJnlj5blgLzlsLHmmK/ovpPlhaXlgLzvvJsNCiMnICAg6Iul6L6T5YWl5YC85aSn5LqOIDXvvIzliJnlj5blgLzkuLogNQ0Kc3ByZWFkIDwtIGZ1bmN0aW9uKHgpIHsNCiAgcG1pbig1LCBwbWF4KC01LCB4KSkNCn0NCnNwcmVhZChzZXEoLTgsIDgpKQ0KDQojIOeUqCBpZmVsc2UoKSDnmoTnrYnku7flhpnms5UNCnNwcmVhZDIgPC0gZnVuY3Rpb24oeCkgew0KICBpZmVsc2UoeCA8IC01LCAtNSwgaWZlbHNlKHggPiA1LCA1LCB4KSkNCn0NCnNwcmVhZDIoc2VxKC04LCA4KSkNCg0KY3Vtc3VtKDE6MTApDQpjdW1wcm9kKDE6MTApDQpkcGx5cjo6Y3VtbWVhbigxOjEwKQ0KDQpjb21ibihsZXR0ZXJzWzE6NF0sIDIpDQpleHBhbmQuZ3JpZChuID0gYygxLCAyLCAzKSwgeCA9IGMoImEiLCAiYiIpKQ0KDQojIOi/m+WItui9rOaNog0KYXMub2N0bW9kZSgyNTUpDQphcy5oZXhtb2RlKDI1NSkNCnN0cnRvaShjKCIweGZmIiwgIjA3NyIsICIxMjMiKSkgIyDpgJrov4fliY3nvIDoh6rliqjor4bliKvov5vliLYNCnN0cnRvaShjKCJmZmZmIiwgIkZGRkYiKSwgMTZMKQ0Kc3RydG9pKGMoIjE3NyIsICIzNzciKSwgOEwpDQpgYGANCg0KIyMgTnVtZXJpYw0KDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwg5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgICAgICAgIHwg6K+05piOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rDQp8IGBwb2x5cm9vdCgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOino+WkmumhueW8j+aWueeoiyAgICAgICAgIHwg5Y+C5pWw5Li65LuO5bi45pWw6aG55Yiw5pyA6auY6Zi26aG555qE57O75pWwKirlkJHph48qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBSZSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaPkOWPluWkjeaVsOeahOWunuaVsOmDqOWIhiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgdW5pcm9vdChmLCBpbnRlcnZhbClgICAgICAgICAgICAgICAgICAgICAgICAgfCDku7vmhI/kuIDlhYPmlrnnqIvmsYLmoLkgICAgIHwg5rGC5pa556iLICRmKHgpPTAkIOeahOi/keS8vOino++8jOi/lOWbnueahOWIl+ihqOWMheWQq+S6hui/keS8vOino+OAgei/keS8vOino+WkhOeahOWHveaVsOWAvOOAgei/reS7o+asoeaVsOOAgeagueeahOS8sOiuoeeyvuW6puetieS/oeaBryB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgfCDopoEqKumZkOWumiBpbnRlcnZhbO+8jOS9v+WMuumXtOWGheWPquacieS4gOS4quino++8jOWboOS4uuivpeWHveaVsOS4jeS8muaZuuiDveWcsOWIl+WHuuaJgOacieinoyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYEQocXVvdGUo5Y6f5Ye95pWwKSwgIuiHquWPmOmHjyIpYCAgICAgICAgICAgICAgICAgIHwg5rGC5Y6f5Ye95pWw55qEKOWBjynlr7zlh73mlbAgfCDov5Tlm57kuIDkuKrmnKrooqvmiafooYznmoTooajovr7lvI8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBldmFsKOWvvOWHveaVsOihqOi+vuW8jywgbGlzdCjoh6rlj5jph4/nmoTlgLwpKWAgICAgICAgIHwg5a+85Ye95pWw5Zyo5p+Q54K555qE5YC8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGludGVncmF0ZShmLCBsb3dlcu+8jHVwcGVyKWAgICAgICAgICAgICAgICAgICB8IOWumuenr+WIhueahOaVsOWAvOiuoeeulyAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBvcHRpbWlzZShmLCBpbnRlcnZhbCwgLi4uLCBtYXhpbXVtID0gRkFMU0UpYCB8IOaegeWAvOeCueaoquWdkOaghyAgICAgICAgIHwg6K6h566XIGYoeCkg5Zyo5Yy66Ze0IGludGVydmFsIOS4iuacgOS9ju+8iOaIluacgOmrmO+8ieeCueeahOS9jee9riAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgIHwg5LiOYHVuaXJvb3QoKWDkuIDmoLfvvIzopoEqKumZkOWumiBpbnRlcnZhbO+8jOS9v+WMuumXtOWGheWPquacieS4gOS4quaegeWAvO+8jOWboOS4uuivpeWHveaVsOS4jeS8muaZuuiDveWcsOWIl+WHuuaJgOacieaegeWAvCoqICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQoNCmBgYHtyfQ0KcG9seXJvb3QoYygtMiwgMSwgMSkpICMg5rGCIC0yICsgeCArIHheMiA9IDAg55qE6KejDQpSZShwb2x5cm9vdChjKC0yLCAxLCAxKSkpICMg5o+Q5Y+W5a6e5pWw6YOo5YiGDQpwb2x5cm9vdChjKDEsIDAsIDEpKSAjIOaxgiAxICsgeF4yID0gMCDnmoTmoLkNCg0KIyMg5rGCIGVeeCAtIDMgKiBlXigteF4yICsgeCkgKyAxID0gMCDlnKggWy0yLCAyXSDkuIrnmoTop6MNCmNhbFkgPC0gZnVuY3Rpb24oeCkgew0KICBleHAoeCkgLSAzICogZXhwKC14XjIgKyB4KSArIDENCn0NCnggPC0gc2VxKC0yLCAyLCBieSA9IDAuMDAxKQ0KeSA8LSBjYWxZKHgpDQpwbG90KHgsIHkpICMg6KeC5a+f5Zu+5b2i5Y+R546w5Lik5Liq6Kej55qE5aSn5qaC5L2N572uDQp1bmlyb290KGNhbFksIGMoLTEsIDApKSAjIOWcqOWNleiwg+WMuumXtOWGheWIhuWIq+axguinow0KdW5pcm9vdChjYWxZLCBjKDAsIDIpKQ0KdW5pcm9vdChjYWxZLCBjKC0yLCAyKSkgJT4lIHRyeSgpICMg5aaC5p6c5Yy66Ze05YyF5ZCr5LqG5Lik5Liq5Lul5LiK55qE6Kej77yM5Lya5oql6ZSZDQoNCiMjIOaxguWvvA0KeiA8LSBEKHF1b3RlKHNpbih4KSAqIGNvcyh4ICogeSkpLCAieCIpICMg5a+5IHgg55qE5YGP5a+85Ye95pWwDQp6ICMg5a+85Ye95pWwDQpldmFsKHosIGxpc3QoeCA9IDEsIHkgPSAyKSkNCg0KIyMg5a6a56ev5YiGDQpyZXN1bHQgPC0gaW50ZWdyYXRlKGRub3JtLCAtMS45NiwgMS45NikNCnJlc3VsdA0Kc3RyKHJlc3VsdCkNCmludGVncmF0ZShkbm9ybSwgLUluZiwgSW5mKQ0KDQojIyDmnIDkvJjljJYNCm9wdGltaXNlKHNpbiwgYygwLCAyICogcGkpKSAjIOaegeWwj+WAvOWcqCAxLjUqcGkg5aSEDQpvcHRpbWlzZShzaW4sIGMoMCwgMiAqIHBpKSwgbWF4aW11bSA9IFRSVUUpICMg5p6B5aSn5YC85ZyoIHBpLzIg5aSEDQpgYGANCg0KIyMgU3RhdGlzdGljYWwNCg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwg5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmj4/ov7AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOivtOaYjiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kw0KfCAqKkRhdGEgVHJhbnNmb3JtYXRpb24qKiAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBjdXQoeCwgYnJlYWtzLCBsYWJlbHMgPSBOVUxMLCByaWdodCA9IFRSVUUsIOKApilgIHwg5bCG6L+e57ut5pWw5o2u5oyJ5pWw5YC85YiG5q61ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHgg5Li65b6F5YiG5q615pWw5o2u77yMYnJlYWtzIOS4uuWHoOS4quWMuumXtOeahOi+ueeVjO+8jGxhYmVscyDkuLrlkITmrrXnmoTmoIfnrb4uIOm7mOiupOWQhOWMuumXtOW3puW8gOWPs+mXre+8jOS7pCByaWdodD1GQUxTRSDliJnlt6bpl63lj7PlvIDjgIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHNjYWxlKHgsIGNlbnRlciA9IFRSVUUsIHNjYWxlID0gVFJVRSlgICAgICAgICAgIHwg5qCH5YeG5YyWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg6buY6K6k54q25oCB5LiL77yM6L+b6KGM5Z2H5YC85Li6MOOAgeagh+WHhuW3ruS4ujHnmoTmoIflh4bljJbjgIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB45Y+v5Lul5piv5LiA5Liq5YiX5ZCR6YeP77yM5Lmf5Y+v5Lul5piv5pW05Liq55+p6Zi1L+aVsOaNruahhuOAguatpOaXtiB4IOaMieWIl+WIhuWIq+aTjeS9nOOAgiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq5o+P6L+w57uf6K6hKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBzdW1tYXJ5KHgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaYvuekuuWvueixoeeahOe7n+iuoeamguimgSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaYvuekuui/nue7reWei+WPmOmHj+eahOacgOWwj+WAvOOAgeacgOWkp+WAvOOAgeWdh+WAvOWSjOWbm+WIhuS9jeaVsCDmmL7npLrnsbvliKvlnovlj5jph4/nmoTpopHmlbDlgLzjgIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgdGFibGUoeClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDnu5/orqHmr4/kuKrlhYPntKDnmoTlh7rnjrDpopHmlbAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOiLpSB4IOS4uuWkmuS4quWQkemHj++8jOWImei/lOWbnuWIl+iBlOihqO+8myAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKnRhYmxlKHgpW3hdIOWPr+i/lOWbnuetiemVv+WQkemHj++8jOihqOekuuWQkemHj+S4reavj+S4quWFg+e0oOWvueW6lOeahOmikeaVsCoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgbWVhbigpYC9gbWVkaWFuKClgL2B2YXIoKWAvYHNkKClgICAgICAgICAgICAgICAgfCDlubPlnYflgLwv5Lit5L2N5pWwL+aWueW3ri/moIflh4blt64gICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWPguaVsCB0cmltIOeahOWPluWAvOWcqCAwKDAlKSDliLAgMC41KDUwJSkg5LmL6Ze077yM6KGo56S65Y675o6J5pyA5aSn55qE5pyA5bCP55qEIHRyaW0g5q+U5L6L55qE5pWw5o2u77yI6K6k5Li65piv5byC5bi45YC877yJ77yM5Ymp5LiL55qE5rGC5bmz5Z2HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWmguaenOWPguaVsOeahCBzaXplIOS4uuWBtuaVsO+8jGBtZWFuKClgIOS8mui/lOWbnuacgOS4remXtOS4pOS4quaVsOeahOW5s+Wdh+WAvCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBjb3YoeCwgeSlgL2Bjb3IoeCwgeSlgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWNj+aWueW3ri/nm7jlhbPns7vmlbDvvIhjb3JyZWxhdGlvbu+8iSAgICAgICAgICAgICAgICAgICAgICB8IOaOpeaUtuS4gOS4quaVsOaNruahhuaIluefqemYteaXtu+8jOi/lOWbnuavj+S4pOWIl+S5i+mXtOeahOWNj+aWueW3ri/nm7jlhbPns7vmlbDnn6npmLUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgbWFkKHgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDnu53lr7nkuK3kvY3lt64obWVkaWFuIGFic29sdXRlIGRldmlhdGlvbikgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHF1YW50aWxlKHgsIHByb2JzKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5YiG5L2N5pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgeCDkuLrlvoXmsYLliIbkvY3mlbDnmoTmlbDlgLzlnovlkJHph4/vvIxwcm9icyDkuLrkuIDkuKrnlLFbMCwxXeS5i+mXtOeahOamgueOh+WAvOe7hOaIkOeahOaVsOWAvOWQkemHjyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgZml2ZW51bSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDov5Tlm57mnIDlsI/lgLzjgIEyNeeZvuWIhuS9jeaVsOOAgSDkuK3kvY3mlbDjgIE3NeeZvuWIhuS9jeaVsOOAgeacgOWkp+WAvCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgKirmir3moLfkuI7mqKHmi58qKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBzYW1wbGUodmVjdG9yLCBzaXplLCByZXBsYWNlID0gRiwgcHJvYilgICAgICAgICB8IOaKveagtyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZSDpu5jorqTkuLogRkFMU0XvvIzkuI3mlL7lm57mir3moLcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwcm9i5Li65oq95qC35qaC546H5p2D6YeN5ZCR6YePICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGByZXBsaWNhdGUobiwgZXhwcilgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOmHjeWkjei/kOihjCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlr7nnrKzkuozkuKrlj4LmlbDnmoTooajovr7lvI/ph43lpI3ov5DooYwgbiDmrKHvvIzov5Tlm57lkJHph4/jgILluLjnlKjkuo7kuqfnlJ/kuIDkuKrmoLfmnKwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq6ZqP5py65pWwKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHJub3JtKG4sIG1lYW4gPSAwLCBzZCA9IDEpYCAgICAgICAgICAgICAgICAgICAgIHwg5YiG5biD55u45YWz5Ye95pWwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5Ye95pWw5ZCN5Li6IuWJjee8gCvlhbfkvZPliIbluIMi55qE5b2i5byP77yM5aaCYHJ1bmlmKClg5Y+v5Lul55Sf5oiQ5Z2H5YyA5YiG5biD6ZqP5py65pWw77yMYGRub3JtKClg5Li65q2j5oCB5a+G5bqm5Ye95pWw44CCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IGBydW5pZihuLCBtaW4gPSAwLCBtYXggPSAxKWAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOWJjee8gOWMheaLrO+8mmQgPSDlr4bluqblh73mlbDvvIhkZW5zaXR577yJ77ybcCA9IOe0r+iuoeWIhuW4g+WHveaVsO+8iGN1bXVsYXRpdmUgZGlzdHJpYnV0aW9uIGZ1bmN0aW9u77yJ77ybcSA9IOWIhuS9jeaVsOWHveaVsO+8iHF1YW50aWxlIGZ1bmN0aW9u77yJ77ybciA9IOmaj+acuuaVsOeUn+aIkOWZqCB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDlhbfkvZPliIbluIPvvJp1bmlmID0g5Z2H5YyA5YiG5biD77ybbm9ybSA9IOato+aAgeWIhuW4g++8m3BvaXMgPSDms4rmnb7liIbluIPvvJtiaW5vbSA9IOS6jOmhueWIhuW4g+OAguWPr+S7pemAmui/h2A/RGlzdHJpYnV0aW9uc2Ag5p+l6K+iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgc2V0LnNlZWQoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDorr7lrprpmo/mnLrmlbDnp43lrZAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgTUFTUzo6bXZybm9ybShuLCBtZWFuLCBzaWdtYSlgICAgICAgICAgICAgICAgICAgfCDnlJ/miJDlpJrlhYPmraPmgIHmlbDmja4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG4g5Li65qC35pys5aSn5bCP77yMbWVhbiDkuLrlnYflgLzlkJHph4/vvIxzaWdtYSDmmK/mlrnlt64t5Y2P5pa55beu55+p6Zi1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDor6Xlh73mlbDov5Tlm57kuIDkuKrnn6npmLUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8ICoq5o6o5pat57uf6K6hKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBsbSh5fngsIGRhdGEgPSBkZilgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOe6v+aAp+WbnuW9kuaooeWeiyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGdsbSh5fngsIGRhdGEgPSBkZilgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5bm/5LmJ57q/5oCn5qih5Z6LICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgc3RhdHM0OjptbGUoKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDmnoHlpKfkvLznhLbkvLDorqHmqKHlnosgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE1heGltdW0gTGlrZWxpaG9vZCBFc3RpbWF0aW9uLCBNTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYHN1bW1hcnkobW9kZWwpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg6L6T5Ye65qih5Z6L55qE5pu05aSa57uG6IqCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKw0KfCBgdC50ZXN0KHgsIHkpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCDkuKTkuKrlkJHph4/lnYflgLznmoR05qOA6aqMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBwYWlyd2lzZS50LnRlc3RgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IOaIkOWvueaVsOaNrueahHTmo4DpqowgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rDQp8IGBwcm9wLnRlc3RgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3QgZm9yIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHByb3BvcnRpb25zICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCnwgYGFvdmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg5pa55beu5YiG5p6QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsNCg0KYGBge3J9DQphZ2UgPC0gYyg1NSwgMTIsIDMwLCA5LCAyMiwgMjQsIDc4LCAxMDksIDQ1LCA2NiwgNDkpDQpjdXQoYWdlLCBicmVha3MgPSBjKC1JbmYsIDEyLCAzMCwgNjAsIEluZiksIGxhYmVscyA9IGMoIuWwj+WtqSIsICLpnZLlubQiLCAi5Lit5bm0IiwgIuiAgeW5tCIpKQ0KDQp4IDwtIHJub3JtKDUwKQ0KeSA8LSAyICogeCArIDAuNSAqIHJub3JtKGxlbmd0aCh4KSkNCnogPC0gcnVuaWYobGVuZ3RoKHgpKQ0KbTEgPC0gY2JpbmQoeCwgeSwgeikNCmNvcihtMSkNCmBgYA0K