一、背景与问题引入

1. 被试变异与题目变异的解构

心理学研究中经常使用回归,如混合线性模型(Mixed-Effects Models),来建模数据。研究举例:

年龄(Age, IV)外倾性(Extraversion, DV) 的影响。

需要区分两个层面的变异:

1.1 被试层面 (Participant Level)

  • 被试截距 (Participant Intercept):不同人的基础外向性分数不同(有人天生社牛,有人社恐)。
  • 被试斜率 (Participant Slope):年龄增长对不同人的影响可能不同(文章不讨论此层面的随机斜率)

1.2 题目层面 (Item Level)

  • 题目截距 (Item Intercept = 难度/通俗度)
    • 有些题容易得分(例如:“我喜欢和人说话”),有些题难得分(例如:“我喜欢演讲”)
    • 现状: 这一点传统方法(IRT 或 SEM)能正确处理(通过题目参数或载荷截距)
  • 题目斜率 (Item Slope = 对 IV 的敏感度)
    • 举例:随着年龄增长,“喜欢和人说话”这种温和的社交可能变化不大(Slope \(\approx\) 0);但“喜欢演讲”这种追求刺激的社交可能会急剧下降(Slope < 0)
    • 现状:传统方法通常不会额外处理题目斜率,而是作为固定效应的一部分
    • 核心问题:IV 对不同题目(Items,后文同)的预测力是一样的吗?

2. ANOVA中的交互作用

set.seed(123)
n_subj <- 50
age <- rnorm(n_subj, mean = 20, sd = 10) # IV

# 假设构念由2个题目测量
# Item 1: 随年龄增长稍微增加 (Slope = 0.05)
# Item 2: 随年龄增长显著减少 (Slope = -0.05)
item1_scores <- 0.05 * age + rnorm(n_subj)
item2_scores <- -0.05 * age + rnorm(n_subj)

demo_data <- data.frame(
  ID = rep(1:n_subj, 2),
  Age = rep(age, 2),
  Score = c(item1_scores, item2_scores),
  Item = rep(c("Item 1 (温和社交)", "Item 2 (刺激社交)"), each = n_subj)
)

# 计算聚合分数 (Aggregation)
agg_data <- demo_data %>%
  group_by(ID, Age, Item) %>%
  summarise(Mean_Score = mean(Score))

# --- 统计检验 (ANOVA) ---

# 1. 传统聚合分析:检验 Age 主效应
# 逻辑:如果只看平均分,Age 有影响吗?
model_agg <- lm(Mean_Score ~ Age + Item, data = agg_data)
print(anova(model_agg))
Analysis of Variance Table

Response: Mean_Score
          Df Sum Sq Mean Sq  F value Pr(>F)    
Age        1   0.00   0.000   0.0003 0.9861    
Item       1 148.20 148.196 135.1612 <2e-16 ***
Residuals 97 106.35   1.096                    
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# 2. 交互作用分析:检验 Age × Item
# 逻辑:Age 对分数的影响,是否依赖于题目(Item)的不同?
model_inter <- lm(Score ~ Age * Item, data = demo_data)
print(anova(model_inter))
Analysis of Variance Table

Response: Score
          Df  Sum Sq Mean Sq  F value    Pr(>F)    
Age        1   0.000   0.000   0.0004    0.9849    
Item       1 148.196 148.196 161.5947 < 2.2e-16 ***
Age:Item   1  18.314  18.314  19.9703 2.152e-05 ***
Residuals 96  88.040   0.917                       
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# --- 绘图 ---
p1 <- ggplot(demo_data, aes(x = Age, y = Score, color = Item, group = Item)) +
  geom_point(alpha = 0.3) +
  geom_smooth(method = "lm", se = FALSE, size = 1.5) +
  theme_minimal() +
  labs(title = "真实机制:显著的交互作用 (Interaction)", 
       subtitle = "ANOVA 结果显示 Age:Item 交互项显著\n说明斜率方向随题目而变") +
  theme(legend.position = "bottom")

p2 <- ggplot(agg_data, aes(x = Age, y = Mean_Score)) +
  geom_point(alpha = 0.3) +
  geom_smooth(method = "lm", color = "black", size = 1.5) +
  theme_minimal() +
  labs(title = "聚合掩盖真相:主效应不显著", 
       subtitle = "ANOVA 结果显示 Age 主效应 p > .05\n错误地得出'年龄无关'的结论")

p1 + p2

  • IV 与 Items 存在明显的交互作用(斜率一正一负)
  • 当交互作用存在,但未被建模时,“主效应”实际上是一个被污染的指标——它要么被相反的斜率中和成了无意义的平均数,要么其显著性检验建立在错误的误差基准之上
  • 如果 IV 与 Items 存在交互作用,但分析时没有建模交互作用,会发生什么?

3. 异质性(Heterogeneity)要求与同质性 (Homogeneity) 的误解

  • 有的研究在设计题目表达概念/构念时,为了高内容效度 (Content Validity),会从不同角度设计题目,例如,测量“外向性”时,需要既有“喜欢派对”的题目,也有“喜欢公开演讲”的题目,这些题目虽然都测外向性,但它们覆盖了构念的不同侧面。这些题目本身存在异质性
  • 题目内部相关高,也不代表它们对外部变量(IV)的反应(Slope)也是一样的
  • 如果量表旨在测量一个宽泛的心理构念(Broad Construct),题目斜率的异质性不仅是统计上的必然,也是理论上的必然

4. 概化理论 (Generalizability Theory) 引发的悖论

4.1 核心前提:题目全域 (Item Universe) 与可交换性

  • 随机抽样假设:为了研究效度,假设被试是从人群中随机抽取的,相似的,量表中的题目也应当被视为从“题目全域”中随机抽取的样本
  • 可交换性 (Exchangeability):既然是随机抽样,那么题目之间应该是“可交换”的,统计结论不应受制于恰好选用了哪几个题目

概化理论认为:为了让结论具有推广性,统计上应假设使用的题目是从一个无限题库 (infinite pool of items) 中随机抽取的,题目斜率应被视作随机效应

4.2 现行做法的“双标”

  1. 对被试 (Participants):承认其随机性,允许不同被试有不同的表现,试图将结论推广到未被测量的总体人群。
  2. 对题目 (Items):目前的模型只允许题目在截距上随机变化(即承认题目有难易之分)。涉及题目与外部变量(IV)的关系(即斜率),传统模型就强行假设所有题目对 IV 的反应是完全一致的(Fixed Slope, \(\beta_1\))。这种做法实际上把固定的几道题目当成了概念/构念全部测量范围 \[ y_{ij} = \beta_0 + u_{0i} + u_{0j} + \beta_1 x_i + \epsilon_{ij} \]

5. 问题出现:现有模型对items随机斜率视而不见

无论是简单的回归(Aggregation)还是复杂的结构方程模型(SEM),都在不同程度上忽视了题目层面的斜率不一致。

5.1 两种忽视的方式

  1. 聚合模型 (Aggregation Regression)
    • 做法:求平均分。
    • 假设:所有题目对构念的贡献相等(权重=1),且对 IV 的反应斜率完全相同。
    • 结果:丢失所有题目特异性信息。
  2. 结构方程模型 (Common Factor / SEM)
    • 做法:潜变量建模。
    • 假设:题目对 IV 的反应必须通过“潜变量”传导。不同题目的斜率被平均了,这种做法假定,若 Item1 的载荷是 Item2 的2倍,那么 Item1 对 IV 的斜率也必须严格是 Item2 的2倍
    • 局限:IV 无法直接与单个 Item 产生独特的交互作用,模型会把这部分本该属于“Random item slope”的变异,错误地当作了单纯的残差

5.2 模型假设对比

# ==========================================
# 1. 数据生成:构造“矛盾”情境
# ==========================================
set.seed(999)
N <- 300
J <- 5
IV <- rnorm(N, 0, 1)

# A. 生成潜变量 (Factor)
# 假设 IV 对潜变量有强正向影响 (Beta = 0.6)
Latent_F <- 0.6 * IV + rnorm(N, 0, 0.8)

# B. 生成题目 (Items)
# 关键点:所有题目在测量模型上都是“好题”(正向载荷),内部一致性高
# y = 1.0 * F + unique_effect + error
sim_data_wide <- data.frame(ID = 1:N, IV = IV)
sim_data_long <- data.frame()

# 题目 1-4:完全听从潜变量指挥
for(j in 1:4){
  y <- 1.0 * Latent_F + rnorm(N, 0, 1) 
  sim_data_wide[[paste0("y", j)]] <- y
  sim_data_long <- rbind(sim_data_long, data.frame(ID=1:N, IV=IV, Item=paste0("Item", j), Score=y))
}

# 题目 5:叛逆者 (Item Specific Effect)
# 它虽然测量同一个潜变量(有 +1.0 * F),但 IV 对它有额外的直接负面打击 (-1.5 * IV)
# 净效应(Net Slope) ≈ 0.6 (from F) - 1.5 (Direct) = -0.9
y5 <- 1.0 * Latent_F - 1.5 * IV + rnorm(N, 0, 1)
sim_data_wide$y5 <- y5
sim_data_long <- rbind(sim_data_long, data.frame(ID=1:N, IV=IV, Item="Item5", Score=y5))


# ==========================================
# 2. 模型拟合
# ==========================================

# --- A. 聚合回归 ---
sim_data_wide$Mean_Score <- rowMeans(sim_data_wide[, paste0("y", 1:5)])
agg_model <- lm(Mean_Score ~ IV, data = sim_data_wide)
agg_intercept <- coef(agg_model)[1]
agg_slope     <- coef(agg_model)[2]

# --- B. SEM (Common Factor) ---
sem_syntax <- '
  F1 =~ y1 + y2 + y3 + y4 + y5
  F1 ~ IV
'
sem_fit <- sem(sem_syntax, data = sim_data_wide, std.lv = TRUE)

# 提取 SEM 隐含的回归线
est <- parameterEstimates(sem_fit)
gamma <- est[est$op == "~" & est$lhs == "F1" & est$rhs == "IV", "est"] # 潜变量斜率
sem_lines <- data.frame()

for(j in 1:5){
  item_name <- paste0("y", j)
  # 截距
  nu <- est[est$op == "~1" & est$lhs == item_name, "est"]
  if(length(nu)==0) nu <- mean(sim_data_wide[[item_name]])
  # 载荷
  lam <- est[est$op == "=~" & est$rhs == item_name, "est"]
  
  # 这里的关键:SEM 强行认为 斜率 = 载荷 * Gamma
  # 因为 y1-y4 都是正相关,Gamma 是正的,且所有题目内部正相关,
  # SEM 会估计出 y5 的载荷也是正的(因为 y5 也受 Latent_F 影响)
  # 于是 SEM 会错误地预测 y5 随着 IV 增加而增加
  implied_slope <- lam * gamma
  
  temp <- data.frame(IV = seq(min(IV), max(IV), length.out=100), Item=paste0("Item", j))
  temp$Score <- nu + implied_slope * temp$IV
  sem_lines <- rbind(sem_lines, temp)
}

# ==========================================
# 3. 绘图对比
# ==========================================


common_theme <- theme_bw() + 
  theme(legend.position = "none", plot.title = element_text(face="bold"))

# Plot 1: Aggregation
p_agg <- ggplot(sim_data_long, aes(x = IV, y = Score)) +
  geom_point(color="grey", alpha=0.3) +
  geom_abline(intercept = agg_intercept, slope = agg_slope, color = "#D55E00", size = 2) +
  labs(title = "1. Aggregation", subtitle = "简单平均,彻底掩盖 Item 5") + 
  ylim(-4, 4) + common_theme

# Plot 2: SEM
p_sem <- ggplot() +
  geom_point(data = sim_data_long, aes(x = IV, y = Score, color = Item), alpha = 0.1) +
  geom_line(data = sem_lines, aes(x = IV, y = Score, color = Item), size = 1.2) +
  labs(title = "2. SEM (Common Factor)", 
       subtitle = "强制一致性:\n由于 Item 5 属于该构念,SEM 强行预测它\n随 IV 增加而增加 (紫色线向上)。\n这与数据事实(散点向下)完全相反") +
  ylim(-4, 4) + common_theme

# Plot 3: Real Data / RIS
p_ris <- ggplot(sim_data_long, aes(x = IV, y = Score, color = Item)) +
  geom_point(alpha = 0.2) +
  geom_smooth(method = "lm", se = FALSE, size = 1.2) +
  labs(title = "3. Real Data (RIS)", 
       subtitle = "真相:\nItem 5 (紫色) 实际上是负相关的。\n这是 SEM 无法捕捉的特异性斜率。") +
  ylim(-4, 4) + common_theme

p_agg + p_sem + p_ris

my_labels <- c("Item 1", "Item 2", "Item 3", "Item 4", "Item 5", "IV", "Factor")

semPaths(object = sem_fit,
         what = "std",
         whatLabels = "std",
         layout = "tree2",  
         edge.label.cex = 1, 
         rotation = 2,
         nodeLabels = my_labels,
)

title("Common Factor Model (SEM) 路径图", adj = 0.5, line = 2)
mtext("IV 到 Item 5 没有直接路径,必须经过 F1", side = 1, line = 0, cex = 1.2)


二:理论模型——Random Item Slope Regression (RISR)

不仅仅是统计方法的改变,更是测量哲学的改变。

  • Aggregation: 均值就是一切
  • SEM (Common Factor): 认为题目是潜变量的“反映 (Reflective)”。
    • 假设:题目本身没有独立意义,它们只是潜变量的“克隆体”,唯一的区别在于信度(载荷)
  • Random Item Slope Regression (Proposed): 根据概化理论的逻辑,认为题目是构念的“样本 (Sample)”
    • 假设:题目是从一个无限的题库中随机抽取的
    • 推论:每个题目都有其独特的上下文(Context),IV 对不同题目的影响可以完全不同(甚至方向相反),这被视为真实存在的变异,而不是噪音

1. 模型的数学描述

1.1 传统模型 vs. RISR模型

传统聚合回归 (Aggregation Model): 假设题目对 IV 的反应是固定的、一致的。 \[ y_i = \beta_0 + \beta_1 x_i + \epsilon_i \]

随机题目斜率回归 (RISR, Equation 4): 假设题目是从题库中随机抽取的,对 IV 的敏感度各不相同。 \[ y_{ij} = \beta_0 + u_{0i} + u_{0j} + (\beta_1 + \mathbf{u_{1j}})x_i + \epsilon_{ij} \]

其中核心差异在于 \(\mathbf{u_{1j}}\)

  • \(u_{1j}\) (Random Item Slope), \(u_{1j} \sim N(0, \tau_{11})\)
    • 题目对 IV 反应的特异性
    • 它代表了题目 \(j\)\(x\) 的敏感程度偏离平均斜率 \(\beta_1\) 多少
    • 对于题目 \(j\) 来说,它真实的斜率是 \((\beta_1 + u_{1j})\)
    • Aggregation/SEM 隐含假设\(u_{1j} = 0\) (即方差 \(\tau_{11} = 0\))
    • RISR 核心假设\(\tau_{11} > 0\),衡量了题目间对 IV 反应的异质性程度
  • \(u_{0i}\) (Random Participant Intercept), \(u_{0i} \sim N(0, \tau_{00}^{(subj)})\)
    • 被试的特异性
    • 比如:张三本身就倾向于打高分,他的 \(u_{0i}\) 就是正的
  • \(u_{0j}\) (Random Item Intercept), \(u_{0j} \sim N(0, \tau_{00}^{(item)})\)
    • 题目的难易度/通俗度
    • 比如:题目 1 措辞很诱人,大家都容易得分,它的 \(u_{0j}\) 就是正的
  • \(\epsilon_{ij}\) (Residual), \(\epsilon_{ij} \sim N(0, \sigma^2)\)

2. 错误建模的统计后果:SE 低估与 t 值膨胀

忽略 \(u_{1j}\) 会导致假阳性(Type I Error),根本原因在于\(t\)值计算错误。

2.1 t 值的计算逻辑

在线性回归中,判断显著性的 \(t\) 值计算公式为: \[ t = \frac{\text{Estimate}}{\text{Standard Error}} = \frac{\hat{\beta}_1}{SE(\hat{\beta}_1)} \]

如果题目本身存在斜率变异(\(\tau_{11} > 0\)),使用了传统模型(忽略它)时,会得到一个被低估的 SE。分母变小 \(\rightarrow\) t 值虚高 \(\rightarrow\) 假阳性(Type I Error)。

2.2 SE 的计算过程

根据论文附录证明,两种模型对 SE 的估计截然不同:

  • 传统模型 (Naive SE): 认为只要增加被试量 \(N\),误差就能无限缩小: \[ SE_{naive} \approx \sqrt{\frac{\sigma^2_{residual}}{N \times J \times \sigma^2_x}} \] > 当 \(N \to \infty\)\(SE \to 0\)

  • RISR 模型 (True SE): 引入了题目采样的不确定性(Generalization Error),以下公式由文章中A10变形而来: \[ SE_{true} \approx \sqrt{\frac{\sigma^2_{residual}}{N \times J \times \sigma^2_x} + \mathbf{\frac{\tau_{11}}{J}}} \] > 当 \(N \to \infty\),第一项趋近于0,但第二项 \(\frac{\tau_{11}}{J}\) 依然存在

2.3 低估SE的因素

比较 真实模型 SE (RISR) 和 错误模型 SE (Aggregation/Naive) 的比率,比率越大,说明错误模型低估得越严重(即错得越离谱)

由附录 A 的推导可以构造比率 \(K\)

\[ \text{Ratio } K = \frac{SE_{True}}{SE_{Naive}} = \sqrt{1 + \frac{I \cdot \tau_{11} \cdot s_x^2}{\sigma^2 + J \cdot \omega_{00}}} \]

  • 分子\(I\) (被试数), \(\tau_{11}\) (斜率变异), \(s_x^2\) (IV方差)
  • 分母\(\sigma^2\) (残差), \(J\) (题目数), \(\omega_{00}\) (被试截距变异)
  1. 被试数量 (\(I\)) 越多,低估越严重
  2. 题目数量 (\(J\)) 越少,低估越严重
  3. 被试截距变异 (\(\omega_{00}\)) 越小,低估越严重
  4. 应该是残差越小 (\(\sigma^2\) smaller),低估才越严重?

larger underestimation when there is larger residual error variance(?×)


3. 模拟验证:大样本悖论

图解:传统模型(蓝色线),当 \(N=3000\) 时,SE 几乎为 0,此时哪怕 \(\hat{\beta}\) 只有微小的 0.01,计算出的 \(t\) 值也会很大,导致显著的结果。这解释了为什么大数据集特别容易出现 Random Item Slope 导致的假阳性。


4. 为什么常用指标无法诊断?

为什么 Cronbach’s \(\alpha\) 或 SEM 模型拟合(CFI/RMSEA)时没有发现?

4.1 Cronbach’s \(\alpha\) 的盲区

\(\alpha\) 系数反映的是题目分数的内部一致性。 \[ Var(y_{ij}) = \underbrace{\omega_{00}}_{\text{人与人的巨大差异}} + \tau_{00} + \underbrace{\tau_{11}x_i^2}_{\text{微小的斜率差异}} + \sigma^2 \]

\[ \alpha \approx \frac{J \cdot \omega_{00}}{J \cdot \omega_{00} + (\sigma^2 + \tau_{11})} \]

  • 现状:被试间的截距差异(\(\omega_{00}\),即有些人总是分高)通常占据了绝大部分方差。
  • 盲区\(\tau_{11}\)(对 IV 的反应差异)占比很小。\(\alpha\) 主要反映截距的一致性(\(\omega_{00}\)),对斜率层面的异质性(\(\tau_{11}\))不敏感 (Insensitive),Random Item Slope 的存在实际上会增加观察到的总变异,可能微弱地增加 \(\alpha\)

4.2 SEM 拟合指数的欺骗性

Common Factor Regression虽然比聚合回归严谨,它本质上是一个Constrained Model,它强迫所有题目通过潜变量产生联系:

  1. 残差吸收:SEM 将 Random Slope 的变异(\(u_{1j}x_i\))视为随机误差(Residuals, \(\epsilon\))。
  2. 拟合指标假阳性:只要这些变异没有破坏整体的协方差结构(通常确实没有,因为它们是关于斜率的,而不是关于截距的),SEM 的拟合指数(Global Fit Indices)就会出现假阴性,即明明模型设定错了,但 CFI 依然 > 0.95。

实证证据 (Real Data): 论文使用了 \(N=564\) 的真实数据发现,即使 CFI = 0.956, RMSEA = 0.087 这样被认为“可接受”的模型,在使用 RISR 检验后,依然发现了显著的 Random Item Slopes,且推翻了之前的显著性结论。

结论:高信度 (\(\alpha\)) 和高拟合度 (CFI) 不能 作为不存在 Random Item Slope 的证据。


三:实证证据——模拟与真实数据

首先在模拟环境下证明传统模型会犯错,然后在真实环境(实测数据)中证明这种情况确实存在

1. 模拟研究 (Simulation Study)

文章构建了 72 种不同的参数组合,系统改变了样本量 (\(N\))、题目数量 (\(J\)) 和随机斜率的方差大小 (\(\tau_{11}\))。

1.1 核心发现:Type I 错误率膨胀

在模拟中,设定 IV 和 DV 的真实关系为 0 (\(\beta_1 = 0\))。因此,任何“显著”的结果都是假阳性(Type I Error)。

  • 当存在随机题目斜率(\(\tau_{11} > 0\))时,随着样本量 (\(N\)) 的增加,错误率飙升,甚至接近 100%,即大样本悖论
  • 无论样本量多大,错误率始终控制在0.05以下

1.2 微弱的随机题目斜率也影响巨大

模拟显示,即使随机题目斜率的方差非常小(仅占相关误差方差的 0.549%),在大样本下(\(N=1000\))也足以导致传统模型的统计推断失效,说明以往研究中存在普遍的隐患。


2. 真实数据分析 (Real World Data)

作者收集了 \(N=564\) 的数据,使用了心理学常用的量表(如大五人格、自我实现量表等)和反应时任务。

2.1 案例:年龄与自我实现 (Age & Self-Actualization)

一个戏剧性的例子,一项探究“年龄”是否预测“自我实现”得分的研究中。

模型结果对比

传统聚合回归与 RISR 模型的结果中,回归系数 (\(b\)) 是相同的,但标准误 (\(SE\)) 发生了剧烈变化

模型类型 回归系数 (\(\hat{\beta}_1\)) 标准误 (\(SE\)) \(t\) \(p\) 实质结论
Aggregation -0.062 0.015 (被低估) -4.18 < .001 (显著) 年龄越大,自我实现感越低
RISR -0.062 0.032 (已校正) -1.96 .066 (不显著) 年龄与自我实现感无显著关系

RISR 估计出的 \(SE\) 是传统方法的 2 倍多。这直接导致显著性消失,推翻了原有结论。


为什么会有这么大的差异?检查单个题目的斜率有以下发现:

题目类型 代表题目 (Items) 对年龄的反应 (Slope) 心理学解释
驱动因子 (Drivers) Item 8 (“I fear failure”)
Item 14 (““I am bothered by fears of being inadequate”)
强负相关 (随年龄大幅下降) 年龄增长显著降低了“对失败的恐惧”
无关因子 (Neutrals) 大部分其他题目 接近零 或 微弱正相关 年龄对自我实现的其他维度影响甚微

结论:所谓的“显著负相关”完全是由少数几个关于“恐惧”的题目驱动的,RISR 像一把手术刀,切分了构念层面和题目层面的效应。 RISR的分析来看,年龄增长可能只是让人“不再害怕失败”,而不是“自我实现感降低”

2.2 普遍性

在测试的所有 IV-DV 组合中,随机题目斜率普遍存在。在某些情况下,RISR 估计出的随机斜率方差甚至远大于模拟中设定的水平。这表明过去文献中许多“小而显著”的大样本效应,可能只是由于量表中混入了几个对 IV 特别敏感的题目。


四:总结与实际应用

1. 总结讨论 (General Discussion)

1.1 实践建议

  1. 警惕大样本中的微小显著效应:当 \(N\) 很大且效应量很小时,必须考虑题目斜率异质性的影响。
  2. 作为敏感性分析 (Sensitivity Check):不一定要完全抛弃传统方法,但应使用 RISR 验证核心结论是否稳健。
  3. 不要迷信 Fit Indices:CFI 和 Alpha 系数无法诊断这个问题。

2. How to fit RISR

RISR 本质上是一个 交叉分类混合效应模型 (Cross-Classified Mixed-Effects Model)。之所以叫“交叉”,是因为每个被试都回答了所有题目(或大部分),被试和题目不是嵌套关系,而是交叉关系

使用 lme4 包可实现 RISR 模型。 \[\text{Score}_{ij} \sim \beta_0 + (\beta_1 + u_{1j}) \cdot \text{IV}_i + (u_{0i} + u_{0j}) + \epsilon_{ij}\]

lme4语法中的表达:

library(lme4)

risr_model <- lmer(
  Score ~ IV +                # 固定效应:要测的平均关系
    (1 | ID) +                # 随机截距 (被试):每个人基础分不同
    (1 + IV | Item),          # 随机斜率 (题目):关键!允许 IV 对不同 Item 的影响不同
  data = long_data
)

2.1 数据准备

要求长数据格式 (Long Format),每行是一个观察值 single subject answers single item response data in long format

2.2 代码示范

生成模拟数据集,演示“聚合回归”转向“RISR”

library(lme4)
library(broom.mixed)
library(lmerTest) # 计算 p 值

# 1. 传统聚合回归 (Aggregation)
# 需要先计算平均分
agg_df <- sim_data_long %>% 
  group_by(ID, IV) %>% 
  summarise(Mean_Score = mean(Score))
model_agg <- lm(Mean_Score ~ IV, data = agg_df)

# 2. 随机截距模型 (Random Intercept Only)
# 这是很多研究者误用的模型,只考虑了题目难度不同,没考虑斜率不同
model_ri <- lmer(Score ~ IV + (1|ID) + (1|Item), data = sim_data_long)

# 3. 随机题目斜率模型 (RISR - Proposed)
# 允许 (1 + IV | Item)
model_risr <- lmer(Score ~ IV + (1|ID) + (1 + IV | Item), data = sim_data_long)

# --- 提取结果进行对比 ---

# 辅助函数提取系数
get_res <- function(mod, name) {
  if(inherits(mod, "lm")) {
    res <- tidy(mod) %>% filter(term == "IV")
  } else {
    res <- tidy(mod, effects = "fixed") %>% filter(term == "IV")
  }
  res %>% select(estimate, std.error, statistic, p.value) %>% mutate(Model = name)
}

res_table <- rbind(
  get_res(model_agg, "1. Aggregation (OLS)"),
  get_res(model_ri,  "2. Random Intercepts (LMM)"),
  get_res(model_risr,"3. RISR (Proposed)")
)

print(res_table)

2.3 结果解读

  1. Estimate (回归系数)
    • 三个模型的 \(\beta\) 估计值几乎是一样的 (约 0.17)。
    • 原因:RISR 并不改变“平均效应”的估计,它改变的是对这个平均效应“确定性”的判断。
  2. Std.Error (标准误)
    • Aggregation: SE 非常小 (0.05)。因为它认为题目是固定的,样本量 \(N=300\) 足够大。
    • RISR: SE 剧增 (0.24)!因为它意识到 Item 5 和其他 Item 差异巨大,推广到“题库”时充满了不确定性。
  3. P-value (显著性)
    • Aggregation: \(p < .001\) (显著)。这是一个假阳性结论(Type I Error)。
    • RISR: \(p = 0.5\) (不显著)。这是正确的结论——因为题目间极其不一致,无法断言 IV 对该构念有稳定的正向影响。

2.4 RISR 到底看到了什么?

RISR 的强大之处在于它可以估计出每个题目独特的斜率(BLUPs, Best Linear Unbiased Predictions),可以把模型“眼中”的题目斜率画出来。

# 提取随机效应
ranef_data <- ranef(model_risr)$Item
ranef_data$Item <- rownames(ranef_data)
# 固定效应
fixed_slope <- fixef(model_risr)["IV"]
fixed_intercept <- fixef(model_risr)["(Intercept)"]

# 计算每个题目的总斜率 (Fixed + Random)
item_slopes <- ranef_data %>%
  mutate(
    Total_Slope = fixed_slope + IV,
    Total_Intercept = fixed_intercept + `(Intercept)`
  )

# 绘图
ggplot() +
  # 背景:原始数据点
  geom_point(data = sim_data_long, aes(x = IV, y = Score), color = "grey", alpha = 0.1) +
  # 线条:RISR 估计的每道题的回归线
  geom_abline(data = item_slopes, 
              aes(intercept = Total_Intercept, slope = Total_Slope, color = Item),
              size = 1) +
  # 粗黑线:平均效应 (Fixed Effect)
  geom_abline(intercept = fixed_intercept, slope = fixed_slope, 
              color = "black", size = 2, linetype = "dashed") +
  labs(title = "RISR 模型的透视图",
       subtitle = "虚线为平均效应 (不显著),彩色实线为各题目的特定效应。\n模型'看到'了 Item 5 (紫色) 的剧烈反向,因此“惩罚”了整体的显著性。",
       x = "Independent Variable (IV)", y = "Item Score") +
  theme_minimal() +
  theme(legend.position = "right")

传统的 Aggregation 或 SEM 试图寻找一条最能代表所有人的线(虚线)。 而 RISR 承认每一条彩色线的真实性。当彩色线(题目斜率)像这样发散(Heterogeneity)时,RISR 会认为:“虽然平均线是平的或微正的,但由于题目间分歧太大,这个平均结果不可靠。”

3. 结语:何时应该使用 RISR?

Donnellan et al. (2025) 并不建议废除 SEM,而是提出了一种替代视角。

维度 SEM (Common Factor) RISR (Mixed Models)
适用场景 构念定义极其严格,题目必须高度同质 (如智力测验 g 因素) 构念定义宽泛,题目具有异质性 (如外向性:演讲 vs 聊天)
对不一致斜率的处理 视为噪音或模型拟合差 (Bad Fit) 视为真实变异 (Real Variance),并纳入 SE 计算
结论推广性 仅推广到“当前这组题目” 推广到“该构念的所有潜在题目”

RISR “Treat items as random samples, not fixed indicators.”

RISR 并不是要否定过去的所有研究,而是提醒研究者在处理异质性题目大样本数据时,需要更加谦卑地对待统计推断的不确定性。当声称发现了一个关于“构念”的真理时,要确保这个真理不是仅由其中一两个题目驱动的。

一点点小延伸

  • 聚合模型 (Aggregation) 建模过程是有损压缩 (Lossy Compression)的,在这个压缩过程中丢弃了 \(J-1\) 个维度的信息,人为地平滑了数据,降低了数据的熵 (Entropy)
  • RISR 模型保留 \(N \times J\) 的完整数据结构,不进行预先压缩,不仅读取了“均值”(主效应),还读取了“差异”(异质性)

Thank you!

LS0tDQp0aXRsZTogJ1JhbmRvbSBJdGVtIFNsb3BlIFJlZ3Jlc3Npb24nDQphdXRob3I6ICLmu5XmmZciDQpkYXRlOiAiMjAyNS0xMi0wMyINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0aGVtZTogZmxhdGx5DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0Og0KICAgICAgY29sbGFwc2VkOiBmYWxzZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIA0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBtZXNzYWdlID0gRkFMU0UsIHdhcm5pbmcgPSBGQUxTRSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KGxhdmFhbikNCmxpYnJhcnkoc2VtUGxvdCkNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KYGBgDQoNCiMg5LiA44CB6IOM5pmv5LiO6Zeu6aKY5byV5YWlDQoNCiMjIDEuIOiiq+ivleWPmOW8guS4jumimOebruWPmOW8gueahOino+aehA0KDQrlv4PnkIblrabnoJTnqbbkuK3nu4/luLjkvb/nlKjlm57lvZLvvIzlpoLmt7flkIjnur/mgKfmqKHlnovvvIhNaXhlZC1FZmZlY3RzIE1vZGVsc++8ie+8jOadpeW7uuaooeaVsOaNruOAgueglOeptuS4vuS+i++8mg0KDQoqKuW5tOm+hChBZ2UsIElWKSoqIOWvuSAqKuWkluWAvuaApyhFeHRyYXZlcnNpb24sIERWKSoqIOeahOW9seWTjeOAgg0KDQrpnIDopoHljLrliIbkuKTkuKrlsYLpnaLnmoTlj5jlvILvvJoNCg0KIyMjIDEuMSDooqvor5XlsYLpnaIgKFBhcnRpY2lwYW50IExldmVsKQ0KDQotICAgKirooqvor5XmiKrot50gKFBhcnRpY2lwYW50IEludGVyY2VwdCkqKu+8muS4jeWQjOS6uueahOWfuuehgOWkluWQkeaAp+WIhuaVsOS4jeWQjO+8iOacieS6uuWkqeeUn+ekvueJm++8jOacieS6uuekvuaBkO+8ieOAgg0KLSAgICoq6KKr6K+V5pac546HIChQYXJ0aWNpcGFudCBTbG9wZSkqKu+8muW5tOm+hOWinumVv+WvueS4jeWQjOS6uueahOW9seWTjeWPr+iDveS4jeWQjO+8iOaWh+eroOS4jeiuqOiuuuatpOWxgumdoueahOmaj+acuuaWnOeOh++8iQ0KDQojIyMgMS4yIOmimOebruWxgumdoiAoSXRlbSBMZXZlbCkNCg0KLSAgICoq6aKY55uu5oiq6LedIChJdGVtIEludGVyY2VwdCA9IOmavuW6pi/pgJrkv5fluqYpKirvvJoNCiAgICAtICAg5pyJ5Lqb6aKY5a655piT5b6X5YiG77yI5L6L5aaC77ya4oCc5oiR5Zac5qyi5ZKM5Lq66K+06K+d4oCd77yJ77yM5pyJ5Lqb6aKY6Zq+5b6X5YiG77yI5L6L5aaC77ya4oCc5oiR5Zac5qyi5ryU6K6y4oCd77yJDQogICAgLSAgICrnjrDnirbvvJoqIOi/meS4gOeCueS8oOe7n+aWueazle+8iElSVCDmiJYgU0VN77yJ6IO95q2j56Gu5aSE55CG77yI6YCa6L+H6aKY55uu5Y+C5pWw5oiW6L296I235oiq6Led77yJDQotICAgKirpopjnm67mlpznjocgKEl0ZW0gU2xvcGUgPSDlr7kgSVYg55qE5pWP5oSf5bqmKSoq77yaDQogICAgLSAgICrkuL7kvosq77ya6ZqP552A5bm06b6E5aKe6ZW/77yM4oCc5Zac5qyi5ZKM5Lq66K+06K+d4oCd6L+Z56eN5rip5ZKM55qE56S+5Lqk5Y+v6IO95Y+Y5YyW5LiN5aSn77yIU2xvcGUgJFxhcHByb3gkIDDvvInvvJvkvYbigJzllpzmrKLmvJTorrLigJ3ov5nnp43ov73msYLliLrmv4DnmoTnpL7kuqTlj6/og73kvJrmgKXliafkuIvpmY3vvIhTbG9wZSBcPCAw77yJDQogICAgLSAgICrnjrDnirYq77ya5Lyg57uf5pa55rOV6YCa5bi45LiN5Lya6aKd5aSW5aSE55CG6aKY55uu5pac546H77yM6ICM5piv5L2c5Li65Zu65a6a5pWI5bqU55qE5LiA6YOo5YiGDQogICAgLSAgICoq5qC45b+D6Zeu6aKYKirvvJpJViDlr7nkuI3lkIzpopjnm64oSXRlbXPvvIzlkI7mloflkIwp55qE6aKE5rWL5Yqb5piv5LiA5qC355qE5ZCX77yfDQoNCi0tLS0tLS0tLS0tLS0tDQoNCiMjIDIuIEFOT1ZB5Lit55qE5Lqk5LqS5L2c55SoDQoNCmBgYHtyIGludGVyYWN0aW9uLWRlbW8sIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTh9DQpzZXQuc2VlZCgxMjMpDQpuX3N1YmogPC0gNTANCmFnZSA8LSBybm9ybShuX3N1YmosIG1lYW4gPSAyMCwgc2QgPSAxMCkgIyBJVg0KDQojIOWBh+iuvuaehOW/teeUsTLkuKrpopjnm67mtYvph48NCiMgSXRlbSAxOiDpmo/lubTpvoTlop7plb/nqI3lvq7lop7liqAgKFNsb3BlID0gMC4wNSkNCiMgSXRlbSAyOiDpmo/lubTpvoTlop7plb/mmL7okZflh4/lsJEgKFNsb3BlID0gLTAuMDUpDQppdGVtMV9zY29yZXMgPC0gMC4wNSAqIGFnZSArIHJub3JtKG5fc3ViaikNCml0ZW0yX3Njb3JlcyA8LSAtMC4wNSAqIGFnZSArIHJub3JtKG5fc3ViaikNCg0KZGVtb19kYXRhIDwtIGRhdGEuZnJhbWUoDQogIElEID0gcmVwKDE6bl9zdWJqLCAyKSwNCiAgQWdlID0gcmVwKGFnZSwgMiksDQogIFNjb3JlID0gYyhpdGVtMV9zY29yZXMsIGl0ZW0yX3Njb3JlcyksDQogIEl0ZW0gPSByZXAoYygiSXRlbSAxICjmuKnlkoznpL7kuqQpIiwgIkl0ZW0gMiAo5Yi65r+A56S+5LqkKSIpLCBlYWNoID0gbl9zdWJqKQ0KKQ0KDQojIOiuoeeul+iBmuWQiOWIhuaVsCAoQWdncmVnYXRpb24pDQphZ2dfZGF0YSA8LSBkZW1vX2RhdGEgJT4lDQogIGdyb3VwX2J5KElELCBBZ2UsIEl0ZW0pICU+JQ0KICBzdW1tYXJpc2UoTWVhbl9TY29yZSA9IG1lYW4oU2NvcmUpKQ0KDQojIC0tLSDnu5/orqHmo4DpqowgKEFOT1ZBKSAtLS0NCg0KIyAxLiDkvKDnu5/ogZrlkIjliIbmnpDvvJrmo4DpqowgQWdlIOS4u+aViOW6lA0KIyDpgLvovpHvvJrlpoLmnpzlj6rnnIvlubPlnYfliIbvvIxBZ2Ug5pyJ5b2x5ZON5ZCX77yfDQptb2RlbF9hZ2cgPC0gbG0oTWVhbl9TY29yZSB+IEFnZSArIEl0ZW0sIGRhdGEgPSBhZ2dfZGF0YSkNCnByaW50KGFub3ZhKG1vZGVsX2FnZykpDQoNCiMgMi4g5Lqk5LqS5L2c55So5YiG5p6Q77ya5qOA6aqMIEFnZSDDlyBJdGVtDQojIOmAu+i+ke+8mkFnZSDlr7nliIbmlbDnmoTlvbHlk43vvIzmmK/lkKbkvp3otZbkuo7popjnm64oSXRlbSnnmoTkuI3lkIzvvJ8NCm1vZGVsX2ludGVyIDwtIGxtKFNjb3JlIH4gQWdlICogSXRlbSwgZGF0YSA9IGRlbW9fZGF0YSkNCnByaW50KGFub3ZhKG1vZGVsX2ludGVyKSkNCg0KDQojIC0tLSDnu5jlm74gLS0tDQpwMSA8LSBnZ3Bsb3QoZGVtb19kYXRhLCBhZXMoeCA9IEFnZSwgeSA9IFNjb3JlLCBjb2xvciA9IEl0ZW0sIGdyb3VwID0gSXRlbSkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMykgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFLCBzaXplID0gMS41KSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAi55yf5a6e5py65Yi277ya5pi+6JGX55qE5Lqk5LqS5L2c55SoIChJbnRlcmFjdGlvbikiLCANCiAgICAgICBzdWJ0aXRsZSA9ICJBTk9WQSDnu5PmnpzmmL7npLogQWdlOkl0ZW0g5Lqk5LqS6aG55pi+6JGXXG7or7TmmI7mlpznjofmlrnlkJHpmo/popjnm67ogIzlj5giKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KDQpwMiA8LSBnZ3Bsb3QoYWdnX2RhdGEsIGFlcyh4ID0gQWdlLCB5ID0gTWVhbl9TY29yZSkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuMykgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIHNpemUgPSAxLjUpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgbGFicyh0aXRsZSA9ICLogZrlkIjmjqnnm5bnnJ/nm7jvvJrkuLvmlYjlupTkuI3mmL7okZciLCANCiAgICAgICBzdWJ0aXRsZSA9ICJBTk9WQSDnu5PmnpzmmL7npLogQWdlIOS4u+aViOW6lCBwID4gLjA1XG7plJnor6/lnLDlvpflh7on5bm06b6E5peg5YWzJ+eahOe7k+iuuiIpDQoNCnAxICsgcDINCmBgYA0KDQo+DQotIElWIOS4jiBJdGVtcyDlrZjlnKjmmI7mmL7nmoTkuqTkupLkvZznlKjvvIjmlpznjofkuIDmraPkuIDotJ/vvIkNCi0g5b2T5Lqk5LqS5L2c55So5a2Y5Zyo77yM5L2G5pyq6KKr5bu65qih5pe277yM4oCc5Li75pWI5bqU4oCd5a6e6ZmF5LiK5piv5LiA5Liq6KKr5rGh5p+T55qE5oyH5qCH4oCU4oCU5a6D6KaB5LmI6KKr55u45Y+N55qE5pac546H5Lit5ZKM5oiQ5LqG5peg5oSP5LmJ55qE5bmz5Z2H5pWw77yM6KaB5LmI5YW25pi+6JGX5oCn5qOA6aqM5bu656uL5Zyo6ZSZ6K+v55qE6K+v5beu5Z+65YeG5LmL5LiKDQotIOWmguaenCBJViDkuI4gSXRlbXMg5a2Y5Zyo5Lqk5LqS5L2c55So77yM5L2G5YiG5p6Q5pe25rKh5pyJ5bu65qih5Lqk5LqS5L2c55So77yM5Lya5Y+R55Sf5LuA5LmI77yfDQoNCiMjIDMuIOW8gui0qOaApyhIZXRlcm9nZW5laXR5KeimgeaxguS4juWQjOi0qOaApyAoSG9tb2dlbmVpdHkpIOeahOivr+inow0KDQotIOacieeahOeglOeptuWcqOiuvuiuoemimOebruihqOi+vuamguW/tS/mnoTlv7Xml7bvvIzkuLrkuobpq5jlhoXlrrnmlYjluqYgKENvbnRlbnQgVmFsaWRpdHkp77yM5Lya5LuO5LiN5ZCM6KeS5bqm6K6+6K6h6aKY55uu77yM5L6L5aaC77yM5rWL6YeP4oCc5aSW5ZCR5oCn4oCd5pe277yM6ZyA6KaB5pei5pyJ4oCc5Zac5qyi5rS+5a+54oCd55qE6aKY55uu77yM5Lmf5pyJ4oCc5Zac5qyi5YWs5byA5ryU6K6y4oCd55qE6aKY55uu77yM6L+Z5Lqb6aKY55uu6Jm954S26YO95rWL5aSW5ZCR5oCn77yM5L2G5a6D5Lus6KaG55uW5LqG5p6E5b+155qE5LiN5ZCM5L6n6Z2i44CC6L+Z5Lqb6aKY55uu5pys6Lqr5a2Y5Zyo5byC6LSo5oCnDQotIOmimOebruWGhemDqOebuOWFs+mrmO+8jOS5n+S4jeS7o+ihqOWug+S7rOWvueWklumDqOWPmOmHj++8iElW77yJ55qE5Y+N5bqU77yIU2xvcGXvvInkuZ/mmK/kuIDmoLfnmoQNCi0g5aaC5p6c6YeP6KGo5peo5Zyo5rWL6YeP5LiA5Liq5a695rOb55qE5b+D55CG5p6E5b+177yIQnJvYWQgQ29uc3RydWN077yJ77yM6aKY55uu5pac546H55qE5byC6LSo5oCn5LiN5LuF5piv57uf6K6h5LiK55qE5b+F54S277yM5Lmf5piv55CG6K665LiK55qE5b+F54S2DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIyA0LiDmpoLljJbnkIborrogKEdlbmVyYWxpemFiaWxpdHkgVGhlb3J5KSDlvJXlj5HnmoTmgpborroNCg0KIyMjIDQuMSDmoLjlv4PliY3mj5DvvJrpopjnm67lhajln58gKEl0ZW0gVW5pdmVyc2UpIOS4juWPr+S6pOaNouaApw0KDQotIOmaj+acuuaKveagt+WBh+iuvu+8muS4uuS6hueglOeptuaViOW6pu+8jOWBh+iuvuiiq+ivleaYr+S7juS6uue+pOS4remaj+acuuaKveWPlueahO+8jOebuOS8vOeahO+8jOmHj+ihqOS4reeahOmimOebruS5n+W6lOW9k+iiq+inhuS4uuS7juKAnOmimOebruWFqOWfn+KAneS4remaj+acuuaKveWPlueahOagt+acrA0KLSDlj6/kuqTmjaLmgKcgKEV4Y2hhbmdlYWJpbGl0eSnvvJrml6LnhLbmmK/pmo/mnLrmir3moLfvvIzpgqPkuYjpopjnm67kuYvpl7TlupTor6XmmK/igJzlj6/kuqTmjaLigJ3nmoTvvIznu5/orqHnu5PorrrkuI3lupTlj5fliLbkuo7mgbDlpb3pgInnlKjkuoblk6rlh6DkuKrpopjnm64NCg0KKirmpoLljJbnkIborroqKuiupOS4uu+8muS4uuS6huiuqee7k+iuuuWFt+acieaOqOW5v+aAp++8jOe7n+iuoeS4iuW6lOWBh+iuvuS9v+eUqOeahOmimOebruaYr+S7juS4gOS4qioq5peg6ZmQ6aKY5bqTIChpbmZpbml0ZSBwb29sIG9mIGl0ZW1zKSoqIOS4remaj+acuuaKveWPlueahO+8jOmimOebruaWnOeOh+W6lOiiq+inhuS9nOmaj+acuuaViOW6lA0KDQojIyMgNC4yIOeOsOihjOWBmuazleeahOKAnOWPjOagh+KAnQ0KMS4gIOWvueiiq+ivlSAoUGFydGljaXBhbnRzKe+8muaJv+iupOWFtioq6ZqP5py65oCnKirvvIzlhYHorrjkuI3lkIzooqvor5XmnInkuI3lkIznmoTooajnjrDvvIzor5Xlm77lsIbnu5Porrrmjqjlub/liLDmnKrooqvmtYvph4/nmoTmgLvkvZPkurrnvqTjgIINCjIuICDlr7npopjnm64gKEl0ZW1zKe+8muebruWJjeeahOaooeWei+WPquWFgeiuuOmimOebruWcqCoq5oiq6LedKirkuIrpmo/mnLrlj5jljJbvvIjljbPmib/orqTpopjnm67mnInpmr7mmJPkuYvliIbvvInjgILmtonlj4rpopjnm67kuI7lpJbpg6jlj5jph4/vvIhJVu+8ieeahOWFs+ezu++8iOWNsyoq5pac546HKirvvInvvIzkvKDnu5/mqKHlnovlsLHlvLrooYzlgYforr7miYDmnInpopjnm67lr7kgSVYg55qE5Y+N5bqU5piv5a6M5YWo5LiA6Ie055qE77yIRml4ZWQgU2xvcGUsICRcYmV0YV8xJO+8ieOAgui/meenjeWBmuazleWunumZheS4iuaKiuWbuuWumueahOWHoOmBk+mimOebruW9k+aIkOS6huamguW/tS/mnoTlv7Xlhajpg6jmtYvph4/ojIPlm7QNCiQkIHlfe2lqfSA9IFxiZXRhXzAgKyB1X3swaX0gKyB1X3swan0gKyBcYmV0YV8xIHhfaSArIFxlcHNpbG9uX3tpan0gJCQNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDUuIOmXrumimOWHuueOsO+8mueOsOacieaooeWei+WvuWl0ZW1z6ZqP5py65pac546H6KeG6ICM5LiN6KeBDQoNCuaXoOiuuuaYr+eugOWNleeahOWbnuW9ku+8iEFnZ3JlZ2F0aW9u77yJ6L+Y5piv5aSN5p2C55qE57uT5p6E5pa556iL5qih5Z6L77yIU0VN77yJ77yM6YO95Zyo5LiN5ZCM56iL5bqm5LiK5b+96KeG5LqG6aKY55uu5bGC6Z2i55qE5pac546H5LiN5LiA6Ie044CCDQoNCiMjIyA1LjEg5Lik56eN5b+96KeG55qE5pa55byPDQoNCjEuICAqKuiBmuWQiOaooeWeiyAoQWdncmVnYXRpb24gUmVncmVzc2lvbikqKu+8mg0KICAgIC0gICDlgZrms5XvvJrmsYLlubPlnYfliIbjgIINCiAgICAtICAg5YGH6K6+77ya5omA5pyJ6aKY55uu5a+55p6E5b+155qE6LSh54yu55u4562J77yI5p2D6YeNPTHvvInvvIzkuJTlr7kgSVYg55qE5Y+N5bqU5pac546H5a6M5YWo55u45ZCM44CCDQogICAgLSAgIOe7k+aenO+8muS4ouWkseaJgOaciemimOebrueJueW8guaAp+S/oeaBr+OAgg0KMi4gICoq57uT5p6E5pa556iL5qih5Z6LIChDb21tb24gRmFjdG9yIC8gU0VNKSoq77yaDQogICAgLSAgIOWBmuazle+8mua9nOWPmOmHj+W7uuaooeOAgg0KICAgIC0gICDlgYforr7vvJrpopjnm67lr7kgSVYg55qE5Y+N5bqU5b+F6aG76YCa6L+H4oCc5r2c5Y+Y6YeP4oCd5Lyg5a+844CC5LiN5ZCM6aKY55uu55qE5pac546H6KKr5bmz5Z2H5LqG77yM6L+Z56eN5YGa5rOV5YGH5a6a77yM6IulIEl0ZW0xIOeahOi9veiNt+aYryBJdGVtMiDnmoQy5YCN77yM6YKj5LmIIEl0ZW0xIOWvuSBJViDnmoTmlpznjofkuZ/lv4XpobvkuKXmoLzmmK8gSXRlbTIg55qEMuWAjQ0KICAgIC0gICDlsYDpmZDvvJpJViDml6Dms5UqKuebtOaOpSoq5LiO5Y2V5LiqIEl0ZW0g5Lqn55Sf54us54m555qE5Lqk5LqS5L2c55So77yM5qih5Z6L5Lya5oqK6L+Z6YOo5YiG5pys6K+l5bGe5LqO4oCcUmFuZG9tIGl0ZW0gc2xvcGXigJ3nmoTlj5jlvILvvIzplJnor6/lnLDlvZPkvZzkuobljZXnuq/nmoTmrovlt64NCg0KIyMjIDUuMiDmqKHlnovlgYforr7lr7nmr5QNCg0KYGBge3Igc2ltdWxhdGlvbi1wbG90LCBmaWcuaGVpZ2h0PTUsIGZpZy53aWR0aD0xMn0NCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDEuIOaVsOaNrueUn+aIkO+8muaehOmAoOKAnOefm+ebvuKAneaDheWigw0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCnNldC5zZWVkKDk5OSkNCk4gPC0gMzAwDQpKIDwtIDUNCklWIDwtIHJub3JtKE4sIDAsIDEpDQoNCiMgQS4g55Sf5oiQ5r2c5Y+Y6YePIChGYWN0b3IpDQojIOWBh+iuviBJViDlr7nmvZzlj5jph4/mnInlvLrmraPlkJHlvbHlk40gKEJldGEgPSAwLjYpDQpMYXRlbnRfRiA8LSAwLjYgKiBJViArIHJub3JtKE4sIDAsIDAuOCkNCg0KIyBCLiDnlJ/miJDpopjnm64gKEl0ZW1zKQ0KIyDlhbPplK7ngrnvvJrmiYDmnInpopjnm67lnKjmtYvph4/mqKHlnovkuIrpg73mmK/igJzlpb3popjigJ3vvIjmraPlkJHovb3ojbfvvInvvIzlhoXpg6jkuIDoh7TmgKfpq5gNCiMgeSA9IDEuMCAqIEYgKyB1bmlxdWVfZWZmZWN0ICsgZXJyb3INCnNpbV9kYXRhX3dpZGUgPC0gZGF0YS5mcmFtZShJRCA9IDE6TiwgSVYgPSBJVikNCnNpbV9kYXRhX2xvbmcgPC0gZGF0YS5mcmFtZSgpDQoNCiMg6aKY55uuIDEtNO+8muWujOWFqOWQrOS7jua9nOWPmOmHj+aMh+aMpQ0KZm9yKGogaW4gMTo0KXsNCiAgeSA8LSAxLjAgKiBMYXRlbnRfRiArIHJub3JtKE4sIDAsIDEpIA0KICBzaW1fZGF0YV93aWRlW1twYXN0ZTAoInkiLCBqKV1dIDwtIHkNCiAgc2ltX2RhdGFfbG9uZyA8LSByYmluZChzaW1fZGF0YV9sb25nLCBkYXRhLmZyYW1lKElEPTE6TiwgSVY9SVYsIEl0ZW09cGFzdGUwKCJJdGVtIiwgaiksIFNjb3JlPXkpKQ0KfQ0KDQojIOmimOebriA177ya5Y+b6YCG6ICFIChJdGVtIFNwZWNpZmljIEVmZmVjdCkNCiMg5a6D6Jm954S25rWL6YeP5ZCM5LiA5Liq5r2c5Y+Y6YeP77yI5pyJICsxLjAgKiBG77yJ77yM5L2GIElWIOWvueWug+aciemineWklueahOebtOaOpei0n+mdouaJk+WHuyAoLTEuNSAqIElWKQ0KIyDlh4DmlYjlupQoTmV0IFNsb3BlKSDiiYggMC42IChmcm9tIEYpIC0gMS41IChEaXJlY3QpID0gLTAuOQ0KeTUgPC0gMS4wICogTGF0ZW50X0YgLSAxLjUgKiBJViArIHJub3JtKE4sIDAsIDEpDQpzaW1fZGF0YV93aWRlJHk1IDwtIHk1DQpzaW1fZGF0YV9sb25nIDwtIHJiaW5kKHNpbV9kYXRhX2xvbmcsIGRhdGEuZnJhbWUoSUQ9MTpOLCBJVj1JViwgSXRlbT0iSXRlbTUiLCBTY29yZT15NSkpDQoNCg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgMi4g5qih5Z6L5ouf5ZCIDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIC0tLSBBLiDogZrlkIjlm57lvZIgLS0tDQpzaW1fZGF0YV93aWRlJE1lYW5fU2NvcmUgPC0gcm93TWVhbnMoc2ltX2RhdGFfd2lkZVssIHBhc3RlMCgieSIsIDE6NSldKQ0KYWdnX21vZGVsIDwtIGxtKE1lYW5fU2NvcmUgfiBJViwgZGF0YSA9IHNpbV9kYXRhX3dpZGUpDQphZ2dfaW50ZXJjZXB0IDwtIGNvZWYoYWdnX21vZGVsKVsxXQ0KYWdnX3Nsb3BlICAgICA8LSBjb2VmKGFnZ19tb2RlbClbMl0NCg0KIyAtLS0gQi4gU0VNIChDb21tb24gRmFjdG9yKSAtLS0NCnNlbV9zeW50YXggPC0gJw0KICBGMSA9fiB5MSArIHkyICsgeTMgKyB5NCArIHk1DQogIEYxIH4gSVYNCicNCnNlbV9maXQgPC0gc2VtKHNlbV9zeW50YXgsIGRhdGEgPSBzaW1fZGF0YV93aWRlLCBzdGQubHYgPSBUUlVFKQ0KDQojIOaPkOWPliBTRU0g6ZqQ5ZCr55qE5Zue5b2S57q/DQplc3QgPC0gcGFyYW1ldGVyRXN0aW1hdGVzKHNlbV9maXQpDQpnYW1tYSA8LSBlc3RbZXN0JG9wID09ICJ+IiAmIGVzdCRsaHMgPT0gIkYxIiAmIGVzdCRyaHMgPT0gIklWIiwgImVzdCJdICMg5r2c5Y+Y6YeP5pac546HDQpzZW1fbGluZXMgPC0gZGF0YS5mcmFtZSgpDQoNCmZvcihqIGluIDE6NSl7DQogIGl0ZW1fbmFtZSA8LSBwYXN0ZTAoInkiLCBqKQ0KICAjIOaIqui3nQ0KICBudSA8LSBlc3RbZXN0JG9wID09ICJ+MSIgJiBlc3QkbGhzID09IGl0ZW1fbmFtZSwgImVzdCJdDQogIGlmKGxlbmd0aChudSk9PTApIG51IDwtIG1lYW4oc2ltX2RhdGFfd2lkZVtbaXRlbV9uYW1lXV0pDQogICMg6L296I23DQogIGxhbSA8LSBlc3RbZXN0JG9wID09ICI9fiIgJiBlc3QkcmhzID09IGl0ZW1fbmFtZSwgImVzdCJdDQogIA0KICAjIOi/memHjOeahOWFs+mUru+8mlNFTSDlvLrooYzorqTkuLog5pac546HID0g6L296I23ICogR2FtbWENCiAgIyDlm6DkuLogeTEteTQg6YO95piv5q2j55u45YWz77yMR2FtbWEg5piv5q2j55qE77yM5LiU5omA5pyJ6aKY55uu5YaF6YOo5q2j55u45YWz77yMDQogICMgU0VNIOS8muS8sOiuoeWHuiB5NSDnmoTovb3ojbfkuZ/mmK/mraPnmoTvvIjlm6DkuLogeTUg5Lmf5Y+XIExhdGVudF9GIOW9seWTje+8iQ0KICAjIOS6juaYryBTRU0g5Lya6ZSZ6K+v5Zyw6aKE5rWLIHk1IOmaj+edgCBJViDlop7liqDogIzlop7liqANCiAgaW1wbGllZF9zbG9wZSA8LSBsYW0gKiBnYW1tYQ0KICANCiAgdGVtcCA8LSBkYXRhLmZyYW1lKElWID0gc2VxKG1pbihJViksIG1heChJViksIGxlbmd0aC5vdXQ9MTAwKSwgSXRlbT1wYXN0ZTAoIkl0ZW0iLCBqKSkNCiAgdGVtcCRTY29yZSA8LSBudSArIGltcGxpZWRfc2xvcGUgKiB0ZW1wJElWDQogIHNlbV9saW5lcyA8LSByYmluZChzZW1fbGluZXMsIHRlbXApDQp9DQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIDMuIOe7mOWbvuWvueavlA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KDQpjb21tb25fdGhlbWUgPC0gdGhlbWVfYncoKSArIA0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFjZT0iYm9sZCIpKQ0KDQojIFBsb3QgMTogQWdncmVnYXRpb24NCnBfYWdnIDwtIGdncGxvdChzaW1fZGF0YV9sb25nLCBhZXMoeCA9IElWLCB5ID0gU2NvcmUpKSArDQogIGdlb21fcG9pbnQoY29sb3I9ImdyZXkiLCBhbHBoYT0wLjMpICsNCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gYWdnX2ludGVyY2VwdCwgc2xvcGUgPSBhZ2dfc2xvcGUsIGNvbG9yID0gIiNENTVFMDAiLCBzaXplID0gMikgKw0KICBsYWJzKHRpdGxlID0gIjEuIEFnZ3JlZ2F0aW9uIiwgc3VidGl0bGUgPSAi566A5Y2V5bmz5Z2H77yM5b275bqV5o6p55uWIEl0ZW0gNSIpICsgDQogIHlsaW0oLTQsIDQpICsgY29tbW9uX3RoZW1lDQoNCiMgUGxvdCAyOiBTRU0NCnBfc2VtIDwtIGdncGxvdCgpICsNCiAgZ2VvbV9wb2ludChkYXRhID0gc2ltX2RhdGFfbG9uZywgYWVzKHggPSBJViwgeSA9IFNjb3JlLCBjb2xvciA9IEl0ZW0pLCBhbHBoYSA9IDAuMSkgKw0KICBnZW9tX2xpbmUoZGF0YSA9IHNlbV9saW5lcywgYWVzKHggPSBJViwgeSA9IFNjb3JlLCBjb2xvciA9IEl0ZW0pLCBzaXplID0gMS4yKSArDQogIGxhYnModGl0bGUgPSAiMi4gU0VNIChDb21tb24gRmFjdG9yKSIsIA0KICAgICAgIHN1YnRpdGxlID0gIuW8uuWItuS4gOiHtOaAp++8mlxu55Sx5LqOIEl0ZW0gNSDlsZ7kuo7or6XmnoTlv7XvvIxTRU0g5by66KGM6aKE5rWL5a6DXG7pmo8gSVYg5aKe5Yqg6ICM5aKe5YqgICjntKvoibLnur/lkJHkuIop44CCXG7ov5nkuI7mlbDmja7kuovlrp4o5pWj54K55ZCR5LiLKeWujOWFqOebuOWPjSIpICsNCiAgeWxpbSgtNCwgNCkgKyBjb21tb25fdGhlbWUNCg0KIyBQbG90IDM6IFJlYWwgRGF0YSAvIFJJUw0KcF9yaXMgPC0gZ2dwbG90KHNpbV9kYXRhX2xvbmcsIGFlcyh4ID0gSVYsIHkgPSBTY29yZSwgY29sb3IgPSBJdGVtKSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC4yKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIHNpemUgPSAxLjIpICsNCiAgbGFicyh0aXRsZSA9ICIzLiBSZWFsIERhdGEgKFJJUykiLCANCiAgICAgICBzdWJ0aXRsZSA9ICLnnJ/nm7jvvJpcbkl0ZW0gNSAo57Sr6ImyKSDlrp7pmYXkuIrmmK/otJ/nm7jlhbPnmoTjgIJcbui/meaYryBTRU0g5peg5rOV5o2V5o2J55qE54m55byC5oCn5pac546H44CCIikgKw0KICB5bGltKC00LCA0KSArIGNvbW1vbl90aGVtZQ0KDQpwX2FnZyArIHBfc2VtICsgcF9yaXMNCmBgYA0KDQpgYGB7ciBzZW0tcGF0aC1kaWFncmFtLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04LCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbXlfbGFiZWxzIDwtIGMoIkl0ZW0gMSIsICJJdGVtIDIiLCAiSXRlbSAzIiwgIkl0ZW0gNCIsICJJdGVtIDUiLCAiSVYiLCAiRmFjdG9yIikNCg0Kc2VtUGF0aHMob2JqZWN0ID0gc2VtX2ZpdCwNCiAgICAgICAgIHdoYXQgPSAic3RkIiwNCiAgICAgICAgIHdoYXRMYWJlbHMgPSAic3RkIiwNCiAgICAgICAgIGxheW91dCA9ICJ0cmVlMiIsICANCiAgICAgICAgIGVkZ2UubGFiZWwuY2V4ID0gMSwgDQogICAgICAgICByb3RhdGlvbiA9IDIsDQogICAgICAgICBub2RlTGFiZWxzID0gbXlfbGFiZWxzLA0KKQ0KDQp0aXRsZSgiQ29tbW9uIEZhY3RvciBNb2RlbCAoU0VNKSDot6/lvoTlm74iLCBhZGogPSAwLjUsIGxpbmUgPSAyKQ0KbXRleHQoIklWIOWIsCBJdGVtIDUg5rKh5pyJ55u05o6l6Lev5b6E77yM5b+F6aG757uP6L+HIEYxIiwgc2lkZSA9IDEsIGxpbmUgPSAwLCBjZXggPSAxLjIpDQpgYGANCg0KDQoNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCg0KDQoNCg0KDQoNCiMg5LqM77ya55CG6K665qih5Z6L4oCU4oCUUmFuZG9tIEl0ZW0gU2xvcGUgUmVncmVzc2lvbiAoUklTUikNCg0K5LiN5LuF5LuF5piv57uf6K6h5pa55rOV55qE5pS55Y+Y77yM5pu05pivKirmtYvph4/lk7LlraYqKueahOaUueWPmOOAgg0KDQotICoqQWdncmVnYXRpb24qKjog5Z2H5YC85bCx5piv5LiA5YiHDQotICoqU0VNIChDb21tb24gRmFjdG9yKSoqOiDorqTkuLrpopjnm67mmK/mvZzlj5jph4/nmoTigJzlj43mmKAgKFJlZmxlY3RpdmUp4oCd44CCDQogICAgKiAgIOWBh+iuvu+8mumimOebruacrOi6q+ayoeacieeLrOeri+aEj+S5ie+8jOWug+S7rOWPquaYr+a9nOWPmOmHj+eahOKAnOWFi+mahuS9k+KAne+8jOWUr+S4gOeahOWMuuWIq+WcqOS6juS/oeW6pu+8iOi9veiNt++8iQ0KLSAqKlJhbmRvbSBJdGVtIFNsb3BlIFJlZ3Jlc3Npb24gKFByb3Bvc2VkKSoqOiDmoLnmja7mpoLljJbnkIborrrnmoTpgLvovpHvvIzorqTkuLrpopjnm67mmK/mnoTlv7XnmoTigJzmoLfmnKwgKFNhbXBsZSnigJ0NCiAgICAqICAg5YGH6K6+77ya6aKY55uu5piv5LuO5LiA5Liq5peg6ZmQ55qE6aKY5bqT5Lit6ZqP5py65oq95Y+W55qEDQogICAgKiAgIOaOqOiuuu+8muavj+S4qumimOebrumDveacieWFtueLrOeJueeahOS4iuS4i+aWh++8iENvbnRleHTvvInvvIxJViDlr7nkuI3lkIzpopjnm67nmoTlvbHlk43lj6/ku6XlrozlhajkuI3lkIzvvIjnlJroh7PmlrnlkJHnm7jlj43vvInvvIzov5nooqvop4bkuLoqKuecn+WunuWtmOWcqOeahOWPmOW8gioq77yM6ICM5LiN5piv5Zmq6Z+zDQoNCg0KIyMgMS4g5qih5Z6L55qE5pWw5a2m5o+P6L+wDQoNCiMjIyAxLjEg5Lyg57uf5qih5Z6LIHZzLiBSSVNS5qih5Z6LDQoNCioq5Lyg57uf6IGa5ZCI5Zue5b2SIChBZ2dyZWdhdGlvbiBNb2RlbCkqKu+8miDlgYforr7popjnm67lr7kgSVYg55qE5Y+N5bqU5piv5Zu65a6a55qE44CB5LiA6Ie055qE44CCDQokJCB5X2kgPSBcYmV0YV8wICsgXGJldGFfMSB4X2kgKyBcZXBzaWxvbl9pICQkDQoNCioq6ZqP5py66aKY55uu5pac546H5Zue5b2SIChSSVNSLCBFcXVhdGlvbiA0KSoq77yaIOWBh+iuvumimOebruaYr+S7jumimOW6k+S4remaj+acuuaKveWPlueahO+8jOWvuSBJViDnmoTmlY/mhJ/luqblkITkuI3nm7jlkIzjgIIgJCQgeV97aWp9ID0gXGJldGFfMCArIHVfezBpfSArIHVfezBqfSArIChcYmV0YV8xICsgXG1hdGhiZnt1X3sxan19KXhfaSArIFxlcHNpbG9uX3tpan0gJCQNCg0KDQrlhbbkuK3moLjlv4Plt67lvILlnKjkuo4gJFxtYXRoYmZ7dV97MWp9fSTvvJoNCg0KLSAgICoqJHVfezFqfSQgKFJhbmRvbSBJdGVtIFNsb3BlKSoqLCAkdV97MWp9IFxzaW0gTigwLCBcdGF1X3sxMX0pJO+8mg0KICAgICogICAqKumimOebruWvuSBJViDlj43lupTnmoTnibnlvILmgKcqKg0KICAgICogICDlroPku6Pooajkuobpopjnm64gJGokIOWvuSAkeCQg55qE5pWP5oSf56iL5bqm5YGP56a75bmz5Z2H5pac546HICRcYmV0YV8xJCDlpJrlsJENCiAgICAqICAg5a+55LqO6aKY55uuICRqJCDmnaXor7TvvIzlroPnnJ/lrp7nmoTmlpznjofmmK8gJChcYmV0YV8xICsgdV97MWp9KSQNCiAgICAqICAgKipBZ2dyZWdhdGlvbi9TRU0g6ZqQ5ZCr5YGH6K6+KirvvJokdV97MWp9ID0gMCQgKOWNs+aWueW3riAkXHRhdV97MTF9ID0gMCQpDQogICAgKiAgICoqUklTUiDmoLjlv4PlgYforr4qKu+8miRcdGF1X3sxMX0gPiAwJO+8jOihoemHj+S6humimOebrumXtOWvuSBJViDlj43lupTnmoTlvILotKjmgKfnqIvluqYNCg0KLSAgICoqJHVfezBpfSQgKFJhbmRvbSBQYXJ0aWNpcGFudCBJbnRlcmNlcHQpKiosICR1X3swaX0gXHNpbSBOKDAsIFx0YXVfezAwfV57KHN1YmopfSkk77yaDQogICAgKiAgICoq6KKr6K+V55qE54m55byC5oCnKioNCiAgICAqICAg5q+U5aaC77ya5byg5LiJ5pys6Lqr5bCx5YC+5ZCR5LqO5omT6auY5YiG77yM5LuW55qEICR1X3swaX0kIOWwseaYr+ato+eahA0KDQotICAgKiokdV97MGp9JCAoUmFuZG9tIEl0ZW0gSW50ZXJjZXB0KSoqLCAkdV97MGp9IFxzaW0gTigwLCBcdGF1X3swMH1eeyhpdGVtKX0pJO+8mg0KICAgICogICAqKumimOebrueahOmavuaYk+W6pi/pgJrkv5fluqYqKg0KICAgICogICDmr5TlpoLvvJrpopjnm64gMSDmjqrovp7lvojor7HkurrvvIzlpKflrrbpg73lrrnmmJPlvpfliIbvvIzlroPnmoQgJHVfezBqfSQg5bCx5piv5q2j55qEDQoNCi0gICAqKiRcZXBzaWxvbl97aWp9JCAoUmVzaWR1YWwpKiosICRcZXBzaWxvbl97aWp9IFxzaW0gTigwLCBcc2lnbWFeMikk77yaDQoNCg0KLS0tLS0tLS0tLS0tLQ0KDQojIyAyLiDplJnor6/lu7rmqKHnmoTnu5/orqHlkI7mnpzvvJpTRSDkvY7kvLDkuI4gdCDlgLzohqjog4ANCg0K5b+955WlICR1X3sxan0kIOS8muWvvOiHtOWBh+mYs+aAp++8iFR5cGUgSSBFcnJvcu+8ie+8jOagueacrOWOn+WboOWcqOS6jiR0JOWAvOiuoeeul+mUmeivr+OAgg0KDQojIyMgMi4xIHQg5YC855qE6K6h566X6YC76L6RDQoNCuWcqOe6v+aAp+WbnuW9kuS4re+8jOWIpOaWreaYvuiRl+aAp+eahCAkdCQg5YC86K6h566X5YWs5byP5Li677yaICQkIHQgPSBcZnJhY3tcdGV4dHtFc3RpbWF0ZX19e1x0ZXh0e1N0YW5kYXJkIEVycm9yfX0gPSBcZnJhY3tcaGF0e1xiZXRhfV8xfXtTRShcaGF0e1xiZXRhfV8xKX0gJCQNCg0K5aaC5p6c6aKY55uu5pys6Lqr5a2Y5Zyo5pac546H5Y+Y5byC77yIJFx0YXVfezExfSA+IDAk77yJ77yM5L2/55So5LqG5Lyg57uf5qih5Z6L77yI5b+955Wl5a6D77yJ5pe277yM5Lya5b6X5Yiw5LiA5LiqKirooqvkvY7kvLDnmoQgU0UqKuOAguWIhuavjeWPmOWwjyAkXHJpZ2h0YXJyb3ckIHQg5YC86Jma6auYICRccmlnaHRhcnJvdyQg5YGH6Ziz5oCn77yIVHlwZSBJIEVycm9y77yJ44CCDQoNCiMjIyAyLjIgU0Ug55qE6K6h566X6L+H56iLDQoNCuagueaNruiuuuaWh+mZhOW9leivgeaYju+8jOS4pOenjeaooeWei+WvuSBTRSDnmoTkvLDorqHmiKrnhLbkuI3lkIzvvJoNCg0KLSAgICoq5Lyg57uf5qih5Z6LIChOYWl2ZSBTRSkqKu+8miDorqTkuLrlj6ropoHlop7liqDooqvor5Xph48gJE4k77yM6K+v5beu5bCx6IO95peg6ZmQ57yp5bCP77yaDQokJCBTRV97bmFpdmV9IFxhcHByb3ggXHNxcnR7XGZyYWN7XHNpZ21hXjJfe3Jlc2lkdWFsfX17TiBcdGltZXMgSiBcdGltZXMgXHNpZ21hXjJfeH19ICQkIFw+IOW9kyAkTiBcdG8gXGluZnR5JO+8jCAkU0UgXHRvIDAk44CCDQoNCi0gICAqKlJJU1Ig5qih5Z6LIChUcnVlIFNFKSoq77yaIOW8leWFpeS6humimOebrumHh+agt+eahOS4jeehruWumuaAp++8iEdlbmVyYWxpemF0aW9uIEVycm9y77yJ77yM5Lul5LiL5YWs5byP55Sx5paH56ug5LitQTEw5Y+Y5b2i6ICM5p2l77yaDQokJCBTRV97dHJ1ZX0gXGFwcHJveCBcc3FydHtcZnJhY3tcc2lnbWFeMl97cmVzaWR1YWx9fXtOIFx0aW1lcyBKIFx0aW1lcyBcc2lnbWFeMl94fSArIFxtYXRoYmZ7XGZyYWN7XHRhdV97MTF9fXtKfX19ICQkIFw+IOW9kyAkTiBcdG8gXGluZnR5JO+8jOesrOS4gOmhuei2i+i/keS6jjDvvIzkvYbnrKzkuozpobkgJFxmcmFje1x0YXVfezExfX17Sn0kIOS+neeEtuWtmOWcqA0KDQoNCiMjIyAyLjMg5L2O5LywU0XnmoTlm6DntKANCg0K5q+U6L6DICoq55yf5a6e5qih5Z6LIFNFKiogKFJJU1IpIOWSjCAqKumUmeivr+aooeWeiyBTRSoqIChBZ2dyZWdhdGlvbi9OYWl2ZSkg55qE5q+U546H77yM5q+U546H6LaK5aSn77yM6K+05piO6ZSZ6K+v5qih5Z6L5L2O5Lyw5b6X6LaK5Lil6YeN77yI5Y2z6ZSZ5b6X6LaK56a76LCx77yJDQoNCueUsemZhOW9lSBBIOeahOaOqOWvvOWPr+S7peaehOmAoOavlOeOhyAkSyTvvJoNCg0KJCQNClx0ZXh0e1JhdGlvIH0gSyA9IFxmcmFje1NFX3tUcnVlfX17U0Vfe05haXZlfX0gPSBcc3FydHsxICsgXGZyYWN7SSBcY2RvdCBcdGF1X3sxMX0gXGNkb3Qgc194XjJ9e1xzaWdtYV4yICsgSiBcY2RvdCBcb21lZ2FfezAwfX19DQokJA0KDQotICoq5YiG5a2QKirvvJokSSQgKOiiq+ivleaVsCksICRcdGF1X3sxMX0kICjmlpznjoflj5jlvIIpLCAkc194XjIkIChJVuaWueW3rikNCi0gKirliIbmr40qKu+8miRcc2lnbWFeMiQgKOaui+W3riksICRKJCAo6aKY55uu5pWwKSwgJFxvbWVnYV97MDB9JCAo6KKr6K+V5oiq6Led5Y+Y5byCKQ0KDQoxLiDooqvor5XmlbDph48gKCRJJCkg6LaK5aSa77yM5L2O5Lyw6LaK5Lil6YeNDQoyLiDpopjnm67mlbDph48gKCRKJCkg6LaK5bCR77yM5L2O5Lyw6LaK5Lil6YeNIA0KMy4g6KKr6K+V5oiq6Led5Y+Y5byCICgkXG9tZWdhX3swMH0kKSDotorlsI/vvIzkvY7kvLDotorkuKXph40NCjQuIOW6lOivpeaYr+aui+W3rui2iuWwjyAoJFxzaWdtYV4yJCBzbWFsbGVyKe+8jOS9juS8sOaJjei2iuS4pemHje+8nw0KDQo+IH5+bGFyZ2VyIHVuZGVyZXN0aW1hdGlvbiB3aGVuIHRoZXJlIGlzIGxhcmdlciByZXNpZHVhbCBlcnJvciB2YXJpYW5jZSg/w5cpfn4NCg0KLS0tLS0tLQ0KDQojIyAzLiDmqKHmi5/pqozor4HvvJrlpKfmoLfmnKzmgpborroNCg0KYGBge3IgZXJyb3ItaW5mbGF0aW9uLXBsb3QsIGVjaG89RkFMU0UsIGZpZy5oZWlnaHQ9NSwgZmlnLndpZHRoPTl9DQojIC0tLSDmqKHmi5/lj4LmlbDorr7nva4gLS0tDQpOX3NlcSA8LSBzZXEoNTAsIDMwMDAsIGJ5ID0gNTApDQpKIDwtIDEwICAgICAgICAjIOmimOebruaVsOmHj+WbuuWumuS4ujEwDQp0YXVfMTEgPC0gMC4wNSAjIOmimOebruaWnOeOh+WPmOW8giAo55yf5a6e5a2Y5ZyoKQ0Kc2lnbWFfZXJyIDwtIDEgIyDmrovlt64NCg0KIyAtLS0g6K6h566X55CG6K66IFNFIC0tLQ0KIyAxLiBOYWl2ZSBTRSAo5Lyg57uf5qih5Z6LKTog6ZqPIE4g5aKe5Yqg6LaL6L+R5LqOIDANCnNlX25haXZlIDwtIHNxcnQoc2lnbWFfZXJyIC8gKE5fc2VxICogSikpDQoNCiMgMi4gVHJ1ZSBTRSAoUklTUik6IOmajyBOIOWinuWKoOi2i+i/keS6jiBzcXJ0KHRhdV8xMS9KKQ0KIyDorrrmloflhazlvI8gQTEwIOeahOeugOWMlueJiOmAu+i+kQ0Kc2VfdHJ1ZSAgPC0gc3FydChzaWdtYV9lcnIgLyAoTl9zZXEgKiBKKSArIHRhdV8xMSAvIEopDQoNCiMgLS0tIOaehOmAoOe7mOWbvuaVsOaNriAtLS0NCnBsb3RfZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBOID0gcmVwKE5fc2VxLCAyKSwNCiAgU0UgPSBjKHNlX25haXZlLCBzZV90cnVlKSwNCiAgVHlwZSA9IHJlcChjKCLkvKDnu5/mqKHlnosgKEFnZ3JlZ2F0aW9uL1NFTSkiLCAiUklTUiDmqKHlnosgKFByb3Bvc2VkKSIpLCBlYWNoID0gbGVuZ3RoKE5fc2VxKSkNCikNCg0KIyDjgJDlhbPplK7kv67mlLnjgJHvvJrmmL7lvI/mjIflrprlm6DlrZDmsLTlubPpobrluo/vvIznoa7kv53popzoibLmmKDlsITmraPnoa4NCiMg6aG65bqP77yaMS4g5Lyg57uf5qih5Z6LICjlr7nlupTnrKzkuIDkuKrpopzoibIgQmx1ZSksIDIuIFJJU1IgKOWvueW6lOesrOS6jOS4quminOiJsiBSZWQpDQpwbG90X2RhdGEkVHlwZSA8LSBmYWN0b3IocGxvdF9kYXRhJFR5cGUsIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIuS8oOe7n+aooeWeiyAoQWdncmVnYXRpb24vU0VNKSIsICJSSVNSIOaooeWeiyAoUHJvcG9zZWQpIikpDQoNCiMgLS0tIOe7mOWbviAtLS0NCmdncGxvdChwbG90X2RhdGEsIGFlcyh4ID0gTiwgeSA9IFNFLCBjb2xvciA9IFR5cGUpKSArDQogIGdlb21fbGluZShzaXplID0gMS4yKSArDQogICMg57uY5Yi2IFJJU1Ig55qE5p6B6ZmQ5LiL6ZmQIChBc3ltcHRvdGljIFN0YW5kYXJkIEVycm9yKQ0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSBzcXJ0KHRhdV8xMS9KKSwgbGluZXR5cGU9ImRhc2hlZCIsIGNvbG9yPSIjRDU1RTAwIiwgYWxwaGE9MC41KSArDQogIGFubm90YXRlKCJ0ZXh0IiwgeCA9IDIwMDAsIHkgPSBzcXJ0KHRhdV8xMS9KKSArIDAuMDAyLCANCiAgICAgICAgICAgbGFiZWwgPSAi5peg5rOV5raI6Zmk55qE5o6o5bm/6K+v5beuIChHZW5lcmFsaXphdGlvbiBFcnJvcikiLCANCiAgICAgICAgICAgY29sb3IgPSAiI0Q1NUUwMCIsIGZvbnRmYWNlID0gImJvbGQiLCB2anVzdCA9IC0wLjUpICsNCiAgIyDmoIfms6jlt67lvILljLrln58NCiAgZ2VvbV9yaWJib24oYWVzKHltaW4gPSAwLCB5bWF4ID0gU0UsIGZpbGwgPSBUeXBlKSwgYWxwaGEgPSAwLjEsIGNvbG9yID0gTkEpICsNCiAgbGFicyh0aXRsZSA9ICLlpKfmoLfmnKzmgpborrogKFRoZSBCaWcgTiBQYXJhZG94KSIsDQogICAgICAgc3VidGl0bGUgPSAi6JOd6Imy57q/ICjkvKDnu5/mqKHlnospIOmUmeivr+WcsOiupOS4uuWinuWKoOagt+acrOmHj+WPr+S7peWwhuivr+W3rumZjeS4ujBcbue6ouiJsue6vyAoUklTUikg5om/6K6k6aKY55uu5piv5pyJ6ZmQ6YeH5qC355qE77yMU0Ug5Lya5pS25pWb5Yiw5LiA5Liq6Z2e6Zu255qE5LiL6ZmQIiwNCiAgICAgICB5ID0gZXhwcmVzc2lvbihwYXN0ZSgiU3RhbmRhcmQgRXJyb3Igb2YgIiwgaGF0KGJldGEpWzFdKSksIA0KICAgICAgIHggPSAi5qC35pys6YePIChTYW1wbGUgU2l6ZSwgTikiKSArDQogICMg5by65Yi25oyH5a6a6aKc6Imy77yaTGV2ZWwgMSAo5Lyg57ufKSAtPiBCbHVlLCBMZXZlbCAyIChSSVNSKSAtPiBSZWQNCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoIiMwMDcyQjIiLCAiI0Q1NUUwMCIpKSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGMoIiMwMDcyQjIiLCAiI0Q1NUUwMCIpKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iLCANCiAgICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlPSJib2xkIiwgc2l6ZT0xNCkpDQpgYGANCg0KPiAqKuWbvuinoyoq77ya5Lyg57uf5qih5Z6L77yI6JOd6Imy57q/77yJ77yM5b2TICROPTMwMDAkIOaXtu+8jFNFIOWHoOS5juS4uiAw77yM5q2k5pe25ZOq5oCVICRcaGF0e1xiZXRhfSQg5Y+q5pyJ5b6u5bCP55qEIDAuMDHvvIzorqHnrpflh7rnmoQgJHQkIOWAvOS5n+S8muW+iOWkp++8jOWvvOiHtOaYvuiRl+eahOe7k+aenOOAgui/meino+mHiuS6huS4uuS7gOS5iOWkp+aVsOaNrumbhueJueWIq+WuueaYk+WHuueOsCBSYW5kb20gSXRlbSBTbG9wZSDlr7zoh7TnmoTlgYfpmLPmgKfjgIINCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDQuIOS4uuS7gOS5iOW4uOeUqOaMh+agh+aXoOazleiviuaWre+8nw0KDQrkuLrku4DkuYggQ3JvbmJhY2gncyAkXGFscGhhJCDmiJYgU0VNIOaooeWei+aLn+WQiO+8iENGSS9STVNFQe+8ieaXtuayoeacieWPkeeOsO+8nw0KDQojIyMgNC4xIENyb25iYWNoJ3MgJFxhbHBoYSQg55qE55uy5Yy6DQoNCiRcYWxwaGEkIOezu+aVsOWPjeaYoOeahOaYr+mimOebruWIhuaVsOeahOWGhemDqOS4gOiHtOaAp+OAgiANCiQkIFZhcih5X3tpan0pID0gXHVuZGVyYnJhY2V7XG9tZWdhX3swMH19X3tcdGV4dHvkurrkuI7kurrnmoTlt6jlpKflt67lvIJ9fSArIFx0YXVfezAwfSArIFx1bmRlcmJyYWNle1x0YXVfezExfXhfaV4yfV97XHRleHR75b6u5bCP55qE5pac546H5beu5byCfX0gKyBcc2lnbWFeMiAkJA0KDQokJCBcYWxwaGEgXGFwcHJveCBcZnJhY3tKIFxjZG90IFxvbWVnYV97MDB9fXtKIFxjZG90IFxvbWVnYV97MDB9ICsgKFxzaWdtYV4yICsgXHRhdV97MTF9KX0gJCQNCg0KLSAgICoq546w54q2KirvvJrooqvor5Xpl7TnmoTmiKrot53lt67lvILvvIgkXG9tZWdhX3swMH0k77yM5Y2z5pyJ5Lqb5Lq65oC75piv5YiG6auY77yJ6YCa5bi45Y2g5o2u5LqG57ud5aSn6YOo5YiG5pa55beu44CCDQotICAgKirnm7LljLoqKu+8miRcdGF1X3sxMX0k77yI5a+5IElWIOeahOWPjeW6lOW3ruW8gu+8ieWNoOavlOW+iOWwj+OAgiRcYWxwaGEkIOS4u+imgeWPjeaYoOaIqui3neeahOS4gOiHtOaAp++8iCRcb21lZ2FfezAwfSTvvInvvIzlr7nmlpznjoflsYLpnaLnmoTlvILotKjmgKfvvIgkXHRhdV97MTF9JO+8ieS4jeaVj+aEnyAoSW5zZW5zaXRpdmUp77yMUmFuZG9tIEl0ZW0gU2xvcGUg55qE5a2Y5Zyo5a6e6ZmF5LiK5Lya5aKe5Yqg6KeC5a+f5Yiw55qE5oC75Y+Y5byC77yM5Y+v6IO9KuW+ruW8seWcsCrlop7liqAgJFxhbHBoYSQNCg0KIyMjIDQuMiBTRU0g5ouf5ZCI5oyH5pWw55qE5qy66aqX5oCnDQoNCiAqKkNvbW1vbiBGYWN0b3IgUmVncmVzc2lvbioq6Jm954S25q+U6IGa5ZCI5Zue5b2S5Lil6LCo77yM5a6D5pys6LSo5LiK5piv5LiA5LiqKipDb25zdHJhaW5lZCoqIE1vZGVs77yM5a6D5by66L+r5omA5pyJ6aKY55uu6YCa6L+H5r2c5Y+Y6YeP5Lqn55Sf6IGU57O777yaDQoNCjEuICAqKuaui+W3ruWQuOaUtioq77yaU0VNIOWwhiBSYW5kb20gU2xvcGUg55qE5Y+Y5byC77yIJHVfezFqfXhfaSTvvInop4bkuLrpmo/mnLror6/lt67vvIhSZXNpZHVhbHMsICRcZXBzaWxvbiTvvInjgIINCjIuICAqKuaLn+WQiOaMh+agh+WBh+mYs+aApyoq77ya5Y+q6KaB6L+Z5Lqb5Y+Y5byC5rKh5pyJ56C05Z2P5pW05L2T55qE5Y2P5pa55beu57uT5p6E77yI6YCa5bi456Gu5a6e5rKh5pyJ77yM5Zug5Li65a6D5Lus5piv5YWz5LqO5pac546H55qE77yM6ICM5LiN5piv5YWz5LqO5oiq6Led55qE77yJ77yMU0VNIOeahOaLn+WQiOaMh+aVsO+8iEdsb2JhbCBGaXQgSW5kaWNlc++8ieWwseS8muWHuueOsCoq5YGH6Zi05oCnKirvvIzljbPmmI7mmI7mqKHlnovorr7lrprplJnkuobvvIzkvYYgQ0ZJIOS+neeEtiA+IDAuOTXjgIINCg0KKirlrp7or4Hor4Hmja4gKFJlYWwgRGF0YSkqKu+8miDorrrmlofkvb/nlKjkuoYgJE49NTY0JCDnmoTnnJ/lrp7mlbDmja7lj5HnjrDvvIzljbPkvb8gKipDRkkgPSAwLjk1NiwgUk1TRUEgPSAwLjA4NyoqIOi/meagt+iiq+iupOS4uuKAnOWPr+aOpeWPl+KAneeahOaooeWei++8jOWcqOS9v+eUqCBSSVNSIOajgOmqjOWQju+8jOS+neeEtuWPkeeOsOS6huaYvuiRl+eahCBSYW5kb20gSXRlbSBTbG9wZXPvvIzkuJTmjqjnv7vkuobkuYvliY3nmoTmmL7okZfmgKfnu5PorrrjgIINCg0KPiAqKue7k+iuuioq77ya6auY5L+h5bqmICgkXGFscGhhJCkg5ZKM6auY5ouf5ZCI5bqmIChDRkkpICoq5LiN6IO9Kiog5L2c5Li65LiN5a2Y5ZyoIFJhbmRvbSBJdGVtIFNsb3BlIOeahOivgeaNruOAgg0KDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQoNCg0KDQoNCiMg5LiJ77ya5a6e6K+B6K+B5o2u4oCU4oCU5qih5ouf5LiO55yf5a6e5pWw5o2uDQoNCummluWFiOWcqOaooeaLn+eOr+Wig+S4i+ivgeaYjuS8oOe7n+aooeWei+S8mueKr+mUme+8jOeEtuWQjuWcqOecn+WunueOr+Wig++8iOWunua1i+aVsOaNru+8ieS4reivgeaYjui/meenjeaDheWGteehruWunuWtmOWcqA0KDQojIyAxLiDmqKHmi5/noJTnqbYgKFNpbXVsYXRpb24gU3R1ZHkpDQoNCuaWh+eroOaehOW7uuS6hiA3MiDnp43kuI3lkIznmoTlj4LmlbDnu4TlkIjvvIzns7vnu5/mlLnlj5jkuobmoLfmnKzph48gKCROJCnjgIHpopjnm67mlbDph48gKCRKJCkg5ZKM6ZqP5py65pac546H55qE5pa55beu5aSn5bCPICgkXHRhdV97MTF9JCnjgIINCg0KIyMjIDEuMSDmoLjlv4Plj5HnjrDvvJpUeXBlIEkg6ZSZ6K+v546H6Iao6IOADQoNCuWcqOaooeaLn+S4re+8jOiuvuWumiBJViDlkowgRFYg55qEKirnnJ/lrp7lhbPns7vkuLogMCAoJFxiZXRhXzEgPSAwJCkqKuOAguWboOatpO+8jOS7u+S9leKAnOaYvuiRl+KAneeahOe7k+aenOmDveaYr+WBh+mYs+aAp++8iFR5cGUgSSBFcnJvcu+8ieOAgg0KDQo8aW1nIHNyYz0iZmlncy9maWczLnBuZyIvPg0KDQotIOW9k+WtmOWcqOmaj+acuumimOebruaWnOeOh++8iCRcdGF1X3sxMX0gPiAwJO+8ieaXtu+8jOmaj+edgOagt+acrOmHjyAoJE4kKSDnmoTlop7liqDvvIzplJnor6/njofpo5nljYfvvIznlJroh7PmjqXov5EgMTAwJe+8jOWNsyoq5aSn5qC35pys5oKW6K66KioNCi0g5peg6K665qC35pys6YeP5aSa5aSn77yM6ZSZ6K+v546H5aeL57uI5o6n5Yi25ZyoMC4wNeS7peS4iw0KDQojIyMgMS4yIOW+ruW8seeahOmaj+acuumimOebruaWnOeOh+S5n+W9seWTjeW3qOWkpw0K5qih5ouf5pi+56S677yM5Y2z5L2/6ZqP5py66aKY55uu5pac546H55qE5pa55beu6Z2e5bi45bCP77yI5LuF5Y2g55u45YWz6K+v5beu5pa55beu55qEICoqMC41NDklKirvvInvvIzlnKjlpKfmoLfmnKzkuIvvvIgkTj0xMDAwJO+8ieS5n+i2s+S7peWvvOiHtOS8oOe7n+aooeWei+eahOe7n+iuoeaOqOaWreWkseaViO+8jOivtOaYjuS7peW+gOeglOeptuS4reWtmOWcqOaZrumBjeeahOmakOaCo+OAgg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyMgMi4g55yf5a6e5pWw5o2u5YiG5p6QIChSZWFsIFdvcmxkIERhdGEpDQoNCuS9nOiAheaUtumbhuS6hiAkTj01NjQkIOeahOaVsOaNru+8jOS9v+eUqOS6huW/g+eQhuWtpuW4uOeUqOeahOmHj+ihqO+8iOWmguWkp+S6lOS6uuagvOOAgeiHquaIkeWunueOsOmHj+ihqOetie+8ieWSjOWPjeW6lOaXtuS7u+WKoeOAgg0KDQojIyMgMi4xIOahiOS+i++8muW5tOm+hOS4juiHquaIkeWunueOsCAoQWdlICYgU2VsZi1BY3R1YWxpemF0aW9uKQ0KDQrkuIDkuKrmiI/liafmgKfnmoTkvovlrZDvvIzkuIDpobnmjqLnqbbigJzlubTpvoTigJ3mmK/lkKbpooTmtYvigJzoh6rmiJHlrp7njrDigJ3lvpfliIbnmoTnoJTnqbbkuK3jgIINCg0KPGltZyBzcmM9ImZpZ3MvZmlnNS0xLnBuZyIvPg0KDQoqKuaooeWei+e7k+aenOWvueavlCoqDQoNCuS8oOe7n+iBmuWQiOWbnuW9kuS4jiBSSVNSIOaooeWei+eahOe7k+aenOS4re+8jOWbnuW9kuezu+aVsCAoJGIkKSDmmK/nm7jlkIznmoTvvIzkvYbmoIflh4bor68gKCRTRSQpIOWPkeeUn+S6huWJp+eDiOWPmOWMlg0KDQp8IOaooeWei+exu+WeiyB8IOWbnuW9kuezu+aVsCAoJFxoYXR7XGJldGF9XzEkKSB8IOagh+WHhuivryAoJFNFJCkgfCAkdCQg5YC8IHwgJHAkIOWAvCB8IOWunui0qOe7k+iuuiB8DQp8IDotLS0gfCA6LS0tIHwgOi0tLSB8IDotLS0gfCA6LS0tIHwgOi0tLSB8DQp8IEFnZ3JlZ2F0aW9uIHwgLTAuMDYyIHwgMC4wMTUgKOiiq+S9juS8sCkgfCAtNC4xOCB8IDwgLjAwMSAo5pi+6JGXKSB8IOW5tOm+hOi2iuWkp++8jOiHquaIkeWunueOsOaEn+i2iuS9jiB8DQp8IFJJU1IgfCAtMC4wNjIgfCAwLjAzMiAo5bey5qCh5q2jKSB8IC0xLjk2IHwgLjA2NiAo5LiN5pi+6JGXKSB8IOW5tOm+hOS4juiHquaIkeWunueOsOaEn+aXoOaYvuiRl+WFs+ezuyB8DQoNCioqUklTUiDkvLDorqHlh7rnmoQgJFNFJCDmmK/kvKDnu5/mlrnms5XnmoQgMiDlgI3lpJrjgILov5nnm7TmjqXlr7zoh7TmmL7okZfmgKfmtojlpLHvvIzmjqjnv7vkuobljp/mnInnu5PorrrjgIIqKg0KDQo8YnI+DQoNCjxpbWcgc3JjPSJmaWdzL2ZpZzUtMi5wbmciLz4NCg0K5Li65LuA5LmI5Lya5pyJ6L+Z5LmI5aSn55qE5beu5byC77yf5qOA5p+l5Y2V5Liq6aKY55uu55qE5pac546H5pyJ5Lul5LiL5Y+R546w77yaDQoNCnwg6aKY55uu57G75Z6LIHwg5Luj6KGo6aKY55uuIChJdGVtcykgfCDlr7nlubTpvoTnmoTlj43lupQgKFNsb3BlKSB8IOW/g+eQhuWtpuino+mHiiB8DQp8IDotLS0gfCA6LS0tIHwgOi0tLSB8IDotLS0gfA0KfCDpqbHliqjlm6DlrZAgKERyaXZlcnMpIHwgSXRlbSA4ICgiSSBmZWFyIGZhaWx1cmUiKTxicj5JdGVtIDE0ICgi4oCcSSBhbSBib3RoZXJlZCBieSBmZWFycyBvZiBiZWluZyBpbmFkZXF1YXRlIikgfCDlvLrotJ/nm7jlhbMgKOmaj+W5tOm+hOWkp+W5heS4i+mZjSkgfCDlubTpvoTlop7plb/mmL7okZfpmY3kvY7kuobigJzlr7nlpLHotKXnmoTmgZDmg6figJ0gfA0KfCDml6DlhbPlm6DlrZAgKE5ldXRyYWxzKSB8IOWkp+mDqOWIhuWFtuS7lumimOebriB8IOaOpei/kembtiDmiJYg5b6u5byx5q2j55u45YWzIHwg5bm06b6E5a+56Ieq5oiR5a6e546w55qE5YW25LuW57u05bqm5b2x5ZON55Sa5b6uIHwNCg0KKirnu5PorrrvvJoqKuaJgOiwk+eahOKAnOaYvuiRl+i0n+ebuOWFs+KAneWujOWFqOaYr+eUseWwkeaVsOWHoOS4quWFs+S6juKAnOaBkOaDp+KAneeahOmimOebrumpseWKqOeahO+8jFJJU1Ig5YOP5LiA5oqK5omL5pyv5YiA77yM5YiH5YiG5LqG5p6E5b+15bGC6Z2i5ZKM6aKY55uu5bGC6Z2i55qE5pWI5bqU44CCDQpSSVNS55qE5YiG5p6Q5p2l55yL77yM5bm06b6E5aKe6ZW/5Y+v6IO95Y+q5piv6K6p5Lq64oCc5LiN5YaN5a6z5oCV5aSx6LSl4oCd77yM6ICM5LiN5piv4oCc6Ieq5oiR5a6e546w5oSf6ZmN5L2O4oCdDQoNCg0KIyMjIDIuMiDmma7pgY3mgKcNCuWcqOa1i+ivleeahOaJgOaciSBJVi1EViDnu4TlkIjkuK3vvIzpmo/mnLrpopjnm67mlpznjofmma7pgY3lrZjlnKjjgILlnKjmn5Dkupvmg4XlhrXkuIvvvIxSSVNSIOS8sOiuoeWHuueahOmaj+acuuaWnOeOh+aWueW3rueUmuiHs+i/nOWkp+S6juaooeaLn+S4reiuvuWumueahOawtOW5s+OAgui/meihqOaYjui/h+WOu+aWh+eMruS4reiuuOWkmuKAnOWwj+iAjOaYvuiRl+KAneeahOWkp+agt+acrOaViOW6lO+8jOWPr+iDveWPquaYr+eUseS6jumHj+ihqOS4rea3t+WFpeS6huWHoOS4quWvuSBJViDnibnliKvmlY/mhJ/nmoTpopjnm67jgIINCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQoNCg0KDQoNCg0KDQojIOWbm++8muaAu+e7k+S4juWunumZheW6lOeUqA0KDQojIyAxLiDmgLvnu5PorqjorrogKEdlbmVyYWwgRGlzY3Vzc2lvbikNCg0KIyMjIDEuMSDlrp7ot7Xlu7rorq4NCjEuICAqKuitpuaDleWkp+agt+acrOS4reeahOW+ruWwj+aYvuiRl+aViOW6lCoq77ya5b2TICROJCDlvojlpKfkuJTmlYjlupTph4/lvojlsI/ml7bvvIzlv4XpobvogIPomZHpopjnm67mlpznjoflvILotKjmgKfnmoTlvbHlk43jgIINCjIuICAqKuS9nOS4uuaVj+aEn+aAp+WIhuaekCAoU2Vuc2l0aXZpdHkgQ2hlY2spKirvvJrkuI3kuIDlrpropoHlrozlhajmipvlvIPkvKDnu5/mlrnms5XvvIzkvYblupTkvb/nlKggUklTUiDpqozor4HmoLjlv4Pnu5PorrrmmK/lkKbnqLPlgaXjgIINCjMuICAqKuS4jeimgei/t+S/oSBGaXQgSW5kaWNlcyoq77yaQ0ZJIOWSjCBBbHBoYSDns7vmlbDml6Dms5Xor4rmlq3ov5nkuKrpl67popjjgIINCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMjIDIuIEhvdyB0byBmaXQgUklTUg0KDQpSSVNSIOacrOi0qOS4iuaYr+S4gOS4qiAqKuS6pOWPieWIhuexu+a3t+WQiOaViOW6lOaooeWeiyAoQ3Jvc3MtQ2xhc3NpZmllZCBNaXhlZC1FZmZlY3RzIE1vZGVsKSoq44CC5LmL5omA5Lul5Y+r4oCc5Lqk5Y+J4oCd77yM5piv5Zug5Li65q+P5Liq6KKr6K+V6YO95Zue562U5LqG5omA5pyJ6aKY55uu77yI5oiW5aSn6YOo5YiG77yJ77yM6KKr6K+V5ZKM6aKY55uu5LiN5piv5bWM5aWX5YWz57O777yM6ICM5piv5Lqk5Y+J5YWz57O7DQoNCuS9v+eUqCBgbG1lNGAg5YyF5Y+v5a6e546wIFJJU1Ig5qih5Z6L44CCDQokJFx0ZXh0e1Njb3JlfV97aWp9IFxzaW0gXGJldGFfMCArIChcYmV0YV8xICsgdV97MWp9KSBcY2RvdCBcdGV4dHtJVn1faSArICh1X3swaX0gKyB1X3swan0pICsgXGVwc2lsb25fe2lqfSQkDQoNCuWcqGBsbWU0YOivreazleS4reeahOihqOi+vu+8mg0KDQpgYGByDQpsaWJyYXJ5KGxtZTQpDQoNCnJpc3JfbW9kZWwgPC0gbG1lcigNCiAgU2NvcmUgfiBJViArICAgICAgICAgICAgICAgICMg5Zu65a6a5pWI5bqU77ya6KaB5rWL55qE5bmz5Z2H5YWz57O7DQogICAgKDEgfCBJRCkgKyAgICAgICAgICAgICAgICAjIOmaj+acuuaIqui3nSAo6KKr6K+VKe+8muavj+S4quS6uuWfuuehgOWIhuS4jeWQjA0KICAgICgxICsgSVYgfCBJdGVtKSwgICAgICAgICAgIyDpmo/mnLrmlpznjocgKOmimOebrinvvJrlhbPplK7vvIHlhYHorrggSVYg5a+55LiN5ZCMIEl0ZW0g55qE5b2x5ZON5LiN5ZCMDQogIGRhdGEgPSBsb25nX2RhdGENCikNCmBgYA0KDQojIyMgMi4xIOaVsOaNruWHhuWkhw0K6KaB5rGCKirplb/mlbDmja7moLzlvI8gKExvbmcgRm9ybWF0KSoq77yM5q+P6KGM5piv5LiA5Liq6KeC5a+f5YC8DQpzaW5nbGUgc3ViamVjdCBhbnN3ZXJzIHNpbmdsZSBpdGVtIHJlc3BvbnNlIGRhdGEgaW4gbG9uZyBmb3JtYXQNCg0KIyMjIDIuMiDku6PnoIHnpLrojIMNCueUn+aIkOaooeaLn+aVsOaNrumbhu+8jOa8lOekuuKAnOiBmuWQiOWbnuW9kuKAnei9rOWQkeKAnFJJU1LigJ0NCg0KYGBge3IgbW9kZWwtY29tcGFyaXNvbiwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkobG1lNCkNCmxpYnJhcnkoYnJvb20ubWl4ZWQpDQpsaWJyYXJ5KGxtZXJUZXN0KSAjIOiuoeeulyBwIOWAvA0KDQojIDEuIOS8oOe7n+iBmuWQiOWbnuW9kiAoQWdncmVnYXRpb24pDQojIOmcgOimgeWFiOiuoeeul+W5s+Wdh+WIhg0KYWdnX2RmIDwtIHNpbV9kYXRhX2xvbmcgJT4lIA0KICBncm91cF9ieShJRCwgSVYpICU+JSANCiAgc3VtbWFyaXNlKE1lYW5fU2NvcmUgPSBtZWFuKFNjb3JlKSkNCm1vZGVsX2FnZyA8LSBsbShNZWFuX1Njb3JlIH4gSVYsIGRhdGEgPSBhZ2dfZGYpDQoNCiMgMi4g6ZqP5py65oiq6Led5qih5Z6LIChSYW5kb20gSW50ZXJjZXB0IE9ubHkpDQojIOi/meaYr+W+iOWkmueglOeptuiAheivr+eUqOeahOaooeWei++8jOWPquiAg+iZkeS6humimOebrumavuW6puS4jeWQjO+8jOayoeiAg+iZkeaWnOeOh+S4jeWQjA0KbW9kZWxfcmkgPC0gbG1lcihTY29yZSB+IElWICsgKDF8SUQpICsgKDF8SXRlbSksIGRhdGEgPSBzaW1fZGF0YV9sb25nKQ0KDQojIDMuIOmaj+acuumimOebruaWnOeOh+aooeWeiyAoUklTUiAtIFByb3Bvc2VkKQ0KIyDlhYHorrggKDEgKyBJViB8IEl0ZW0pDQptb2RlbF9yaXNyIDwtIGxtZXIoU2NvcmUgfiBJViArICgxfElEKSArICgxICsgSVYgfCBJdGVtKSwgZGF0YSA9IHNpbV9kYXRhX2xvbmcpDQoNCiMgLS0tIOaPkOWPlue7k+aenOi/m+ihjOWvueavlCAtLS0NCg0KIyDovoXliqnlh73mlbDmj5Dlj5bns7vmlbANCmdldF9yZXMgPC0gZnVuY3Rpb24obW9kLCBuYW1lKSB7DQogIGlmKGluaGVyaXRzKG1vZCwgImxtIikpIHsNCiAgICByZXMgPC0gdGlkeShtb2QpICU+JSBmaWx0ZXIodGVybSA9PSAiSVYiKQ0KICB9IGVsc2Ugew0KICAgIHJlcyA8LSB0aWR5KG1vZCwgZWZmZWN0cyA9ICJmaXhlZCIpICU+JSBmaWx0ZXIodGVybSA9PSAiSVYiKQ0KICB9DQogIHJlcyAlPiUgc2VsZWN0KGVzdGltYXRlLCBzdGQuZXJyb3IsIHN0YXRpc3RpYywgcC52YWx1ZSkgJT4lIG11dGF0ZShNb2RlbCA9IG5hbWUpDQp9DQoNCnJlc190YWJsZSA8LSByYmluZCgNCiAgZ2V0X3Jlcyhtb2RlbF9hZ2csICIxLiBBZ2dyZWdhdGlvbiAoT0xTKSIpLA0KICBnZXRfcmVzKG1vZGVsX3JpLCAgIjIuIFJhbmRvbSBJbnRlcmNlcHRzIChMTU0pIiksDQogIGdldF9yZXMobW9kZWxfcmlzciwiMy4gUklTUiAoUHJvcG9zZWQpIikNCikNCg0KcHJpbnQocmVzX3RhYmxlKQ0KYGBgDQoNCiMjIyAyLjMg57uT5p6c6Kej6K+7DQoxLiAgKipFc3RpbWF0ZSAo5Zue5b2S57O75pWwKSoq77yaDQogICAgKiAgIOS4ieS4quaooeWei+eahCAkXGJldGEkIOS8sOiuoeWAvOWHoOS5juaYr+S4gOagt+eahCAo57qmIDAuMTcp44CCDQogICAgKiAgICoq5Y6f5ZugKirvvJpSSVNSIOW5tuS4jeaUueWPmOKAnOW5s+Wdh+aViOW6lOKAneeahOS8sOiuoe+8jOWug+aUueWPmOeahOaYr+Wvuei/meS4quW5s+Wdh+aViOW6lOKAnOehruWumuaAp+KAneeahOWIpOaWreOAgg0KDQoyLiAgKipTdGQuRXJyb3IgKOagh+WHhuivrykqKu+8mg0KICAgICogICAqKkFnZ3JlZ2F0aW9uKio6IFNFIOmdnuW4uOWwjyAoMC4wNSnjgILlm6DkuLrlroPorqTkuLrpopjnm67mmK/lm7rlrprnmoTvvIzmoLfmnKzph48gJE49MzAwJCDotrPlpJ/lpKfjgIINCiAgICAqICAgKipSSVNSKio6IFNFIOWJp+WiniAoMC4yNCnvvIHlm6DkuLrlroPmhI/or4bliLAgSXRlbSA1IOWSjOWFtuS7liBJdGVtIOW3ruW8guW3qOWkp++8jOaOqOW5v+WIsOKAnOmimOW6k+KAneaXtuWFhea7oeS6huS4jeehruWumuaAp+OAgg0KDQozLiAgKipQLXZhbHVlICjmmL7okZfmgKcpKirvvJoNCiAgICAqICAgKipBZ2dyZWdhdGlvbioqOiAkcCA8IC4wMDEkICgqKuaYvuiRlyoqKeOAgui/meaYr+S4gOS4quWBh+mYs+aAp+e7k+iuuu+8iFR5cGUgSSBFcnJvcu+8ieOAgg0KICAgICogICAqKlJJU1IqKjogJHAgPSAwLjUkICgqKuS4jeaYvuiRlyoqKeOAgui/meaYr+ato+ehrueahOe7k+iuuuKAlOKAlOWboOS4uumimOebrumXtOaegeWFtuS4jeS4gOiHtO+8jOaXoOazleaWreiogCBJViDlr7nor6XmnoTlv7XmnInnqLPlrprnmoTmraPlkJHlvbHlk43jgIINCg0KDQojIyMgMi40IFJJU1Ig5Yiw5bqV55yL5Yiw5LqG5LuA5LmI77yfDQoNClJJU1Ig55qE5by65aSn5LmL5aSE5Zyo5LqO5a6D5Y+v5Lul5Lyw6K6h5Ye65q+P5Liq6aKY55uu54us54m555qE5pac546H77yIQkxVUHMsIEJlc3QgTGluZWFyIFVuYmlhc2VkIFByZWRpY3Rpb25z77yJ77yM5Y+v5Lul5oqK5qih5Z6L4oCc55y85Lit4oCd55qE6aKY55uu5pac546H55S75Ye65p2l44CCDQoNCmBgYHtyIHJpc3ItdmlzdWFsaXphdGlvbiwgZmlnLmhlaWdodD02LCBmaWcud2lkdGg9OH0NCiMg5o+Q5Y+W6ZqP5py65pWI5bqUDQpyYW5lZl9kYXRhIDwtIHJhbmVmKG1vZGVsX3Jpc3IpJEl0ZW0NCnJhbmVmX2RhdGEkSXRlbSA8LSByb3duYW1lcyhyYW5lZl9kYXRhKQ0KIyDlm7rlrprmlYjlupQNCmZpeGVkX3Nsb3BlIDwtIGZpeGVmKG1vZGVsX3Jpc3IpWyJJViJdDQpmaXhlZF9pbnRlcmNlcHQgPC0gZml4ZWYobW9kZWxfcmlzcilbIihJbnRlcmNlcHQpIl0NCg0KIyDorqHnrpfmr4/kuKrpopjnm67nmoTmgLvmlpznjocgKEZpeGVkICsgUmFuZG9tKQ0KaXRlbV9zbG9wZXMgPC0gcmFuZWZfZGF0YSAlPiUNCiAgbXV0YXRlKA0KICAgIFRvdGFsX1Nsb3BlID0gZml4ZWRfc2xvcGUgKyBJViwNCiAgICBUb3RhbF9JbnRlcmNlcHQgPSBmaXhlZF9pbnRlcmNlcHQgKyBgKEludGVyY2VwdClgDQogICkNCg0KIyDnu5jlm74NCmdncGxvdCgpICsNCiAgIyDog4zmma/vvJrljp/lp4vmlbDmja7ngrkNCiAgZ2VvbV9wb2ludChkYXRhID0gc2ltX2RhdGFfbG9uZywgYWVzKHggPSBJViwgeSA9IFNjb3JlKSwgY29sb3IgPSAiZ3JleSIsIGFscGhhID0gMC4xKSArDQogICMg57q/5p2h77yaUklTUiDkvLDorqHnmoTmr4/pgZPpopjnmoTlm57lvZLnur8NCiAgZ2VvbV9hYmxpbmUoZGF0YSA9IGl0ZW1fc2xvcGVzLCANCiAgICAgICAgICAgICAgYWVzKGludGVyY2VwdCA9IFRvdGFsX0ludGVyY2VwdCwgc2xvcGUgPSBUb3RhbF9TbG9wZSwgY29sb3IgPSBJdGVtKSwNCiAgICAgICAgICAgICAgc2l6ZSA9IDEpICsNCiAgIyDnspfpu5Hnur/vvJrlubPlnYfmlYjlupQgKEZpeGVkIEVmZmVjdCkNCiAgZ2VvbV9hYmxpbmUoaW50ZXJjZXB0ID0gZml4ZWRfaW50ZXJjZXB0LCBzbG9wZSA9IGZpeGVkX3Nsb3BlLCANCiAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBzaXplID0gMiwgbGluZXR5cGUgPSAiZGFzaGVkIikgKw0KICBsYWJzKHRpdGxlID0gIlJJU1Ig5qih5Z6L55qE6YCP6KeG5Zu+IiwNCiAgICAgICBzdWJ0aXRsZSA9ICLomZrnur/kuLrlubPlnYfmlYjlupQgKOS4jeaYvuiRlynvvIzlvanoibLlrp7nur/kuLrlkITpopjnm67nmoTnibnlrprmlYjlupTjgIJcbuaooeWeiyfnnIvliLAn5LqGIEl0ZW0gNSAo57Sr6ImyKSDnmoTliafng4jlj43lkJHvvIzlm6DmraTigJzmg6nnvZrigJ3kuobmlbTkvZPnmoTmmL7okZfmgKfjgIIiLA0KICAgICAgIHggPSAiSW5kZXBlbmRlbnQgVmFyaWFibGUgKElWKSIsIHkgPSAiSXRlbSBTY29yZSIpICsNCiAgdGhlbWVfbWluaW1hbCgpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCmBgYA0KDQo+IOS8oOe7n+eahCBBZ2dyZWdhdGlvbiDmiJYgU0VNIOivleWbvuWvu+aJvuS4gOadoeacgOiDveS7o+ihqOaJgOacieS6uueahOe6v++8iOiZmue6v++8ieOAgg0KPiDogIwgUklTUiDmib/orqTmr4/kuIDmnaHlvanoibLnur/nmoTnnJ/lrp7mgKfjgILlvZPlvanoibLnur/vvIjpopjnm67mlpznjofvvInlg4/ov5nmoLflj5HmlaPvvIhIZXRlcm9nZW5laXR577yJ5pe277yMUklTUiDkvJrorqTkuLrvvJrigJzomb3nhLblubPlnYfnur/mmK/lubPnmoTmiJblvq7mraPnmoTvvIzkvYbnlLHkuo7popjnm67pl7TliIbmraflpKrlpKfvvIzov5nkuKrlubPlnYfnu5PmnpwqKuS4jeWPr+mdoCoq44CC4oCdDQoNCg0KIyMgMy4g57uT6K+t77ya5L2V5pe25bqU6K+l5L2/55SoIFJJU1LvvJ8NCg0KRG9ubmVsbGFuIGV0IGFsLiAoMjAyNSkg5bm25LiN5bu66K6u5bqf6ZmkIFNFTe+8jOiAjOaYr+aPkOWHuuS6huS4gOenjeabv+S7o+inhuinkuOAgg0KDQp8IOe7tOW6piB8IFNFTSAoQ29tbW9uIEZhY3RvcikgfCBSSVNSIChNaXhlZCBNb2RlbHMpIHwNCnwgOi0tLSB8IDotLS0gfCA6LS0tIHwNCnwgKirpgILnlKjlnLrmma8qKiB8IOaehOW/teWumuS5ieaegeWFtuS4peagvO+8jOmimOebruW/hemhu+mrmOW6puWQjOi0qCAo5aaC5pm65Yqb5rWL6aqMIGcg5Zug57SgKSB8IOaehOW/teWumuS5ieWuveazm++8jOmimOebruWFt+acieW8gui0qOaApyAo5aaC5aSW5ZCR5oCn77ya5ryU6K6yIHZzIOiBiuWkqSkgfA0KfCAqKuWvueS4jeS4gOiHtOaWnOeOh+eahOWkhOeQhioqIHwg6KeG5Li65Zmq6Z+z5oiW5qih5Z6L5ouf5ZCI5beuIChCYWQgRml0KSB8IOinhuS4uuecn+WunuWPmOW8giAoUmVhbCBWYXJpYW5jZSnvvIzlubbnurPlhaUgU0Ug6K6h566XIHwNCnwgKirnu5Porrrmjqjlub/mgKcqKiB8IOS7heaOqOW5v+WIsOKAnOW9k+WJjei/mee7hOmimOebruKAnSB8IOaOqOW5v+WIsOKAnOivpeaehOW/teeahOaJgOaciea9nOWcqOmimOebruKAnSB8DQoNCj4gUklTUiAiVHJlYXQgaXRlbXMgYXMgcmFuZG9tIHNhbXBsZXMsIG5vdCBmaXhlZCBpbmRpY2F0b3JzLiINCg0KUklTUiDlubbkuI3mmK/opoHlkKblrprov4fljrvnmoTmiYDmnInnoJTnqbbvvIzogIzmmK/mj5DphpLnoJTnqbbogIXlnKjlpITnkIYqKuW8gui0qOaAp+mimOebrioq5ZKMKirlpKfmoLfmnKzmlbDmja4qKuaXtu+8jOmcgOimgeabtOWKoOiwpuWNkeWcsOWvueW+hee7n+iuoeaOqOaWreeahOS4jeehruWumuaAp+OAguW9k+WjsOensOWPkeeOsOS6huS4gOS4quWFs+S6juKAnOaehOW/teKAneeahOecn+eQhuaXtu+8jOimgeehruS/nei/meS4quecn+eQhuS4jeaYr+S7heeUseWFtuS4reS4gOS4pOS4qumimOebrumpseWKqOeahOOAgg0KDQoNCioq5LiA54K554K55bCP5bu25Ly4KioNCg0KLSDogZrlkIjmqKHlnosgKEFnZ3JlZ2F0aW9uKSDlu7rmqKHov4fnqIvmmK/mnInmjZ/ljovnvKkgKExvc3N5IENvbXByZXNzaW9uKeeahO+8jOWcqOi/meS4quWOi+e8qei/h+eoi+S4reS4ouW8g+S6hiAkSi0xJCDkuKrnu7TluqbnmoTkv6Hmga/vvIzkurrkuLrlnLDlubPmu5HkuobmlbDmja7vvIzpmY3kvY7kuobmlbDmja7nmoQqKueGtSAoRW50cm9weSkqKg0KLSBSSVNSIOaooeWei+S/neeVmSAkTiBcdGltZXMgSiQg55qE5a6M5pW05pWw5o2u57uT5p6E77yM5LiN6L+b6KGM6aKE5YWI5Y6L57yp77yM5LiN5LuF6K+75Y+W5LqG4oCc5Z2H5YC84oCd77yI5Li75pWI5bqU77yJ77yM6L+Y6K+75Y+W5LqG4oCc5beu5byC4oCd77yI5byC6LSo5oCn77yJDQoNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyBUaGFuayB5b3UhDQo=