在nginx的配置文件nginx.conf中,我们在配置server的时候,会配置一下location指令,这个location指令是提供给用户来配置对于符合指令的http请求,采用该指令内部的处理方式。这里面分成两步

第一步:nginx系统分析用户定义nginx.conf中server的location,将配置信息保存在内存里面,保存的数据结构方式可以参考前面第五部分说的。

        location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}

第二步:nginx启动后,客户端发送来http请求,根据请求的HOST查找到配置的server,根据POST 或者GET等的链接地址,匹配合适的location,选择配置的location配置信息来执行http请求的处理过程。下面是一个简单php脚本,处理用户上传文件

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
</head>
<body>
<form action="" method='post' enctype="multipart/form-data" >
<h3>添加图片</h3>
<input type="hidden" name='ft' value="down" />
选择要上传的文件:
<input type="file" name="img_file" id="img_file" />
<input type="submit" name="submit_file" value="upload" />
</form>
</body>
</html> <?php var_dump($_FILES);

我们从服务端抓包看到的协议信息,很上传的内容。为了便于阅读,做了简单的处理。

POST(空格)/test/testUpload.php(空格)HTTP/1.1(/r/n)
Host:(空格)10.221.20.175(/r/n)
User-Agent:(空格)Mozilla/5.0.(Windows.NT.6.1;.rv:35.0).Gecko/20100101.Firefox/35.0(/r/n)
Accept:(空格)text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8(/r/n)
Accept-Language:.zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3(/r/n)
Accept-Encoding:(空格)gzip,(空格)deflate(/r/n)
Referer:(空格)http://10.221.20.175/test/testUpload.php(/r/n)
Connection:(空格)keep-alive(/r/n)
Content-Type:(空格)multipart/form-data;(空格)boundary=---------------------------19247233154350(/r/n)
Content-Length:(空格)450(/r/n)(/r/n)
-----------------------------11242276917535(/r/n)
Content-Disposition:(空格)form-data;(空格)name="ft"(/r/n)(/r/n)
down(/r/n)
-----------------------------11242276917535(/r/n)
Content-Disposition:(空格)form-data;(空格)name="img_file";(空格)filename="default"(/r/n)
Content-Type:.application/octet-stream(/r/n)(/r/n)
#.You.may.add.here.your.#.server.{..
-----------------------------11242276917535(/r/n)
Content-Disposition:(空格)form-data;(空格)name="submit_file"(/r/n)(/r/n)
upload(/r/n)
-----------------------------11242276917535--(/r/n)

下面,我们从nginx的源码来看看整个过程。

用户配置了一个server,其中配置一段location,那么nginx在分析到location的时候主要完成以下几步

1、nginx对server中location指令的分析在ngx_http_core_module.c中

    { ngx_string("location"),
NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_BLOCK|NGX_CONF_TAKE12,
ngx_http_core_location,
NGX_HTTP_SRV_CONF_OFFSET,
,
NULL },

2、分析到location指令,会执行ngx_http_core_location函数,该函数完成以下几个步骤

* 申请一个变量ctx,包含三个指针,第一个指针指向http的主配置信息,一个指向该location所在server的配置信息,另外一个指向location的配置信息

* 申请一段内存,内存内每个指针指向各自http模块的loc_conf,初始化loc_conf

* 分析location的参数

* 分析location里面的指令,例如下面的root,fastcgi_pass等,完成配置信息的定制过程。

ngx_http_core_location(ngx_conf_t *cf, ngx_command_t *cmd, void *dummy)
{
char *rv;
u_char *mod;
size_t len;
ngx_str_t *value, *name;
ngx_uint_t i;
ngx_conf_t save;
ngx_http_module_t *module;
ngx_http_conf_ctx_t *ctx, *pctx;
ngx_http_core_loc_conf_t *clcf, *pclcf; ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t));
if (ctx == NULL) {
return NGX_CONF_ERROR;
} pctx = cf->ctx;
ctx->main_conf = pctx->main_conf;
ctx->srv_conf = pctx->srv_conf; ctx->loc_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module);
if (ctx->loc_conf == NULL) {
return NGX_CONF_ERROR;
} for (i = ; ngx_modules[i]; i++) {
if (ngx_modules[i]->type != NGX_HTTP_MODULE) {
continue;
} module = ngx_modules[i]->ctx; if (module->create_loc_conf) {
ctx->loc_conf[ngx_modules[i]->ctx_index] =
module->create_loc_conf(cf);
if (ctx->loc_conf[ngx_modules[i]->ctx_index] == NULL) {
return NGX_CONF_ERROR;
}
}
} clcf = ctx->loc_conf[ngx_http_core_module.ctx_index];
clcf->loc_conf = ctx->loc_conf; value = cf->args->elts; if (cf->args->nelts == ) { len = value[].len;
mod = value[].data;
name = &value[]; if (len == && mod[] == '=') { clcf->name = *name;
clcf->exact_match = ; } else if (len == && mod[] == '^' && mod[] == '~') { clcf->name = *name;
clcf->noregex = ; } else if (len == && mod[] == '~') { if (ngx_http_core_regex_location(cf, clcf, name, ) != NGX_OK) {
return NGX_CONF_ERROR;
} } else if (len == && mod[] == '~' && mod[] == '*') { if (ngx_http_core_regex_location(cf, clcf, name, ) != NGX_OK) {
return NGX_CONF_ERROR;
} } else {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ,
"invalid location modifier \"%V\"", &value[]);
return NGX_CONF_ERROR;
} } else { name = &value[]; if (name->data[] == '=') { clcf->name.len = name->len - ;
clcf->name.data = name->data + ;
clcf->exact_match = ; } else if (name->data[] == '^' && name->data[] == '~') { clcf->name.len = name->len - ;
clcf->name.data = name->data + ;
clcf->noregex = ; } else if (name->data[] == '~') { name->len--;
name->data++; if (name->data[] == '*') { name->len--;
name->data++; if (ngx_http_core_regex_location(cf, clcf, name, ) != NGX_OK) {
return NGX_CONF_ERROR;
} } else {
if (ngx_http_core_regex_location(cf, clcf, name, ) != NGX_OK) {
return NGX_CONF_ERROR;
}
} } else { clcf->name = *name; if (name->data[] == '@') {
clcf->named = ;
}
}
} pclcf = pctx->loc_conf[ngx_http_core_module.ctx_index]; if (pclcf->name.len) { /* nested location */ #if 0
clcf->prev_location = pclcf;
#endif if (pclcf->exact_match) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ,
"location \"%V\" cannot be inside "
"the exact location \"%V\"",
&clcf->name, &pclcf->name);
return NGX_CONF_ERROR;
} if (pclcf->named) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ,
"location \"%V\" cannot be inside "
"the named location \"%V\"",
&clcf->name, &pclcf->name);
return NGX_CONF_ERROR;
} if (clcf->named) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, ,
"named location \"%V\" can be "
"on the server level only",
&clcf->name);
return NGX_CONF_ERROR;
} len = pclcf->name.len; #if (NGX_PCRE)
if (clcf->regex == NULL
&& ngx_strncmp(clcf->name.data, pclcf->name.data, len) != )
#else
if (ngx_strncmp(clcf->name.data, pclcf->name.data, len) != )
#endif
{
ngx_conf_log_error(NGX_LOG_EMERG, cf, ,
"location \"%V\" is outside location \"%V\"",
&clcf->name, &pclcf->name);
return NGX_CONF_ERROR;
}
} if (ngx_http_add_location(cf, &pclcf->locations, clcf) != NGX_OK) {
return NGX_CONF_ERROR;
} save = *cf;
cf->ctx = ctx;
cf->cmd_type = NGX_HTTP_LOC_CONF; rv = ngx_conf_parse(cf, NULL); *cf = save; return rv;
}

3、下面是location参数信息的存储结构,一个server中所有的lcoation参数,例如 location /, location ~ \.php$ 等会经过分析后,存储到每个server的loc_conf指向的ngx_http_core_module配置信息项location指向的双向链表中。 aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGQAAAMbCAIAAACExdQIAAAgAElEQVR4nOzdfYwb54Hnef6xe+7JBjaxgL3cjFZTuagnhdVqUqNRMqUd7qo2xo6IUWAVjfGKa8AnRi2cKfgS0VDDoidr18JwNz0w0LwkLXNn1hKzaUMcyx4xvbqIXvhO5ejWR1hpiRBsmSbQOiqwu6lbx2acTrsmLxLvjyeuobupVr+wWC/8fvCD0aS6iw/bapG/fp56KtQGAAAAACwTcnsAAAAAAOBFlCUAAAAA6IKyBAAAAABdUJYAAAAAoAvKEgAAAAB0QVkCAAAAgC4oSwAAAADQBWUJAAAAALqgLAEAAABAF5QlAAAAAOiCsgQAAAAAXVCWAAAAAKALyhIAAAAAdEFZAgAAAIAuKEsAAAAA0AVlCQAAAAC6oCwBAAAAQBeUJQAAAADogrIEAAAAAF1QlgAAAACgC8oSAAAAAHRBWQIAAACALihLAAAAANAFZQkAAAAAuqAsAQAAAEAXlCUAAAAA6IKyBAAAAABdUJYAAAAAoAvKEgAAAAB0QVkCAAAAgC4oSwAAAADQBWUJAAAAALqgLAEAAABAF5QlAAAAAOgigGWp2WxalnXz17+8+auPb1ofSb+3+f99582b1kci3OQmN7nJTW4G+2bi3/35/Ls/ad+84fYLMgD4XtDK0s1f/13s39575cfnb7TeJYQQQgYw586cWrw+e6P17s1fvP/xz97PP/ec2y/OAOBXASpLN3598xc/df0lihBCCPFO5uqXxv/jX9z81cduv0gDgC8FoSw1m83Ev/vzGz97z/XXJEIIIcSbufmLn7IwDwDWyv9l6ebNmx+3zp055frrECGEEOLlfPBuPX34m5Zluf3KDQC+4fuydPPjlusvP4QQQoj3s3h99uSJPPNLALB6Pi5LzWbz45/9D9dfewghhBAf5ebC/2jfvOn2azgA+IOPy1Lm6GPPTYy7/qpDCCGE+Cs3rY/cfg0HAH/wcVli7ztCCCFkHZmrV40nn3T7ZRwAfMCvZenmb37l+osNIYQQ4scsXp997jsTbr+SA4AP+LYsffwz119sCCGEEL/mZ3Nuv5IDgA/4sixVKpWzf3vS/VcaQgghxLe5+eu/c/v1HAC8zpdl6dz/9errr067/jJDCCGE+Dc3P/6Z26/nAOB1vixLN39luf4aQwghhPg66f8tVa1W3X5JBwBP82dZ+uUvXH+NIYQQQnydS6+fa7Vabr+kA4Cn+bMsWR+5/hpDCCGE+DsfNd1+PQcAr/NlWTK+lXH/NYYQQgjxdShLAHA7lCVCCCFkIENZAoDb8WVZYhkeIYQQssGM/8e/KJfLbr+kA4CnUZYIIYSQgOfi+VfOnTm1JN/7T9/527/9W9M0TdOs1Wpuv7YDgBdRlgghhJAgRDSicSPz5NFHd9+r7YruDH1C2bZ1V3TnsvxL7ROyLNufPDQ0JO5Mp9OGYZimyQ7jAAaWL8sS5ywRQgghH1y7cvqF5w8fOqhs22o3oqPpR548+ujZl6fOnTl1myPc4pwly7LEdFMulzMMQ9M0RVFCoZAsy5qmZTKZbDZrmqZlWX1+9QeA/qMsEUIIIb7JXP2SXZDCd925d8/uiXHj4vlX1nO0NW7wUKvVTNPMZrOZTEbTtKGhIVmWk8lkPp9n6glAUPmyLLEMjxBCyEBl8frsyePH9u7ZHbnn7g0VpI5sfIOHWq1WKBRSqZSYehLzTqVSqdlknz0AAUFZIoQQQryb0y88v//BB8J33bnv/vtOv/B8D4985cf/d29bjZh30nU9EolIkpRKpUqlEqv1APgaZYkQQgjxXObqlw4fOijmkU4cm1i8Ptv7R3HyOkuNRiOfz+u6PjQ0FIvF8vl8o9Fw7uEAwCG+LEucs0QIISSouXq5sv/BB6TNmybGjbn6JQcfq18XpS2Xy6lUSpIkWZbT6bRpmv15XADYOMoSIYQQ4olcuWCKmuTUVNKS9Kss2Wq1Wi6X0zQtHA4nEolCodBqtfo8BgBYE1+WJZbhEUIICVKuXDD37tktD285cWyibw+68Q0e1q3VahWLxWQyGYlEEolEqVRyZRgAcFuUJUIIIcS1LF6fPZp+RNm2tbebN6wmPd/gYR0syyoWi2JPiFQqxRbkALyGskQIIYS4k7MvT0mbN40bmX4suluevi/DW0Gz2czn84qiSJJkGAa7QQDwCF+WJc5ZIoQQ4utcvVzZfa+2+17N2S0cVo6XypKt0WgYhiFJkqqq+Xyek5oAuIuyRAghhPQ1E+OGPLzl7MtTLo/Ek2XJVqlUUqmU2ArCrXOrAMCXZYlleIQQQvyYD65d2X2vdvjQQXfW3X06Lm7wsCbFYjEWi0mSxEQTgP6jLBFCCCH9yLkzpzwxofRJvLDBw+o1Go1UKiX2gajVak48hCRJoXX57Gc/u74vdNFXv/pVt4ewZrFYbGhoyO1RBNbv/M7vrOnzw+GwEz+GHkRZIoQQQpyN2PJuV3Snm2coLY+3l+F1ZVlWPp+XZVnTtGKx2NuDh0LrfFMkSZK/dqQwDOMrX/lKoVBweyBrYJqmqqqSJLk9kFUxDMMwDLdHsQaNRiMSiazpS9b98+I7vnyenLNECCHEL/ng2pVd0Z3jhvdeuXxYlmymaSYSiUgkks1mezU/RlnyMsqSoyhLK/Dl86QsEUII8UWuXDCVbVtff3Xa9ZF0iZ/LktBsNjOZjCRJyWSyUqls8GiUJS+jLDmKsrQCXz5PluERQgjxfs6dOaXu2H71csX1kXSNXzZ4uC3LsgqFgqqqqqpuZG0eZcnLKEuOoiytwJfPk7JECCHE4zlxbGL3vdoH1664PpJbxV8bPKxGpVJJJBKSJK2vBlCWvIyy5CjK0gp8+TwpS4QQQryco+lH9j/4gBf2B18p/l+G11Wj0Ugmk5FIJJfLWZa1+i+kLHkZZclRlKUV+PJ5cs4SIYQQz2b/gw94cTuH5QloWRKazWY6nY5EIoZhrPLqTJQlL6MsOYqytAJfPk/KEiGEEG9m/4MPnDg24fowVpVAlyWh1WoZhiFJUjqdXr7msFQqdU49UZa8jLLkKMrSCnz5PFmGRwghxIPxU1MK0AYPt9VqtXK5nNg0z241lmVFIpFkMml/GmXJyyhLjqIsrcCXz5OyRAghxGvxV1O6EcQNHlYmNs2TJCmRSFSr1VwuFwqFQqGQ3RkoS15GWXIUZWkFvnyelCXiej64duXcmVOrzJULpusDJoQ4l8Xrs/vuv89fTelGayCW4XVVLBa3bt06NDQkytLQ0FCtVmtTlryNsuQoytIKfPk8OWeJOJq5+qVzZ06dfXnqyaOPPnn00d33aruiO3dFd0qbN4U+Eb7rTnHnaiIPbwl1kDZv2hXdufteTRz/5PFj586cunj+FdefOCFkffHdnNJvM6hlqd1up9Ppzn+WFUWxLIuy5GWUJUdRllbgy+dJWSK9yuL12XNnTk2MGw9//aFd0Z2Re+4OhUKRe+7uLDNnX54SE0S9urLk1cuVzjK27/77dkV3Ktu22j3q8KGD40amh49ICHEu4gfZ9WGsJ4NalprNpj2tZBP1aX0HpCz1AWXJUZSlFfjyebIMj6w7r786feLYxJNHHxXVaOiOO0Q5eW5i/NyZU3P1S+4OT/SoiXHjaPoRey5L3bF9/4MPTIwb586ccv0bSAjpzIljE/sffMD1Yawvg7PBwxKFQkHrhrLkZZQlR1GWVuDL50lZIqvPB9eunH7h+cOHDqo7ttvF48mjj3qhGq0youAdPnRwV3RnKBRStm0V3en1V6ddHxshg5yzL0/t3bPb61eevXUGbYOH26Is9US1WnWiJ1CWHEVZWoEvnydliaycq5crJ45NPPz1h+ThLeG77ty7Z3eQqsXF86+I7qTu2D50xx3i2bGHBCF9zsXzr+yK7vzg2hXXR7L+DOoyvFuhLPXw+D2vCpQlR1GWVuDL58k5S2R5Prh25cSxiX333ydt3iRt3rT/wQeemxgPfIVYvD4r5s3k4S2Re+4WZ5n7ZcaMEP/m6uXKruhO359VSFn6NMpSDyWTyd4en7LkKMrSCnz5PClLxM7Vy5WJcWNXdGf4rjv3P/jAyePHfP/2Zb2Zq18Sp09E7rlb2baV6SZCHMoH167siu4Mwg6WlKVPoyz1ViwW6+FJcZQlR1GWVuDL58kyPHLx/CtPHn1U2bZV2rzp8KGD7Hyw/Psjppvk4S2HDx0Mwrs6QryRxeuze/fsPvvylOsj2XgGdoOHW6Es9Var1ZJluVfnxVGWHEVZWoEvnydlaWDz+qvTD3/9IWnzJmXb1iePPkoHuG2uXDAnxg1l29bIPXc//PWHmGsiZIPx6yWVuoUNHpagLPVcsVhMJBI9ORRlyVGUpRX48nlSlgYtc/VL40ZGHt6i7tj+3MT4wC602+D38LmJcTHX9NzEuL/PSifEpfj4kkpdwzK8T6MsOUHTNNM0N34cypKjKEsr8OXz5JylwcnJ48f23X9f5J67j6YfYVakJ7lywXz46w+J3SCCsZSIkP5E/HPk+jB6GcrSp1GWnFCtVhVF2fhxKEuOoiytwJfPk7IU+Fy5YB4+dDByz9377r/v5PFjro8neFm8Pnvi2MTuezVp86aJcYOJJkJWzsXzr6g7tvv3kkrdQ1n6NMqSQ3oyuURZchRlaQW+fJ4swwtwTh4/pu7YLg9vmRg32AK7D7l6uXL40EGxTwbfcEK65oNrV5RtW4O3AJgNHpagLDmkUCgkk8kNHoSy5CjK0gp8+TwpS8HL4vXZ5ybGpc2b9t1/X2CuHuujfHDtysS4IdbmsW0GIUuy+14tkGtW2eBhCcqSQyzLCofDlmVt5CCUJUdRllbgy+dJWQpSPrh25cmjj0qbNz389YeC94tb3+XEsQll29Zd0Z3sxk6ISNA2degMy/A+jbLkHF3XS6XSRo5AWXIUZWkFvnyenLMUjMzVL4kTk548+igLwDyVc2dO7Yru3BXdySwfGfCcfuH5vXt2uz4Mp0JZ+jTKknMymUw2m93IEShLjqIsrcCXz5Oy5PdcvVzZ/+ADkXvunhg3gnbCdIBy7swpdcf2vXt2szCPDGauXq4o27YGefsTytKnhUIhc11+93d/t1gsru9rXZFMJr/yla9kMpm+PeITTzzx1a9+dSNHyOVyqqpGIpFeDclR+/fvTyaTbo9iDYrF4t13372mL6EseRrL8PwbMZskbd4UmKs6Bj6nX3he2bZ1/4MPsEiSDFQWr88q27YG+4oFbPCwRDKZ1Nbli1/84qZNmzZt2vSlL31pfUfovyeffLKfD7djx47PfvazGzzIs88+q+t6T8bjNEVRxF+JzZs3/8mf/Inbw7m9L33pS1/84hfX9CUb37TDLyhLpE9ZvD4rLiw7MW64Phiy1pw4NiEPbzmafiTIv2UnpCODcN0CNnhA3zQaDb+soAOWoCyRfuTk8WO81fZ77Lob+HeQhEyMG4cPHXR9GI6HZXjoF8oS/MuXZYlzlnyU11+dVnds33f/fSziCkbm6pf23X/fruhOTmQiQY3Y4MT1YfQjlCX0C2UJ/kVZIk7l6uXK3j271R3b2VEteDl35pSybevhQweZKiQBy1z9krJt66Dsz0lZQr9QluBfvixLLMPzfsR6rdMvPO/6SIhzmRg35OEtgbxYJxnMLF6f3X2vNjgXGWODB/RNqVTSdd3tUQDrQVkiPc6VC6a6Y/vR9CPsCT4Imatf2n2vdvjQQf53kwDk8KGDA7UDDRs8oG+y2Wwmk3F7FMB6UJZILzNuZJRtW1l3N2iZGDcCv8kyCXwCfv3ZrmEZHvpF1/VSqeT2KID18GVZ4pwlD4YJpQHPlQumsm3ruMHPJvFlgn/92a6hLKFfZFmu1WpujwJYD8oS6UGYUCI3Wu8uXp89mn5k973awL3jJD7P4vXZXdGdg/gvGGUJfcHuDvA1X5YlluF5J2I+gQklYufsy1PKtq1sLE58lP0PPnDi2ITrw+h/2OAB/ZHL5dLptNujANaJskTWn9MvPK/u2M7bYrIkVy9X1B3buXYt8UVOHJvY/+ADrg/DlbDBA/pD0zTTNN0eBbBOlCWyzhxNP7J3z24WXJGuWbw+u+/++w4fOuj6SAhZIWJufHAnxlmGB+c1m81IJOL2KID182VZ4pwld/PBtSu7ojs5lZ/cNhPjxq7oTho18WYWr88O+i6OlCU4jzV48DvKEllbXn91Wh7eMjgXbSQbzLkzp9Qd269errg+EkKWZO+e3YN+4WzKEpwnSVKj0XB7FMD6+bIssQzPrTw3Mb4runOufsn1kRAf5coFc1d0J+e2EU9lYtxgmSgbPMBppVJJ13W3RwFsCGWJrCriFJSHv/7Q4C7uJxvI1cuVJX3p6uUKy/OIWzn78tTuezXXh+F62OABTlNVtVKpuD0KYEMoS+T2Wbw+u3fPbjY3IxvJB9euqDu2n3156kbr3auXK9LmTYO5WTNxPeIK2nT1Gy2W4cFZlUpFVVW3RwFslC/LEucs9TOd73EJ2UhE684aj0fuuTsUCu27/z7Xh0QGLR9cu6Js28pJdL8NZQlOUhSlWq26PQpgoyhLZKUsXz1FyEZi/vDlf/gP/2EoFAqFQuG77mRVJ+lzdt+r8aufvw9lCY4pFouJRMLtUQA94MuyxDK8/oSmRHqbsy9PDd1xR6gD2yqSfubwoYMT44brw/BO2OABDrEsS5IkzohDMFCWSPdcPP8Ki1VID7N4fVbdsT30aYcPHTxxbOLJo48S4nT2/Om9f/SHf9D/x/XyyVFs8ACHZLPZTCbj9iiA3qAskS45d+YU1xIlTuTKBfPwoYPinKVQKLTpc/80HL7LABy2f//+LVu2fOtb3+rz42qa9uTRR13/ubtlWIYHB9RqNUVRLMtyeyBAb/iyLHHOkqMRm+rSlIijOfvy1L7777vjjv/pdz/3Obf/RUHANRoNRVFarVb/H9owDMoSBg3bhSNgKEvkU3n91eld0Z2cdk/6k+p/f/Wfbdrk9r8oCDLLshRFqdVqrjw6ZQmDhgV4CB5fliWW4TmUq5cryratzCmRvuXq5Yr0e7/n9r8oCDJd10ulkluP7vGyxAYP6C0W4CGQKEvkt5mrX1J3bGdHB9LPUJbgqGQyWSgUXByAx8sSGzyghyzL0jSNBXgIHsoSeffGJzuVsUs46XMoS3BOJpPJZrPujsHjZYlleOihdDqdy+XcHgXQe74sS5yz1NssXp/du2c3F2ok/Q9lCQ7xyIkTlCUMiFKppOu626MAHEFZIu/uf/CBE8cmXB8GGcBQluCEQqGQTCbdHkW7TVnCYHBxw0mgD3xZlliG18OIyya6PgwymKEsoee805Tani9LbPCAjeNUJQQeZWmgc+LYxP4HH3B9GGRgQ1lCb3mqKbU9X5bY4AEbl0ql8vm826MAHERZGtxcuWAq27ZySSXiYihL6CHDMDzVlNqeL0ssw8MG5fP5VCrl9igAZ/myLHHO0sazeH12V3Tn669Ouz4SMsihLKFXDMMwDMPtUSxFWUKAVSoVTdO4qhICj7I0oDl86ODEuOH6MMiAh7KEjbMsK5VKebAptSlLCK5Go6GqKss4MQh8WZZYhrfBnH7h+b17drs+DEKWl6Wfz3/Yq38ozo+d/uXCLX/l2TDfmh7JH48+0TDfWv0xVzjg6q3mOU5PT8fj8Xq9vvGHC7ZWqxWLxTx7yoTHyxIbPGB9Wq2WoiiNRsPtgQD9QFkauMzVL8nDWz64dsX1kRCypCz9TfzZ49EnevUPxXeGvzk3c3WFP/1vo99vmG+tvix9Z/ib58dOb3BU58dOf2f4m7f9tGg0urCwsMHHCrxqtaooimmabg/kljxeltjgAevQarU0TatWq24PBOgTytLAZVd057kzp1wfBiE3OsrSLxcs0SJEIXlj8pWG+dYbk6+IH/mfz38oponOj52em7kqPkH8kbjz/Nhpu/OITxZHE2Xpp/V5cY89pTM3c/W2jeWNyVfEV7Xb7Yb5ljjg38SftR9ryWDESMTXdk5qieOIzzk/dvpv4s+K57hC76rX69FodM3/Mg6YYrGoqqrHf7ft8bLEMjyslWVZuq4zIYmB4suyxDlL6w5XVSKeysplyQg98NP6fLvd/m+j3xczTuIT/tvo98V/2+328egT0yN5cc/P5z/8+fyH3xn+5vRI3i5LP63Pi08Wi+7a7bb4wAg9cDz6xPHoE+IhlhBzXCuXpc7BvDH5SmcBs3vad4a/eTz6hD3+VZalmZkZytIKLMtKp9OJRML7Z5ZTlhAwuq6XSiW3RwH0FWVpgHLx/CvKtq2uD4MQO0uW4Yn20nlTNKLvDH/z8tR58YGYohEV5fLUeVFL5mau2t1mSWMR1Whu5mrDfMuuT51f2PUfGTES8aC2Jcvw7MFMj+S7lqU3Jl/5zvA3l5zmdNtleJOTkyMjI1NTU7f7h3BA1Wo1RVFyuZzbA1kVyhKChEsqYTD5siyxDG99UXdsZ69w4qmsXJZE2Xhn+sfLZ2xE5bD/a6/EOz922j6C+OTj0Sc6P0dUl9suw/tpfX56JC/mjuypp+VlqbNrLS9LXXvRbctSvV4fHR0dHR1d4XMGVjabVRSlVqu5PZDV8nhZYoMHrJ43d+cH+oCyNCg5efzYvvvvc30YhHRm5bLU/mQZ2/RI3r45N3P1lwvW8egTfxN/1p4ssj/fnsy5PHXeCD0wN3NVzEEtmd65bVkSZzeJRX12QbLX/nUOZskxfz7/of3Q4gMx+2R/pihLK++qxzK85Wq1mqqqmUzG+0vvOnm8LLHBA1aJi89ikFGWBiKL12elzZvm6pdcHwkhnVlSlsQkkjg1SNwzPZI3Qg/YmzeIP+38BNGFREQhEVNJoneJe8RpQiLiq25bluzPPx59wt4Wwn4sUZ+W77a3/KE7hyc+RxSwznuWoyx1arVamUxGUZRKpeL2WNbM42WJZXhYjUKhkEwm3R4F4BpfliXOWVprjqYfGTf4phHP5bYXpf2b+LN2L2rfbjfwIKEstdtty7JyuZwkSdls1l8TSjbKEvyOpgRQloKfq5cr8vCWxeuzro+EkCVZoSyJ5WqdEzvtAStLIyMjg3yppWKxKMtyOp1utVpuj2X9KEvwNZoS0PZpWWIZ3pqyd8/u0y887/owCFmeFcrSLxes5b1oQJqSUK/X3R6CC1qtVj6fl2U5kUh4/BpKq+HxssQGD1gBTQkQKEsBz9mXp3bfq7k+DEK65rbL8DA4KpVKMpmMRCKpVMpH+92tzONliQ0ecCs0JcBGWQp45OEtVy6Yrg+DkK6hLKFareZyOVmWVVUtFAo+PTfpVjxelliGh65oSkAnX5YlzllaZU6/8PzePbtdHwYhtwplqd1u1+euuT2Efms2m4VCIZFIRCIRRVHS6XRgppKWoCzBd2hKwBKUpSCHq9ASj4ey1G63o48fmJl92+1ROMs0zVKpZBhGIpGQZTkSiSSTyWKxGPg1YJQl+AtNCVjOl2WJZXirycXzryjbtro+DEJWSM/LUn3u2sjkU2MvHY8/c2TspePizsmzL8afORJ9/ED08QP1uWtjLx23/yj+zJGuRcV8cyb+zJHOg4xMPjUz+/bI5FPxZ46IuSDxtfFnjoxMPtX5QPFnjky/8Zr4EnvWaGTyKfPNmeWjjT5+YPiQLsZmH2c9T7z+cTz+Vjz+1ujob/fAmJ7+qbinXv9YfMLIyDvizrGxnyws/CYef8v+8nj8rYWF37Tb7bGxn8Tjb42MvPPbYY+8MzPz85GRd+zjiDvFke0vHx0dHR0dXTKkWq2maVokEgmFQpqm6bpuGEaxWAzqJFJXHi9LbPCATjQloCvKUj9S+/GPnn7isR+cPNHPB913/30njx/byBE+eu+dc2dOuf7dW2XOnTn19BOPfffZp10fCVl9el6WZmbfDunbJ8++uGAtRh8/MP/h+6L2tNvtybMvRh8/ID5NTOaMvXR89Hu5rsepz12b//D9drsdf+aIKDnRxw+ImiQaUbvdHj6kj0w+tWAtjkw+NXn2xXa7LT5z/sP3hw/p4hHt/iPu6Trg6OMHpl774czs2xtZjzc8/Mb8/C/b7bb4r2m2RJmZmfl5NFoVHwwPvyFq0vDwG6JcTU1d7/zksbGfiK41OTkn+lI0WhU1aXJyTnyO/VXigYTR0dGRkZElQ7IsyzTNwM8drczjZYkNHmAzDIOmBHRFWXI8771zMap++aP33jnwUKJvfWmufknavGkj11b6/l99O6p++eknHnP9G7ia/ODkCVGTnn7iMb+MmdxwpiwtaURTr/1QNJbpN16z/2hm9m0xn7PCocw3ZzpnqKKPHxBdaMFaFNXI7j/mmzN2TZp67YdjLx0fPqSLCSvxOfYYuurJMjwxHWSav70k0djYT8bGfjIz83NRlur1j+3W1G63JyfnFhZ+Y3ck+wuj0er09E/FVw0PvyHuEX+0sPCbyck5ceRotCr6Em7L42WJZXgQUqmUYRhujwLwKF+WJX+ds2S/fb9gno2qX+7Pgx5NPzJubPS75KPi8fQTjx35xsN9/iaTjacPZak+d234kC6W4dmdRNy5coEZe+n4zOzbo9/L2WVpSaVZMlkkJpTEHJH9ySOTT0299kN75d6tHqsn5yyZZmtk5B3RiMbGfjI5OSdqz8zMz9sdU0yfeuhotV7/WPSidrsdj79lmq3Or4pGq+KDTvX6x6OjV+25LKyAsgSPsywrkUjk83m3BwJ4F2XJ8UTVL18wz4qPh7/w+T484uL1WWnzprn6pQ0ex0dlyc6BhxLf/6tvuz4Mssr0oSyJM5SWLHITfyTObup6nOFD+oK1OP/h+6I1tVdRluyHNt+csWeWzDdnxPlIK4zZXsW3cWKJXbvdnpq6bp939NvhdStLYprIPs1pZOQdMX0kDtXuVpbE/e12Ox5/y/6jeDwej8d78hQChrIEL2u1WrquF4tFtwcCeJovy5K/luH1vyw9NzH+8Ncf2vhxfFeWzp05deChhD4GogwAACAASURBVOvDIKuPQxs8iI/F/gqiroiZpeFD+vyH7y/Z4EGcm7SEWIAXf+bI6Pdyosl07tZgf+2SrxLbP4xMPtX5ycOH9JW70PyH74vH2sgGD2LHhXj8renpn/72KYz9xL6z/ckGD0sfev6X8fhbnRNE9uYNokGNjLxj7+uw5BPGxn5i3zk5OTk8PLzuwQeYx8sSGzwMslarpWkafwGA26IsOR57rqP24x/1pywp27ZePP/Kxo/jr7J0wTwrVuJ5JN999unhL3y+9uMf3Wi9O/yFz+tfiy25U/9aTKwYFH8xxDlXBx5K9OcviUfSh63D7XON2m5s0t050xVU9Xq96254aHu+LLHBw8BqNBqKolSrS2ebASxHWXI83/+rb4vpDvsDR3P1ckXavKknh/JRWXrvnYt2U/LI5NIPTp6Iql9+752LN1rv6l+LieF13nnkGw+LBiW2ABGbf9h3Dkj6UJamXvuhmFkS00RdP0H8qZ2p137Yk4defqLUkgfayFSSd0xOTk5NTbk9Co/yeFliGd5gqlarqqo2Gg23BwL4gy/Lkr/OWbrRelf/WuzpJx7Tvxb76L13nH6scSNzNP3Ixo8jdsPTvxbzxSlAYpZG/NcjZYmsJlyUFsFGWYLXmKapaRozisDqUZb6FLHyqg/ZFd3po4sjkQEPZQnBRlmCp5RKpVgs1mq13B4I4Ce+LEv+WobXz3xw7Ur4rjtdHwYhqwxlCcHm8bLEBg8DpVAo6LpuWZbbAwF8hrIUqJw4NrH/wQdcHwYhqwxlCcHm8bLEBg+DwzCMZDLp9igAX6IsBSp79+w+/cLzrg+DkFWGsoRg83hZYhnegEilUoZhuD0KwK98WZb8eM5SH7J4fTZ8152L12ddHwkhqwxlCcFGWYK7LMtKJBL5fN7tgQA+RlkKTs6+PLX7Xs31YRCy+lCWEGyUJbio1Wrpul4sFt0eCOBvvixLLMPrmv0PPnDi2ITrwyBk9XGiLMXj8Xg83m636/X68PBwvV5f051AD3m8LLHBQ4DVajVVVfn/C2wcZSk4kTZvunq54vowCFl9nChLk5OT09PT4uOxsTHxwfT0tLhzYWFh+Z2dnwn0kMfLEhs8BJVpmqqq1mo1twcCBAFlKSBh03Dix7AMD8Hm8bLEMrxAyuVymqZxMSWgV3xZljhnaXnOnTm1K7rT9WEQsqZQlhBslCX0k2VZyWQynU67PRAgUChLAcnEuHH40EHXh0HImkJZQrBRltA3zWZT07RCoeD2QICg8WVZYhne8rC7A/FjKEsINo+XJTZ4CIxqtaqqaqVScXsgQABRlgISZdvWi+dfcX0YhKwplCUEm8fLEhs8BEOxWFRVtdFouD0QIJgoS0EIl6MlPg1lCcHm8bLEMrwAyGQyiUTCsiy3BwIEli/LEucsLcnF868o27a6PgxC1hrKEoKNsgTniGvOZrNZtwcCBBxl6fb54NoV91/SVsyJYxP7H3zA9WEQstZQlhBslCU4pNFoaJpWKpXcHggQfL4sS71ahnflgnnuzKm5+qUVPuf1V6fVHds9vsLt8KGDE+OG68MgZK2hLCHYPF6W2ODBp0zTVBSlWq26PRBgIAxQWVq8Pnv6hecPHzqobNsaCoVCoZA8vGVXdGfknrvtm3v37H7y6KNnX56yv2rvnt2hUGjf/fe5/qq2Qnbfq3WOmRC/pLMs1ev1eDw+NTXl9D8g5psz5pszTj9K/0299sOp137Yn8eaPPti/Jkjo9/L9efh/MvjZYkNHvwon89zzVmgnwaiLF29XHn46w9F7rl7757dE+PGrXaNu3LBPP3C808efXT3vdrQHXfsu/++b//lU6FPjBvePVFqV3TnuTOnXB8GIWvNkpmlhYWFaDQ6Pz/v6D8gYy8dH3vp+JI7488cmZl9u/Oe4UO6o8PoudHv5frTXqZe++HI5FMzs28v+Y7ZZmbfjj9zpA8j8T6PlyWW4fmLZVmpVCqVSrk9EGCw+LIsrf6cpcXrs0fTj0ibNz03Mb6mU48Wr8+ePH7s97f8z6EOp194fvH67N6vxbR/9SfryOcladOm39206Xf/eMcfre8It8pnPvM7X/mj7b09pvav/uRL2/6F+uUdPT+sE/nSH/wL8b39g3+x1fXBrCbRnX/8R9uVNX3Jrn/1L69cMN1/d9XTLF+GF41GZ2ZuOe0z9tLx+Q/fH3vpuD2FMv/h+5NnXxT9x3xzpj53bfLsi+KPpt94bfqN17oeRBxBVKYFa3HspePDh/TR7+XGXjo+efZF880ZcY99WPuhJ8++uPLsjfjazuGJY4qbC9bi5NkXxZ327NaSL1liwVo035yZPPuieGr1uWvtdrs+d02Mbf7D9zuflP1AYvZMPEf7c7oS3z37c5YMZvk3XNy5wtTc5NkXR7+Xs797C9bib++fnKzX6yuMJJAoS+gVcc3ZfD7v9kCAgRPksnTlgqls27ruGaEPrl0ZuuOOzrI0dMcdZ059P/JP/om5LqFQaH1feFuRSKRYLPb8sP/m3/ybf//v/33PD+ucTCazZ88et0exKo888sgXv/jFNX1JbPfu4F13eK1lafiQHn/myPQbr0UfPyDer0cfPzD9xmuTZ18cPqTb95hvzsx/+H708QP2O/VOdhESa8lWWZY6H/pWxWb0e7mRyadEt2m32+abM2IwYy8djz5+oN1uz8y+bR9n+JA+/+H702+8Jia1RiafWj7fZX/J5NkXo48fGHvpuJixEaOaeu2H9vTX2EvHR7+XE4+y/Dl2Ha34FonnaxdCMWU0MvmUmKRa8g0X3yuxAK+zm3W6VVkaHh4eGxu71f/ZoKIsoSdKpZIsy1xzFnCFL8vSapbhjRsZZdvWjfwmfmLcCC2z6XP/9J9t2rS+YYdCTn23w+GwE8uX9+3bd/To0Z4f1jmFQiGZTLo9ilXJ5XI7duxY05ck9/8vg1CWpqenR0ZGJicnu34Thg/p4s23eCNen7tm1wO7Nog7488cudXsh+gVS74q+viBlZfh2Q9tvjlzq/qx5Es6xyCOL5qPuGdk8ikxVPG4C9ai/Vw6ieoyM/u2+FP7oec/fF/caQ/b/pxbPcclROG51fjFx0u+4eJRRr+Xm3rthzOzb4tprq5jXv5cnF5d6U0eL0ts8OB9lmWl02ld1zlJCXBLAMvS4vVZdcf2o+lHNriF3XMT46dfeP7cmVN2ur63Wz3nypJDR6YsOYeyJLL8B2psbGx0dPRW67U6J1LEe/fo4wfEfM7I5FP2p8WfOdK1eCz52vYay5L4oGsT6Hp/5zHtsrT8c8R4up5JJQ479tLxJWUp+vgBMRM1fEi/VVla/hyXWPkp22Vp+QHFeLoe81bfioHl8bLEBg8eV6vVVFXN5dhJBXBTAMvS3j27T7/wfN/e262eQ5Wm1WqFw2EnjkxZcg5l6VY/ULddhic+EO/dxUYCS3YamDz7olhFdqvdDroWCbHYbMljda7i63zorsvPxOd0jqRzZV308QP2XFDnlyx/3CWWlyX74wVrcSNlSXyjOu+xFzfah1pfWeqc8fv7ZxqPT09Pr/BVgeTxssQyPC8rFArsDw54gS/L0grnLDl9xSEPlqVGoyFJkhNHpiw5h7J0qx+oNZUlcU/08QPi1Jr63LXOwiBOZ1p+kK5FwnxzRhzE7g/iRKP4M0fEGUrigeLPHFlhnzdxElHnvJb4Evs0p+XbxNmLBjsfupNdlsQX2jNL4rB2WbJviu/DasqS/VXxZ46I+ie+e+JOcdj1laXOI9tL9aLRaDweX/mrgoeyhHVotVrJZDKZTFqW5fZYAASrLE2MG4cPHezze7vVc6gsVatVRVGcODJlyTmUpVv9QEWj0dXvmSb2EhAfLz8Dp7d8t5O414yOjt7qVLQAoyxhrarVqqqqhULB7YEA+C1flqWuy/DOvjy1+16t/+/tVs+hsmSapqZpThyZsuQcytLyH6iFhYWRkZFoNLr674nYpU1MekQfP7B8vwGxe1tnbrWC7raWlKUlh+1VTxNb53WmJ9fP7eH3YYlVfh/i8fgAboXX9nxZYoMHr8nlcqqq1mo1twcC4O8FpCzN1S9JmzdtcEeHtb63WyuHylK5XI7FYk4cmbLkHMpS1x+o9V2HZ4Wro9p/audWG7it5lFWOOxtl6Wt0oK1uOSwXXc/X4defR9WPmyvvg+B4fGyxAYP3tFqtXRdT6fTLL0DvCYgZWn/gw/0532kB8uScw2BsuQcytLGf6AA7/N4WWIZnkdUKhVZlkulktsDAdCFL8vSknOWLp5/Rdm21fvv7ShLwujo6NTUVOc909PT0Wh045dhoSz5LpQlBBtlCbdlGIaqqkzxAZ4VhLKkbNt68fwr3n9vR1kSljQlYYUzVVbfoyhLvgtlCcFGWcIKms2mpmmGYbg9EAAr8WVZ6lyGd/L4sX333+eL93aBL0szMzNi0+eZmRn75JOZmRm76szPz8/MzJimaX+JuGdycnL5Nlnz8/PxeHxmZmZkZGRycnJkZOS2A6As+S6UJQSbx8sSGzy4qFwuy7Lc+YIIwJv8XZYWr89KmzfN1S/54r2dQ2Upm81mMhknjrzWshSNRsWs0cjISL1en5qaGh0dnZmZicfjoi/V6/WRkRF7ZmlsbGxsbGx6enp4eLjr3NHIyEg8Hh8ZGRkdHV3N5BJlyXehLCHYPF6W2ODBFeIySrFYrNVquT0WALfn77LU52mlDb63c6gspdPpXC7nxJHXUZbENFG9Xq/X6/YFKEVlsj9HfDA9PS0mi8QM0vKjTU5Oxj+xyk2HKUu+C2UJwebxssQyvP4TE0pcRgnwEV+WJfucpV3RnefOnOrDK8rF86+cfuH5J48++m+/+q//2aZN6xu2Q2VJ13WHttBZ38ySKDYjIyP26gL7pCMxs2TfKZbqTU5OLj+LaX5+fnR0VGz8MDMzQ1lqU5YAH6IswWZPKDGbB/iLj8vSlQumPLzFuVeR0y88v+/++9Qd20Md/u1X/7WnZpYsywqHww5dlmGtZUnMAomPRclpt9uTk5N21RkdHbUb1PDwsP2ZCwsLXQ84OTk5PT29+gFQlnwXyhKCjbIEgQklwL98WZbEMrzDhw5OjBuOvo0L33Vn6NPOnPq+p8pSsVhMJBI9P6yw1rIkFuCJj03THBkZGRsbE7NGYqYoHo/bZx/ZNzvnoDaIsuS7UJYQbB4vS2zw0AdMKAF+59ey1J+tHU4eP9bZlPbu2e21c5acW4PX5qK0TqIsiVCWEGweL0ts8OA0JpSAAPBrWerP1g6L12cj/+Ru0ZSG7rjjygXTU2WpWq0qitLbY3aiLDmHsiRCWUKwebwssQzPOUwoAYHhy7JkfCuz7/77Th4/5vQLyb777/sv/+l/l4e3hEKhw4cObvC9XW/LkmVZqqpWq9UeHnMJypJzKEsilCUEG2VpMDGhBASJX8tS+K47P7h2xdFXkXEjczT9yI3WuxfPvxK+606x5M8jZcmyLF3XnV5rTllyDmVJ5OrlSjh8lwEElKZplKWBwoQSEDy+LEv/z4/+T3XHdkdfQk6/8PzePbvtm1cumPZ7Oy+UpXa77eickkBZcg5lyc6JYxNPHn2UkKDG6d/rbSRs8NBbTCgBgeTLsmR8K/Okk7+re/3V6V3RnYvXZ5f/kXfKUh9QlpxDWSKEuB42eOgVJpSAAPPZ23dB/cqXX3912rnXD2Xb1ovnX+n6R5QlL6MsEULIGsIyvF5gQgkINp+9fW+3261Wa2hoyLkXj5X32aMseRlliRBC1hDK0sY0m01d15lQAoLNZ2/f2+12qVSSv/j7Dr1y3PbyTZQlL6MsEULIGkJZ2oBsNitJknOXOgTgET57+95ut7PZbGbUqROWJsYNsUX4rUJZ8jLKEiGErD5s8LA+pmnKspzJZCzLcnssABzns7fv7XY7kUic/P4JJ1425uqX5OEtK+9cRFnyMsoSIYSsPmzwsFbNZjORSGiaVqvV3B4LgD7x2dv3drutKMqlN/67Ey8bhw8dnBg3Vv6cufqloaE7QuvyD/7BP1jfF2L17rhjnf93fOH0C8+7/u6KEBKcsAxvLXK5nCzLxWLR7YEA6Cv/laWhoaFvHR114mUjcs/dK5ytRAghhAQqlKXVqVQqiqKk0+lWq+X2WAD0m8/KUq1Wk2XZ+Fam568Z586c2hXd6f5LFyGEENKfUJZup9VqpVIpVVX7cCF4AN7ks7JUKpV0Xb9pfdTz14yHv/7QcxPj7r90EUIIIX0JGzysLJ/PS5KUz+fdHggAN/msLGWz2Uwm40RZYg0eIYSQgcqVmf/OBg9dVatVVVVTqRTr7gD4rCwlEolisXjzl7/o7QsGa/AIIYQMWm4u/A+3X9U9p9VqpdNpRVEqlYrbYwHgCT4rS5qmmaZ54vh/vnq50sMXjNXsg0cIIYQEKTcXP3T7Vd1b8vm8LMu5XM7tgQDwEJ+VJUVRqtVq+ez/sfLVkNYadcf211+ddv11K5D57rNP61+LOfoQR77x8NNPPHbgoYTrT5YQQnyUm9ZHbr+qe0W5XFYUJZVKsS4RwBI+K0uSJDUajXa7ffPn13v4ghG+687eti/SmffeuejcwZ9+4rFzZ07daL373Wefdv2ZEkKIX3L25anUw/+r26/q7qtWq5qmxWIx9rsD0JVvy1Lv9niYq1+K3HO3669bvsu5M6eOfOPh7z779Pf/6tt2Yzl35tTTTzxm9xZx8/t/9W1xU3z83WefXqHYiC/5wckTy48gHlHcIx7u6Sce078WEzNLrn9DCCHET/moOeCzKM1mM5lMKopimqbbYwHgXT4rS6HQJwO+8esbP3uvJy8Yr786re7Y7v7rlg8z/IXPv/fOxeEvfL724x/pX4vVfvyjqPrlG613f3DyhL0o7oJ51m4yF8yz+tdi771zUVSm5Qf8wckTR77x8I3Wu1H1y7Uf/+jcmVPiON999mlxkKj6ZVGcxAPdaL379BOPXTDPuv6tIIQQf+Xm3/3c1ddzN7VarUwmI0lSoVBweywAvM6vZanVail/sG3x+uzGXzCemxh/+OsPuf665ccMf+HzN1rvilOSxH/FLNOBhxJ2mVlSlsTHnXd2RlSpG613az/+kbhpF6HOx+r8gLJECCFrzkfz7Zs33X1Bd0sul5MkKZvNWpbl9lgA+ICfypJlWUNDQ/bN1gc/vfGzuY2/ZrAV3rqzpCzZE0oXzLPrK0tR9cv2CU4fvfdOVP0yZYkQQnqbi+dfufTG6y6+mrulVCpJkpROp7l6EoDV81NZajQakiR13nPzV9bGXzZ236udfXnK9VcvP2b4C5//6L137LL09BOPiQr0g5Mn7PVyaypL9vlO586c+v5fffsHJ0+ITxNnK92gLBFCyIZz+m+mBm35mWmaqqrqui5OewaA1fN3WWq32zf/7ucb3MhuV3Sn2C2ArCn21gv2fz96750j33j4yDceFjfFSUeiQYniJD5+752L4oOP3ntn+WHFVuP2nhDiLCa7QYlD2R+IB+rcQ4IQQsgKubnw/w3UArxGo6HruqZpXGQWwPr4viy1223lS3+wkb5EWXIrF8yznRHnKRFCCHEoN3/x0/bNG/1/+XZFs9lMp9OSJJVKJbfHAsDHglCWLMu6+eu/W/f5S5Qlt0JZIoSQvkX+4u8PyJYGrVbLMAxZlnO5nNtjAeB7fipLSzZ4WOrmjZvWR6+/+l/n6pfW9PpBWSKEEBLg3PzF+zd/86tBOF1H1CRJkgzDYBcHAD3hp7LU7rzO0i2kDx9++/LFm794f65+6coF036puHq5cvVypevNXdGdJ48fu9WfcpOb3OQmN7npx5vP5f7y5H85fvM3v+rPC7S7qEkAHOKzshSJRFZ5xfFqtTo+9vTNX/+dyInj//nE8f/c9ab6x1/51rcev9WfcpOb3OQmN7npu5vtmzeazeYqXzF9jZoEwFE+K0uSJPV8IYGu65z9CQCAv1CTAPSBz8qSqqo93/0znU5zDigAAH5BTQLQNz4rS5qmmabZ22Pm8/lUKtXbYwIAgJ6jJgHoM5+VpUQiUSwWe3vMcrkci8V6e0wAANBD1CQArvBZWUqlUvl8vrfHvNXlmwAAgOuoSQBc5LOylMvl0ul0zw972x3JAQBAn1GTALjOZyWhUqmoqtrzwzpxKhQAAFifZrNJTQLgBT4rS61WKxwO9/yw7PEAAIAXNBqNVCpFTQLgET4rS+21XJd29ZrNZiQS6e0xAQDA6lUqFV3XJUnK5/OWZbk9HABot/1YlmKxWLlc7vlhWYkHAIArSqWSpmmqqnKNeABe47+ylMlkstlszw/LSjwAAPrJsqxCoSBJkq7r/L4SgDf5rywVi8VEItHzwzabTUmSmPcHAMBprVYrm81KkpRMJhuNhtvDAYBb8l9ZqlariqI4cWSH5qwAAIDQaDTS6XQkEslkMj0/AxkAes5/ZcmyrEgk4sQOOZZlSZLEv90AAPRctVpNJBKSJOVyOdZxAPAL/5WldrudSCSKxaITR3ZojR8AAAOrXC5rmqYoikOv3QDgHF+WpUKhkEwmHTq4qqqVSsWhgwMAMCBarVY+n5dlORaLsX8DAJ/yZVly6NK0Qq1WU1WVC+EBALA+tVpNXFg2lUrVajW3hwMA6+fLstR2+LJI1WpV0zT6EgAAa1IsFjVNk2U5n8/zMgogAPxalrLZbCaTce749CUAAFap2Wxms9lIJJJIJFhxByBI/FqWarWaLMuOPgR9CQCAlVUqlUQiwVbgAILKr2Wp3W5LkuT0lexM05Qkid17AADoZFlWoVCQZVlVVV4lAQSYj8tSf64h22w2E4mEpmnVatXpxwIAwOPsq8omk0k2bwAQeD4uS31YiWczTVNRlHQ6zRoDAMBgKpVKsVhMXFWWNeoABoSPy1K73dZ1vVQq9e3hcrlcJBKJxWKFQoGrjwMABkGj0chms5Ik6bpeLpfdHg4A9JW/y1K5XI7FYv1/0GQyKVYg8LIBAAgky7KKxaKYSspkMk6fJAwA3uTvstRutxVFceVsolarVSgUYrFYKBRSVTWVShUKBc5rAgD4XbVaTaVSYh9wficIYMD5viwVCoVkMunuGCqVSj6fTyaTiqIMDQ1pmqZpWiqVMgwjl8uZn3B3kAAArKDZbObzeVmWFUXhkrIAIPi+LFmWJUmSd/ZdsCxLVKN8Pm8YRjqd1j4R+rRIJKL1WjqdNtaoWCyaHXh1BIBBUyqVxLWSUqkUG9wBQCffl6V2u53NZjOZjNujWLNms2n2Wi6XW2tZEhuj28LhcGej6/yjWCzW+YWdk2amabKcHQD8pVarZTKZSCSi6zrXSgKAroJQlprNpiRJbE/nhM46VC6XO8tS56SZpmmSJHW2LFmWO5cjdk5heWcaEAAGkDjnVlVVWZaz2Sz/JgPACoJQltq+nVwKsFqt1rkcsXMKKxKJiEKlKMqS1YOlUonVgADgENM07d1cK5WK28MBAB9wtizVarV8Pm/fXLIZQw9v/vVf//U//sf/2F5p7dwDcbOHN++77z579eDevXsVRdF1XdSnz3zmM52FSpblf/7P/7m99u8//If/4JGnwE1ucpOb3r9Zq9X+9E//9LOf/aymaYVCwbIsL4yKm9zkZoBvmqYZmGmMkKNHbzabfbtorGmamqb157HQN9VqtfN0LLH2T1XVzlOqxMSUWObHqVMAIDQaDcMwZFmWZTmXy/HPI4C+aTabnbvFiPdy7g1nQ3pclizLSqVSbq2hSiaThULBlYeGKzp7lFjmJ06dEjsN6rpuGEY2m/X1jygArInYAVxRFEmSDMNgdzsArjNN079Lf3s/s2Saplt7LTSbTVmWOd0FYqfBUqlkGEYmkxETUJ3r+sS2E4VCgckoAMEgtm0Q54WmUikukg4APeHsMrz+y+fzqVTK7VHAu8S6PrHtRDKZtCejRImyT4uiQQHwBcuyisViIpEIh8PJZJJZdAAeVyqVstms26NYg96UpWq16p03l4qi8Bs1rJUoUfZpUTQoAB5XKpWSyWQ4HE4kElwlCYBftFotf72h6k1Zyufz5XK5J4fauFqtpigKl13Cxq2mQXGJEgD9ZJpmKpUSV5ItFAq82AGAo4K2DE8olUq6rrs9CgTTkgYlLhulaVoikRCXimJiE0DP2R1J07R8Ps+vaQCgP4JZltpcphb9ZZpmsVg0DEPXdUVRQqGQLMtiAkpsI8FvfwGsg1hrR0cCEDzFYtEXJy9ttCx5+S2grut9u8oTsEStVhMTUGIbiaGhoXA4LDbiE7uZ+2vBLoC+6dyzQay1oyMBCJ5ms+mLf9w2VJZarZYkSb0aSs9ZlqWqKmui4BGtVktsxCd2MxdnQGmalkwmDcPg9CdgwIm9v0VHEns2cCUMAHBdYJfhCY1GQ1EUXm/gWaZpFgoFwzDE6U9DQ0OapqXTabF7BH91gcBrNpuFQkHXdbH3d7FY9PKSDQAYNAEvS+122zTNWCzGaw98wbIs0zRzuZzYPSIcDotzFTKZjDj3ye0BAuiNZrOZz+fFb0mSySSLxgHAm4JfltrtdrFY1HWdvgQ/ajabpmlms1lx7lMoFJIkKRaLGYZRLBYrlYrbAwSwBrVaLZfLKYoSiURSqRS/AQEw4MLhsMfX0WyoLPnoX/lyuayqqsf/ZwCr0Wg0yuWyYRiJREJVVXHpJ13XDcMol8u1Ws3tAQJYqlwup1IpSZJkWU6n05xMCwB+saGyFIvFejWOPqhWq5qmsQUZgqdarZZKJcMwYrGYLMuhUEhVVfaNANxln4w0NDQUi8Xy+TwvQADgOwOxDM9GX8KAqFQqy/eNSKVS7BsBOK1arWYyGbHQTpyMxCJwAPCvwSpL7U/2x+NMDwwUsW9EPp9n3wjACeLKSOLqsYqiZLNZFtoBQDAMXFlqt9utVkvTNF9cMxhwyPJ9I2RZFic+lUolTnwCVqPRaORyuVgsNjQ0lEgkuHosAKyVpmke/6Xt+suS58fp+gAAIABJREFUZVn+nZ+xLEtcGJQXNkCo1WrixCdd18WJT+KCudlslpV7QKdyuZxOp2VZliQpnU6Xy2W3RwQAcMr6y1Kz2UwkEj0cSv+ZpinLMle3ALoSF8wVv1YIh8PhcJiVexhY1WpVTCKFQqFYLJbL5ZiABYBBMIjL8Dq1Wi1d15PJJCfgAitrtVqs3MNAEdvZ2WciMYkEAANo0MuSUCgUFEXhVRBYE1buIXgsy7JX2Ynt7DgTCQAGGWXpt2q1WiwWi8Vi/IIcWDdW7sGnqtVqNpsVWzWwyg4A+oYNHnymXC6Ly6vzS3Fg41i5By9rNBqFQiGRSITDYUVRMpkM6wsAAEsM9AYPt5LL5SRJyuVybg8ECJrlK/dUVU0kEqI+cWkaOK3ZbBaLxVQqJfaySyaTxWKR344BAG6FZXjdtVqtdDotSVKhUHB7LECQVSqVYrEo6pOiKGL2KRaLGYbB4j30RKvVKpVKoiBFIpFEIpHP55nYBACsBmVpJY1GI5lMilkmtssD+qNWq5XLZcMw7MV7kUhEnPuUy+XYOgKrIQpSOp1WFCUcDuu6TkECAKwDZen2Go2GmGUyDIN3aUD/NZtNce5TOp0WW0cMDQ1pmpZKpQzDME2z0Wi4PUa4b3lByuVyrO0EAC9jg4fgaDabhmGI67Xzzuy2qtWqOQAG6kfAUyzLMk0zn88bhqFpmiRJS05/4n/NgBA7fWcyGVVVKUgAgJ5jg4e1abVaYvsHTdMKhQJr87pqNpviF/+BFw6HeVPuHZ2nP6mqKk5/0jTNPv2JH9hgEDNIoiCJnb6z2Sw/iQAAJ7AMb51M00wmk+FwOJlMstvsEo1GQ5Ikt0fRD5rn544HXK1WM03TPv1paGhInP6UTqfF6U9cbNQvarVaoVBIJpOyLIsZJAoSAKAPKEsbYllWoVCIxWKSJGUyGc4eFihL8Cxx+lMulxOnP0UiETELaq/f43+od1QqlWw2q+t6OByWZTmZTBYKBf6ZBQD0E2WpNxqNRjabFRfuSKVSAz7XRFmCj4jTn+z1e1rH/nv2BhKcA9MfrVZLnIAk/i+oqprJZEqlEjvrAEBQef+tFBs89Fij0cjn87FYLBwOJxKJQqEwgC/zlCX4nZiAsjeQsC8ApWlaJpPJ5/MmO5j3iFhfJy6CFA6HxQlI/FgBADyCDR6c0mq1isWiOK9JVVXx+2m3B9UnlCUEkjgDKpvNplIpjR3M10tM5RmGEYvFIpGIWF/HRZAAAN7EMrx+qFQq4vfToVBI7M0V7HfYlCUMiFvtYK7rujgDigIgVCqVfD4vtmcQDdMwjHK5zAYbAACPoyz1m/iVql2cMplMsVgM2DsqyhIGWaVSKZVK4gwoWZbFT3o6nS4UCoNz7lOj0SgWi51nH6VSKbZnAAD4DmXJTWJJTyKRsH/bGozuRFkCOon995LJpDj3STQHceKT20PrmSWL6yRJSiQSnH0EAFiZ999KscGDV4i3Gku6UzKZFItV/PULacoSsAKxJk2c+BQKhRRF8elJOyyuAwAEHhs8eJToToVCQfymVvxCWpIkMfvk8etpUpaA1atWq/Z2cJFIRFxNyJt7RbC4DgAwaFiG5yeNRkPMPtnX0xSnQ3ReT9ML2xlTloD1aTabhUIhmUxKkiTLciqVKhaLLv5Qs7gOADDgKEu+t+R6muFw2J6DEltyiYUx/ZyJcqsszc/P9/kRKUtwTq1Wy+fziUQiHA4ripJOp0ulkmVZTj8ui+sAALBRloJJzEGJLbnEb4XtmahwOKxpmngDZM9HmabZwzdhbpWlkZGRPj8iZQn9Ua1Wc7mcrutDQ0O6rheLxR7+wDabzVKpxOI6AED/ef+tFBs8DJxWqyXakShLYj5K07ShoaFQKCR+kWwv7TMMo1AoiM9f/UkU/SlLU1NTY2Nj9Xq93W5PTk7G4/F4PD42NtZut+v1+tjY2NTU1OTkpLjHISv/hPdhEgADqFQqJRIJcXbTul9gxIJeXdcjkUgkEtF1ncV1AAAsxwYP+BRxioK9tM8wjGQyKeqTuOBmKBSSZVnck8lkDMMQ77E6l/n1oSyNjIzMz89PTU3Zs0nRaHRhYcH+hGg0Oj09PTIy0nlnzy0vS61Wq1gsJpPJSCSSy+Wce2gMuFarVSgUxA9mJpO57SxQrVYrFArpdFpVVfsib6VSicV1AACsgGV4WLNarSbaUTabNQxDrN7pXOanqurQ0FAmk3HoF9XxeFwceWFhQXSh+fn5eDze+TljY2NL7nGCXZYqlUomkxGbFtqYekUfNBqNbDYry7KiKPl83i4/Yg5ZrMINh8OyLCeTyVwux19LAABWj7KEHhNTK5FIxLlVPdFodMk9k5OTU1NTnfeMjIz0rSy1Wi1d10PLsAwP/VStVv/8z//8zjvv3Lx58+c+9zlxdqLYm8ELm2QCAOBHlCX0nqPL8Obn50VZWlhYsNfgxePxhYWFyclJ+/6FhYXh4WFH1+C1P70ML5fLdTYlcQ6Yqqri7K9yuczp8ui5zr0ZhoaGFEVJpVLf+MY3/uzP/kySpEKh4PYAAQBYCRs8YBA5fc7S9PR0PB4X1UgYGxsbGRmp1+sLCwtiawfTNMUHzg2jvewnvFKpiLWIoVAomUyKe8TZX7FYTJZl6hM2zjTNXC6XSCQkSercm2HJTGaj0RDXa6IyAQCwbmzwgN4b5IvSNptNsf/yrXZ3oD5hrRqNRrFY7NybIZ1OF4vF1WxQaVemYrHo/EgBAAgaluGh9wa5LAmZTGb1867UJywnrkgreo4kSYlEYiN7MzQajUQioWlatVrt7TgBAAg2yhJ6j7K0QcvrkyRJYj7BMAzTNHnLG0jVajWfz4trKMmyLK4Mu/rrm92WaZqKoqTTafZ7AABglShL6D3KUs81Gg1xpophGJqmiT3KRYNKpVJiDopzCP2oWq3mcjld18PhsNieoVgsOnrto1wux4lMAACPYIMHDCLKUn+IBpXP58UclDihJRKJdDYoj/8DNJgqlUo2m43FYmL/unQ6XSqV+jnb02q1kslkIpFgigkAgJWxwQN6j7Lkomaz2dmgxG4T4pI7yWTSMIxSqeS1MQ+CWq2Wy+VisZg4Jy2TyZTLZXevxFUsFhVF4XdeAACsgGV46D3Kkte0Wi3TNAuFgmEYuq6LBrVkDoo3zT0nLtAsNmmQZTmdTpfLZbcH9SmNRkNV1Ww26/ZAAADwKMoSeo+y5AtL5qDEKj52kti4SqWSyWRUVQ2Hw4lEorebNDghk8nouu7uNBcAAN5EWULvNRqNcDhs9NHhw4f37dt3+PDhfj6oYRiSJPm3LHXVdScJWZY1TctkMuLip+xmvlyj0cjn82KfBjFX46+ZulKppOs6pzABAPrM+793ZoMHOEK823bO0aNH9+/fv2vXri1btnz2s58Nh8OyLD/88MOOPuhy2Wx2EH4fX6vVTNPMZrOZTEbTNLGbuVjCJ+rTYL7JtiyrVCqlUilZliVJSqVSfd6nobfK5bKmaf4dPwAATmCDB/iDZVni/XoikZAkSexYYBhGuVx2dJ9l3IpYwifqUzgcFmdAGYZRLBaDvXiv2WyKSaShoSFd1/P5fGCm2qrVqqqqHl80CABAP7EMD95VqVRyuVwymVQUZWhoSKwEKxaLG3kzJzZN5iIzPSfOgDIMI5FIiMV7qqomk8nATD3VarVsNqsoSiQSEZNIbo/IEbVaTdM0+hIAAAJlCV7RaDTK5bJ4ty02G1BVNZ1OFwqFXs1UlMtlWZZpSv1RqVQKhYI99SQmAzOZTKFQ8NEK3kqlkk6nZVmWZTmTyQR70kwQ80uDsL4UAIDboizBHWIiIpvNJpNJsZO1JEmxWEys4+r5m2kxoRSLxViz5xaxfbn4Py7KsKIoyWQyn897rYGIk5GSyWQkElFVNZfLBWah3SqVy+VYLOb2KAAAwccGD0C7/ckb5Vwul06nNU0bGhoSp7iIeQanf0jy+TwTSh5UrVYLhUIqlbKXWRqGYZqmW3MarVarUCgkEolwOKzreqFQGORqLX5a3R4FAAAuY4MH9JjYiaFYLIoFdaIaiSVY6XQ6l8v1891wuVxWFCWVSg3yu15fEH9tDMMQf2HE/7VCodCHKR3RkcRawWQyWSwWWYEmpFKpfD7v9igAAHATy/Cwfl17kZgiSCQSYkGdWxMF1Wo1FovFYjGvLfHCalSr1Xw+n0wmxa7cosP0fJeIUqmUSCQikUgymfT4GgBXWJalqio/QQCAQUZZwqpUKhX7WqVe60VLiNMtFEUpl8tujwU90Gg07NVxiqJkMpkNFptarZZOpyORiK7rzCOtjM0eAAADjrKEvyc2XSiVSoZhiE3MxNYLYmM6sY7OU72oU6vVyufzYpcIalJQVavVbDYrurqu62vaeqHZbOZyObGvXS6XY2XmKmUymWw26/YoAADBxAYP8Bax0YK4nKhhGOIUEU3TJEkKhUJi0wVd1w3DEJfH8fhfX6HRaKRSKUmSUqkU14cZEGLDOrGptyRJ6XT6VqvFLMsqFAqxWCwSiaTT6UHb127jLMtSFIXvGwBgMLHBQ9CIhiMuWGQYhtiYW/wmPhQKiY0WNE1LpVLiE8Tn+7RjiBV3kiTl8/kAXPYU69NoNHK5nKIoojXZv8Qpl8vJZFJs28Bk40ZUKhVVVd0eBQAALmAZnj+IU4bs3RSEWCzWOS8kiHvEBYsMwxAbc3tw1dxGNJtNVtxhOdGa/vAP//Af/aN/9JnPfOYrX/lKoVAI0t98F+m6XiqV3B4FAAD9RlnqH3sJnCBODbLZ5wgJ4qqdNnHKkL2bglAul309L7RWtVotm80qihKJRFhxh+XK5XIikZAk6S/+4i/+8i//UtM08VfFF6tJPa5arSqK4vYoAADoN8rSGjQaDfPTCoVCZ+FJpVKdhUeW5c7CYy+BE8SpQTb7HCGB88Fs5XI5nU5LkiTLciaTYSNjLNG5t0exWOz8IzEJKWZfs9ksmzpsBJNLAICeY4MHHxATPvZJPvbW2MundyRJ0j4tmUx2Fp58Pt9ZeDglet1arVaxWBS7RcdisVwuxzwSlqtWq8lkcjUzjY1GI5PJRCKRRCLB0s31YXIJADCABmuDB3HBFnsKSFEUe8LHPsnH3hqb6Z0+a7VaorKqqhoOhxOJhBPXIUUwFAoFVVUVRVnrWUnFYlFsCsJE0zowuQQAGDTBX4ZXrVbz+bw4k0GSJDEXJKaAWNDlulqtVigUUqmUoihiEskwDDoqbsWyrFwuJ36QN/L3hImm9RH7T7o9CgAA+ieYZUlcWUXX9XA4rChKKpUqFous4/ICy7JM0xRb+YXDYVmWk8lkPp+nuGJlrVYrm82KzcF7+LNsTzQVCoVeHTPYIpEIM3IAgMERtLJUqVTsK6uUSiUWcbmu2WyKdpRIJBRFGRoa0jRNbOXH/x2sRrPZNAxDkqRMJuPQ2/RGoyHOfcrlcmw1vrJMJpPNZt0eBQAgINjgoU/EnleyLKuqypVV3GWaZj6fFzuhh8PhSCQi2lGxWGT6CGvSaDTERoiGYfShWjebzXQ6HYlE+vNwPsU2DwCAgRKEDR5yuZwsy6lUit3n+s++Tq6u62KrdE3TUqmU2Amdd5xYn2azmUwmJUnq/1RPq9UyDCMSiaTTadabdaUoCr/4AAAMCH8vwyuXy7Isp9Np3pT3gbjMVDabTafT4nKfohqJ6+SWSiXKKjZOdBXXTyISO0lEIpFkMsnpjktks9lMJuP2KAAA6Ae/lqVarRaLxWKxGG/QHVKpVEqlkpgyEtebEpeZymT+f/bOJ+SV67z/ovAD0SZEKaEoxAtRrHbyBzqkWQztNGgpugjSoiDaRYW1kTepyhVEpgSBy6BbshAEFVHKRU61UFyTvIhiq17NxRtx2wERbKwrsJGzuFLAwQKLm8EQOL/Fk/fp8Yz+a/7r++FykUYz55wZ6ZXOd57nfJ9Wt9s1TRM33YHnUDJtu92OTibtYDAgVwnckWGWy2Uulwt7FAAAAEAQxFIsUd4dDH+9ghzq+v1+u90uFAq5XC6VSmmaViqVKGQUncVpIKlQlLher0dThJNfebfbDXsgUSGXyyHgBgAA4Hpg8OAxtm1XKpVGoxFwvwnDNM1ut0vZdJlMhhzq6vV6u902TRNzIBAks9mMqkJHPEq82WwajQZu0xDVahVm6wAAAG6BOBk8LJdLTdNGo1GQnSYANu+WPRgajQZl0yG5CITFZrOpVquqqkb8lpIMJwDf+D2Fu7u7UqkU9igAAAAA34lNGp5pmrBgOpH5fE7LjciGgc274cEAogPl3cU0OkGDb7VaN3uvYbPZZDKZsEcBAAAA+E48xNLd3V2hULjZeckpzOfzfr9fqVSy2ayiKLTcCDYMIIJQQKlYLMb6w2nbdqfTia/eux7cvQIAAHALxEAsTSaTUqkUHXes6OAQSPV6fTQaxXoCChJPrANKbqgeVNyF32VQKm/YowAAABBvYPBwLVBKDiCQQExJRkBpJ6QA7+7uwh5IoIxGo4jUJQcAAAD8I9IGD2SThey7gAUSGUKwmXi73a7X64X9FItF2m0wGNCBELfAQcICSm42m02pVKpWq7fzfYVqSwAAAG6B6KbhQSnd3d3V63W/BRIXWSIn8XQ6TYYQbCbebrf7/b65n8lkQrtVq1U6MJ1Ok+detVqFHfmNY9t2vV5PZEDJzWAwuClv8Uwmc8tf0QAAAG6BiIql9XqtquotzK4crNfrwWBQKpXS6XSpVOr3+z5dhMlkQkVjuMgSOYl7GBQyTXMwGMiFbguFQqvVuru7wwTrRthsNoVCod/vhz2Q4Fiv18VisdVq3UJ8tVgs3o4yBAAAcJtEVCzd2m/wfD7vdDqapmWz2Wq1end358dMa7lc9vt9UmLFYrHb7QbsJG6aZqfTKZVKmUyGwmWDwQBBp6Qyn89VVQ2+dHUU6HQ6t3DurVar0+mEPQoAAAAxBgYPl9DtdhuNhh8tRw3TNBuNRi6Xo5otPl1P27YHg4Gmablcrl6v+6TEzoUWYlWr1Vwup6pqt9uFakoSpmlqmnbL7+l8Ptc0Ldl+cShNCwAAIPFEzuBhOp0WCoUozOZ9YrPZkItUJpMpFAq+ioT5fE6rnqrVapRvcs9mMxKNqqq2221Uzo07/X6/WCwi2VII0Wg0KpVKUr/Q5vO5oihhjwIAAADwkWil4W02G1VVE3k3er1eUwpcJpOpVCqj0cjXqSSV8VUUpd/vx2jOOpvN2u22oiixGzlgGo1GvV5Pqjy4gNFoVCgUErkC07btdDod9igAAAAAH4mWWCIVEfYovGS5XHa7XVqMRClwfvdomqaqqqVSKeIJoIeJS0wMyNi2XSqVkp14dhnT6VRV1dlsFvZAvEdRFISCAQAAJJgIiSXTNAuFQtij8Ib5fN5ut1VVzeVyjUYjmOn+fD4vlUqFQiExczJebUWBJgQrogwppVsrzHo66/Va07SE3QwSt2fGAwAAwFtg8HAGCbjzSmtvKIus3W4Hdjrr9bperyuKktSpKgWacrlcp9NBbl40waT5KLZtVyqVVqsV9kC8pNFoIJYIAAAgwUTF4CHWDnimadJUnlzdAk5KGQwGuVzuFkrZrNfrVquVy+Xa7TYkU6SoVquDwSDsUcQDcs9PzAc41l/dAAAAwFEikYYXxxK0tm2PRqNqtUqmdv1+P3hfCtu2q9VqtVq9qfy0zWbTbrez2Wyj0YjXZyap1Ov1W9DqHkL+K8lwsplMJsViMexRAAAAAH4RCbEUo8kWm9ql0+lKpTIYDMK6Q0wVP2/2dr5t291uV1GUTqdzU1oxaiCwcBmz2SwZemm5XOZyubBHAQAAAPhF+GJpNpupqhr2KI5AltaqqgZmaneYwWCgqipMqDabTavVUlUVq2VCwTTNYrEIsXoZy+UyGXopnU7jMwAAAOAyYPBwnCivD55MJrwYKUjDhgPcZurdYebzebFYLBaLUI9BslwuNU1DJuQ1JEMvJcCbBwAAANhHyAYP6/U6l8tFat6/2WxGo1GlUslkMsViMZTFSPu48dS7w0wmE1VVE2Y1FmWifysoFiRAL8EyHgAAQIIJOQ0vOmGl2WzW6XQ0TctkMlQbN2p2VbPZTNM0BE8OYNs2vYm4Sn7T7/fr9XrYo0gIcddLrVar0+mEPQoAAADAF8IUS5vNJpvNhhhWoiBStVrNZrMUlAimeuwF0HLwqOm3aDKdTlVVxezNP5bLpaIokQoIx51Y66XBYFCtVsMeBQAAAOALYYqlsHy0HEGkwWAQ8XUXUErnYtt2q9UqFosRf2djChLw/CC+esk0zUKhEPYoAAAAxJLoTypCM3iwbTuXywU2l41REMkBlNLFTCYTRVEi/hcYO+7u7kqlUtijSCYx1UtwDwcAAJBgQjN4CGbKtdlsBoNBqVSKSxDJQUwnT9Fhs9lQyeCwB5IcYH3mK3H8k7dtO51Ohz0KAAAAwBdCS8Pz1UBJ1kjVajWmTk1xnDZFk3q9jsKpnoDVKQFAVi7xWhKWzWbjdR8KAAAAOJFwxJJ/juGTyYRcv+OrkQgoJW/pdrvFYhHZjFeCOXEwxC7XEfFGAAAASSUcsdTpdLyth7NerzudTi6XKxaLo9HIw5ZDYb1ea5oGpeQtk8kEq7+uYTKZFIvFsEdxK7Tb7Xa7HfYoTgWllgAAAFwGDB52oyiKV5VwptNptVrN5XKtVisZ6sK27UKhEBf/iXgBt4xrwIQ4YGJ0wev1OlYGAgAASCQhGDxMp1NN0y7ul5nNZsViUdO0wWAQr/z+w2Da4SvQS5fhX+os2Mdms1EUJRZ5j54nCwAAAAARIYQ0vOvFwHq9rlarqqpOJhOvRhUR+v1+vV4PexQJB3rpAsKqinbjxCX1cTQaXWOOCgAAAESWEMRSLpe7OF9us9m0Wq1cLjcYDLwcUzSYTqeFQgE37wMAeulcop9SnFRiEWpGXVoAAABJJWixNJvNVFW97FiqMdrpdBIpJ9brtaqqsUi5SQZepYPeArZtZzKZRP7dRR/btlVV9WqRp0+gLi0AAIDLiP7d2KANHi6zeLJtu9VqFYvFpGoJmDqEQqlU+s///E/KIMJ9cTej0Yj+YP/lX/4FSj5EYuEknkqFVrUPAAAA8I+gDR4uKMcxn88LhUKn0zm3rxgRi0ybJGHb9mg0+uu//uvf+73fS6VSqVQKtVbdzGazlItutxv2uG6RYrEY8SWaqMEFAAAgkQR6L/CCVI3BYKBpWrJDLoPBADP1gNE0zaEBkq3GL0ZVVfkqXZxDC67kmgTmYEj8FzUAAIDbJFCxdK7VW7/fr1QqyV6Fv1wuFUXBapCA2Ww2DhkQl4I2AdPtdvkSpdPpc8PCwEMiXnapUqkkoCA4AAAA4CBQsXTWEq4bibdEf1lbUnHoJciAnazX63Q6TZcIhXTCJeLBpVarhfAsAACAc4n+TDg4g4ezDLVupGoHqiqFi6yXENzbR6lUSqVSiH9GgSinuuHbDAAAQCIJzuDh9EIck8mkVColfmaGBLwoQHpJUZSwBxJdRqNRKpWK+F2fGyHKpYFRagkAAEAiCS4N70TT8BtRSiIO9lbJw7btTqfT/jw/+MEPdF1vgz380z/9k6ZpYY8ifviR2Ller3O5XDS/HlFqCQAAQCIJTiydkpK42WwURbkF/9kbWZEVNUzTzOVyYc+iQfIplUo+/YFH+SYLSi0BAABIHgH9tp24YKnRaCSjist2uz2gDNfrtaIoyXb5iybIFALB4N/dkE6nE1mnDUVR5vN52KMAAAAQJ2Dw8Dsmk0mxWDy8T8S9nk5nOBzqum4Yxr4donxvONlALIFg8E8s3d3dlUolP1q+HnyzBYxt26ZpjkajdrtdqVQKhQJ7V7opFAr1er3b7UZ8UgIAAFEjIIOHU0JGUTZ6OhfDMPaJJSTghQjEEggG//7M5/N5ZP1I6vV6v98PexTJZz6fd7vdYrGYTqcLhUKlUmm326PRyDTNA+kbpmn2+/1Go1EoFDKZTLVajXLZLgAAiA4BpeEdFUIJkxD7xNLtLMqKJhBLIBh8/UJLp9PR9HiIsllf3NlsNnd3d/V6PZfLKYrSaDSuCeJtNpvBYFAqlTKZTKPRWC6X3o0UAACSRkBi6fCvu23buVwuSRJin1hKzKKsmOIWS59tvZl0fra13zF+fmCHXwzf+Wn5Rz8t/8irHk/n09UnR/cxDKNcLgcwmBvBV7GUy+WiObuNcopgfJlOp9VqNZvNlkqlfr/v7Vu/2Wy63W4ul6tWq1hvBgAAOwlCLB1djBRMWMmyrFqtVqvV/O5I7BFLs9lM07QAbgmPx+Nms1mr1SzL8ruveOEQSz/Of/+wwjmdZ9aHP85/f9+rS/O9H+e//4vhO78YvnOiWKIGn1kfXjmwn5Z/9Ej/4eF96E/jyo6AjK/faZlMJpr2MIlZdxoFNptNv99XFEXTtMFg4PcPx2AwUBSlUqkk6a4lACAWwOBBiBPmDcFcJl3XyaQugDvoO8VSMKufF4sFTXxXq5Wu6353Fy9YLC3N994xfv7j/Pd/Wv7RO8bPl+Z7S/O9J73/pt0+XX3yjvFzChbRnk/H/0sv/Xqxesf4+TvGzzlcQzu83fwPFktPx//7jvFzbk0I8Y7x86OK5Unvv6llevx28z/aqb95u/kfNBJq5Jn1IbfMA3YEtaidJ73/pu0/zn+fNKE8Hge9Xu+AHwm4AF/FUmQdum3bTqfTYY8i9sxmMwol1ev1gKM9o9FIUZTBYBBkpwAAEHGCMHg4nHu2Xq+z2ezFwzgRWSPl83lf+yI3vHK5PBwOeWNgCSqLxSKwM40dh8VSO/U3v16shBBvN//jkf7DZ9aH7dTf/Dj/fdItT8f/++vFip6Oa30SP0/H/0uShsXSk95/kzh5pP9wXOsLIX5a/hEplkf6D39a/tHOgVH857BYokaoI1JENAY5qEW90PhPF0sH/EjAZdymWBJCZLNZhCYuZjYblEu4AAAgAElEQVSblUolVVUDCCXtY7PZVKvVQqEQzVRPAAAIniB+dA+7O/T7/Xq97vcY5OmgrusB56fZtq0oSsC/PZgBuzmchkcyg7b/YviOnAhHyoc00jPrQ0qre2Z9yIqIFcuP898f1/rPrA9JNdFLrL72pdU90n/4SP/hL4bv8BaSavL+pJGEEONaf6dYoh4daX7U8oFrQquVFovFqRcRnIB/Ymmz2WQyGT9a9gS4h18Gy6SIONSZpqmqKt5KAAAQwYilw+4OwTiGhyuWgq8jaVlWs9kMssdYcFgskdh4Ov5fFjkcsaGg0CP9h3QI/ftsa1M4SHxeLFG0isNE4oQ0vF8vVuNan6JAFN3aKZbkp26xRHEkR8tHxZJlWeVyeTweH9gHnIt/YinixqHwsDmXqMkkZrPZFIvFdrsd9kAAACBkfBdLh5f8LpfLXC7n9xhEsGl4DtbrdS6XCzKngpXSdrv1sNlyuUyLoBaLRT6f7/V6QoharcbXM5/P03KpXq+Xz+cpWEEZiR4O4xrcYolCSfIWd7CIHlBqnCN0QwZ3QgiSOuI+BkWv8p5HxRKtgPp09QnrNxJLvFZK7BJL1CN3/YvhO+3U31D0ifc8KpYEgpA+4J+kqVarUV5SEnEtFyko4S2CMkmm3W4Xi8VoWtUDAJIBDB6O/HYGk4NH0EQ/GIMHmUqlMhqNAutuu92ys5m3FmfNZpMuHVlHUCyCNwohyuUyibTxeKzr+mq1kjdGAYdYIvEjx5fGtX479TdL8z1xL1d4pRDtwAuQSJ/QKiZKvWNlRQEoCjHRUe8YP9+3WongNh/pP2TrCG6HlI9DLJGykruWz0h2m3AMxg3Ekuf4pxkia4VHwBDvRPr9fi6Xi7LuZSaTSaFQiPKnDgAAfMV3g4fDWRlB5myMx+NyuVyr1WgSHwzT6VTTtMC6E5K9BJ1skF1Hn6NFaTlSJI65gScJ0zSjI2iTgU9iKfqFjGzbzmQyCEQcgH4U6vV6jOTHdDqFXgIA3Cy+p+Gpqjqbzfa9mvjVwIdPHwTMAbFEWW1yYOd2xNJqtcrn89BLHuKTWLrm+8Q0TTnPwb+nL7744r//+78H32/0n242m+9973vf+MY3OCkjCqM68elsNiO9FKlR4Sme4unhp7C19AR/xdLRu4zJ9pmN/m3gW8PcL5Y+29puq7rra8LGCJQw9hA/xNK53yej0Uj2lQnst7lYLP7gBz8Ivt+IP51MJoqi/OM//mOkRnXWU4ovvf3225EaFZ7iKZ4eeDoYDGC6cz3+iqXD+esR98C9HoSVooZ5LA0PAE/wQyyd+32yXq9DSYcLciVqLCAjh2KxmIA7gzDwACDWRDOZ69YNHg7/aiZ75oqwUgRJ9kcORAfP55QnKpButxv6whJ4PMjQCqVYGDmcCNzhAYgptm2XSqXQfyPiiL8GD/V6vd/v73u12+02Go2LBxBxEFaKIAkTS1v7+dZ+HvYowA68FUvL5VJRlFPCRP1+Pwo/hBG37AsG27ZbrZamafP5POyxeEz0bwMDAICH+JuGd1gwtNvtpBa8S7YOjC8JE0vGG4+MNx6FPQqwA2/FUuzmpqVSKcq1gwJguVxqmtbpdMIeiC9sNhtVVbFwHABwI/grltLp9IG7oUkVS7Zt53K5BKSnJ4/DYqn88MHw8Zvlhw9qvVdpy/jJ4/LDB/orL+mvvNR763VZnJQfPrA+eN/dyNZ+Xuu9KjfSe+t1Orb88MH4yWMhRK33qvXB+7Tb4tlHQgjzXav88EH54QNq33jjUe+t1/nwnYqo/PBB/uVS/uWS/spL5YcPLr4mQWIYvyyX3yuX31utPqMttdrTcvk9w/glPS2X37OsT8vl92q1p7R/r/eMXur1ntFu4/GvqZHF4jdCiMXiN7XaU9rI7Tio1Z4Oh7+SuzbNDT2lQxaL39DYaLfh8Fe0kfYZj39N7XDXvEUIUS6XqeaYjIdi6XB8Pprc+N0i0zQTn1kwm800TYNHPAAxZTAYJPs7ylt8FEvz+VxRlAM7JFUs3fhEIcocFkv5l0ukcGq9V4eP3xRC6K+8tLWfWx+8n3+5tPrkY9piffC+8caj5mu7s/a39nPSP83XurSP8caj/Mul8ZPH1A41QjKp99brpHMWzz6i9ssPH5jvWotnH+mvvEQN6q+8RA06sD54n7qwPnh/p2yLGr3eM5JADKsOEjNCiHz+Sa32dLv9ba32tNd7tlj8Rtd/922u67PF4jckcoQQlvUpvWRZn+bzTwzjl9vtb/P5J6SgHOj6TNdnq9VnPIbF4jekmsrl90xzQ42Mx7/O559wF3TIdvtbeiAPZrv9rdS43uv1HD16JZY6nY7saLePdrsdqdv8CQvhnkW3272RkkSj0eiUWosAgAgymUyikyEc/ewJHw0ejjocJFIsIawUZY6KJXpAEaTVJx+TYtnaz/klEjysZHbCaop2k5UVxYj0V14y37WoZY4gme9aFH2S9+Ex7CReaXimucnnn/R6zzislM8/saxPLetTiufQFt7ZNDfiXiOtVp+RUDGMXxrGL+koeolVkxCi13smyxhG12eW9amQJBZ1QdEkarDZ/JBf5QAXdUTKjYbXbH64U4858EQsnd7IYDCI1D1+27az2ewtCAYZ27YrlcpN3SmrVCqj0SjsUQAAgL/4aPBw9J5oIsUSwkpR5iyxJO5DQPorL1GgSQixePYRB6B20nytS1l2w8dvslhySBoKTzm2GG88omAR7Tx8/Gat9yql8O3rK15iSQhBsR1dn1FAiTQM/SMFwmKJGQ5/Vas9bTY/JLlCiXl8lPi8/tmHWyzp+ow1Ej2g/2WxVKs95Y5Yg5GuazaPFOC6XizF3aP51qbRm81G07SbOmUhxHq9zuVykRLqAADgOT6m4R1NtU+eWEJYKeKcJZasD96nhUmysCGdU+u9uk+l6K+8xAuTThdL+ZdLW/s5xZF456MhLBJUB3aIFKw3KDokhND1GYWP+FW3WKKNvJ20k/zqZWIpn3+y3f6WAlY7xRK9xEEwR48UB7sfXt4wDMc+V0qduCslkYhTOJ3lcpn4RUr7ODFTFAAA4ouPYknTtMN5eskTSwgrRZyjBg/0gOM5+isvkeYhCeQweKBVRs4uJKsGUjLu6FCt96pjGRIl4JUfPmi+1uWdyQHi8BnRPrEweOj1npE7AqsddlDgxUuyCGGazQ/lSA67RNDOZPBwuOta7ansBiE3QjGrxeI39D+9Sv+znQNpJ3m0ciZerVYrl8uOHq+RCu12OwEyY71eZ7PZsEcRBGR1EKk1Y0GCW4QAxJT5fI4C4ifio1g6WmojYYXe8ZsRfc5ady6vNeLsuMDY2s/3WTuA6GBZlodueJvNplQqnXsLqdFoRHOmfvR+WQKgr5Qb/9pHBXYA4shR64HAuF2Dh1NuK1Jp84sHEDUQVoo+Z4klsqSjuM3O0M3i2Uf8Kv3zKimOwlm8UEoI4egoFqGkUGCLcP5HPns+YRjGzq/4C8TSbDZTVfWC8kSz2Syai0aSlzvgYDKZFIvFW/Ox2En05zoAAHAxfhk80K/I4RY2m00mk7l4AJECYaVYcMuOxiBIzhVLnU4nealcR6tHxJrJZFIqlaIpU4OHpH7YowAAAF/wKw3vxDCLoijRMXq/BoSVYgHEEgiG08XSdDpVFKXVaiVy2p1U2wPTNIvFYiLfsotpNBrd7u7qcwAAEGv8EksnVp0vlUoXpJ1EDYSV4sLNiqXVJx/vtKMAPnGKWNpsNvV6XdO0ZNww2knCFqYSs9nsRsrOnsVyuczlcmGPAgBwKvibPR2/xNKJS3uT4TqKsFJcCEAskdu4Y2Pvrde39nN5S5B2EeTmd7pdhFwq93TMdy2qtHuYWq0mhNhut7u73v6W6inFnaNiaTAYKIpyyh2lo1QqlcjeqbFtO5PJJCkCA6V0AKxcAgBcQPS/OvwyeDhqhUckwEUHYaUYEYBYctdQ2rmRazr5DVWLOveQw/WddnK0Qq5pmuSyXS6Xe73e7q5PKJoUCw6Ipfl8XigUqtWqV18a0+k0ymrkxCyDWLDZbFRVTdjSMg+5qeJaAIDbwReDh9MrbHioNJbLZeEE/uRP/uSFF1740z/901N2PoUXX3zxhRdeOLzPH//xH3/3u9/1qsejfOtb3/L2HE/h61//+l/+5V8e2CEKi6GPFqXlqkq0pflat/zwgf7KS/mXSyQGyO/ugK+3/spLzde6HMmxPng//3IpVfp2/uVS/uUS1V+St5DAoK6pr335cmS+Jw+PR0u+eTQ82sK6xfrg/aNRLD6KupCHRzV5ucfywweyR5986eR/+zoyDCOfz9dqtdVq9buua091fabrM6pilM8/SaUeUxVay/pU1k6yr10+n98ntyLCzlnjcrms1+uqqkb8Fpq3JGnpfyHytz/DJXmBRAAAED6l4Z1ihcd4tSrUNE2ahRzmO9/5TrfbPbrbibz99tvZbPZnP/vZ4d2+9KUvjUYjrzo9hdFo9LWvfS3IHr/61a8evrDZbDb0O7LmMbFESoAqw64++ZhEwtZ+zgKA1EKt9+pOzSDu69gKIcZPHnNI52hkibuWizu5W5bz3DiSQ8NbffKx8cYj/ZWXtvZzHjArvQNu47Xeqw415Y4skQzrvfX6AW/0o5Ely7JWq1Wz2VytVqZpCiFqtaeG8cvP7+OMLBnGL2u1p73eM7nybLPZNKM9Z3WIpdlsVqlUcrlcv9+/walkMmweYGBwCtVqdTAYhD0KAADwEl/E0llreLyylz08D2a8vTV44pl+5StfCVgnBL9u74UXXjh8YXO5XPTFEj3geT9pD4oO0UukQw5oBtZFsuQ4RSzRg30pcFT0aWdH/FiWK3KDhzWMOxC0cwykuw60c1QsEcPh8P+6zj9xdr0rDa9cfi92uXksliaTSaFQUFV1NBqFPajQSEC6dQJOIRhO/CEGAIQODB5OxxexdG6SerFYnEwmV3YavFg6PYcQYknEUCxRZIliMpxxN37yWE6Ec3OlWDLftXYqMQ5zyR1xoOkaseRO/HOLJep953Is5kSx9Lmu9dlq9dnnunaJpdXqM8rTs6xPeeNisTiro+AZDAa6rquqWiwW/Q6CRdnggYl1cGm9XquqGv2LHBGi8FUPAIgR0c9w9sXg4Vzx48lNu+DF0ukBNIglEY1f0LPEEgVz6DGJBNqytZ/z4iU3O8US7W998D6LrvLDB723Xrc+eJ9c8vIvl8ZPHtMh+zzlyg8fUCOUsEeyzfrg/d5br1NHl4klSt6zPnjffNdiyz4eD58Umd0dUIn0Kq1xOtDd57o2fkkqyDQ32+1vf9d1/sl4/GuWRro+M82NaW5kEUULn07sJWCm02mj0fjKV77y4osvBiMPIm7wQMQ6MlOpVG45MHgu7Xa73W6HPQoAAPAMXwweLpgWZ7PZK+/bBS+WTj9NiCURB7HEooKEAbkdDB+/abzxiLTN+MljVjJuN3DHdocBd++t1403HvEWWmJkvPGIGmQDicPu245Gxk8ey09l824+l639/KijN52jrKnMdy3asrWfL559JPd4oDV3O0cZDn9lGL+UVy6Z5oa2bLe/XSx+w07i4/GvTfN3BpvNZjNSYsm27dFoVK1Ws9mspmndbvdHP/oRbMEceJJBEDyj0WjfLx3YSZIsPQAAQPiRhmfbdjqdPveo63+QAhZLZ90ohVgScRBLDmSvBbI38G1cwTmJJwDDMHRdj0Im3nq97vf7pVIpnU5XKpXBYMB3fOCh7CaOc+jNZqMoChLwzuXE2iEAABALvBdLFxs2XJnqELBYOisFH2JJxFAsiXvrcAoruV+l0JP874Dxw2EcVnWOZs8tlLQPcieX/51YplbGw7O+DMs6XvrWJzabjWma7Xa7VCrlcrlsNluv1+/u7tx7QiztJHb5bHDAuwx44gEQfWDwcDrei6WLc9PX67WmaRfPp4MUS+eeI8SSiKdYArdDt9ulgmCNRqMtUa1WC4WCoiipVCqTyRQKhXa7fXd3d/jDHKRYioXBAxEvp4T5fK6qavTXg0UQ3CwAAJzOLRo8dDqdVqt1WZvz+VzTtMvC90GKpXOdnSCWBMQSiDYUNTJNs9vtymJpMBiYpjmfz89qLcjJYiwMHpgYOT2USqWdYUNwFK8qggAAQBTw3uDhXN9wB7PZTNO0C249BiaWLvixh1gSEEvglsCd9QPEIkcrjiusosNlS5cBACCaeJ+Gd70amU6nqqqe20hgYumCFiCWxG2LpVrv1XNXBy2efRTwWiDgIRBLB4iFawLCSleiKMq58VgAAIgm3oul603AhRDr9ZoWD+xsajKZ1Ot1RyJcMGLpstuNEEsiDmKJ6yPJRVoXzz6i2kFkos124fLjnU1xuSGqnjR8/CbXWaL/V598vE9BLZ59NHz85rlli2KBZX0ql5ddrT6Tn9LjxeI3VKx2sfgN118iJ3HejR/TbnzsTmiHxeI3jqPkQ7j9A/uIk+vhQiwdxjTNYrEY2ezB9Xqdy+UiO7xYALUJQMSBwcPpeCyWvA2+d7tdRVHa7bZDMpmmmUqlUqmUoij9fp/WOAUjli77AYBYEnEQS/mXS/orLzVf6+ZfLpFeKj980HytW+u9mip9m+osUVVWqk67sxEuZdt8rbt49hE9pZb1V16iYBH1Uuu9Snu6G6GX+KgLPOsiyGLxG12fGcYvm80PSZAMh78ql9+j0rSkjvL5J7Xa02bzw3z+iWluhsNf1WpP6fBa7elw+CshRLn8XrP5Ie0mhLCsT3V9Rhvz+Sc7u9b1ma7ParWnuj6jRnq9Z9wRCTbaoVx+j/5Rj7SPox6uYRhHTxYGD0eJcv0imOBdD64hAOBEbs7gwfM8781m0263s9msqqqtVss0zdlsNp/PUxLpdLparf7rv/6r32Lp4rODWBIxEUsUxqHKqrIi4jpIzde6zde6FPPZ2Ujvrdfd6XOO/VkjWR+8v88WnOJRp55YHCB9Im9hbTMc/oqUD2kkIQRXquV9SLH0es9oT95iWZ/m808oAFUuv7czvqTrMypuS6JIfqnZ/LDXe2ZZn9Kx1F25/B5JO9qnVnvK9XDH4/FqtTp6sjB4OIV+v1+v18MehRPbtrPZLMoEXQn5o4Q9CgAA8ACPDR78u1k4m806nU6hUFBVNeUinU7/7d/+7Xe/+92j7Vwjli7OK4BYEjERS/SAxJIQQn/lpfGTx723Xpd1S/7lEher3QnFhWTJ5BZLR5PrkieWhBAU22HJlM8/aTY/pDARbXSHhiigxCEmw/glRXuazQ9J0rj1jxtdn5GI4p0pqFUuv5fPPzGMX1rWp/Q/vUrCSddn3BFprdNBGt6JRHBKPZlMisVi2KOIPRF8ZwEA4DI8TsO7xjf8LGSlVCgU5vN5AGl4FycVQCyJGIolqr7ae+t1uSKt8cYj0kJHU+Oar3U5xQ5iSabZ/NARNWLcWyjCUy6/xxEnh265TCxxMIoGs1MsUTKeg16vd8qyJYil07nSQNVzYmHWF328/RMYDoflclnX9aN/feVyOZ/Pl8tlr7oWQmy32+12e2Uj5XK5XC7XajVPhnTZAPjKWJZFj4fDobdduDe6y4ifuPIzauz7UJ3+4TzMZR+z1Wql6/op+Q69Xq/X653YbK1Wow/MueNJKh6LpcB+ZrLZbCqVymaz3F2QdZbOBWJJxFAsrT75mFcNkezhNUv8wM34yWM6nKJStJHcGow3HpHuOkUsifulTcYbjw44ScSI8fjXlFyn67Px+NdCCAra0EbasnPREa04oser1WcU8KG1T+JSsUSN1GpP90WWaJ9a7SkNj10fTpyHQSydRaVSiYhesm07k8nENK0xUvjxJ6DrunvmLdPr9ZrNpredCiEMwzhlpeJRLMvSdf36di7AcWV8GsnOubVjY4gX4UoOK4ejH86jXPwxO/Eod/tHJ4oQS4zHYknTtJ2Vaj1HUZR6vS6nlUMsyUAs7eQUNzwhxNZ+vrWfj588rvVeXX3ysfXB+yRaHG54OxvZ2s/Jwk621BP3rnqyG94pJMkNb7v9LVnhkZcDQXl0vNBo54qj1eoz+RBxb6nHAkb2r9uJ2zpP3Fvqbbe/pRAT/e8wxKOO5FE1m81TZmMweDgL27br9XqlUgl9pVCUbSfixZUL0larFd3blqd3jvmoaZoUruGfHsMwrpywurum++v5fF7XdbpRUqvVqMfValUul3dGA2hsjo0OncDjH4/HB856Z8uOs5ZjVhQvckSxHFfGMZJer2cYBnXNzfZ6PQqYUMzklLPO5/PUNX1J9no9XddTqRQ10uv1arWarut0MalZapn6uuasa7WaZVl0ChzhOXwxe70ejXY8HvNRtEVuhF7lMEutVqOXaOTcmuPDefR9dJyC+2Mma5tyubzzg01XWA5q7Xz3m80mvZXU4GKxkD94BzqSxRK976eEsC7g5gweMplMML927skBxJIMxNJOzqqz1Hvr9fLDByRX5DCRDL3K/y6zrWN3cv53QSOAYEnG/9h8/HroB+aUPWHwcAGj0UjTNEdNiICpVCqj0SjEASSGK9cs5fN5msnJqU3yfNQ0TZ4jbrdbmv/xXHNnttt2uzUk9qU8Obq2LItukViWRb2z0pB1jhuas8qTS1micPYUPaBfz51nLeM4ayEEKQ1xr22oETr9Wq02HA53XhmHWDIMI5/Pm6bJ21ns0XT8xLN2dL3dbinfjy4dvU3D4ZDeR76YqVSq1+ttt9t9mWynnDWd3WKx4C08ThqMu1nSKoZh6Lo+Ho8NwxgOhzR+0zRJJ1DX9DbRFv4QOq6h/OE82jXtQ6ew72PGbRqGse8OHV1huWvHWyB31Gw2SRTRGdEFp8/nvo4cYimfz8c0hfJ6PDZ4SKW8L9x0IhBLMhBLOzm3KK35rsXrl9yvbu3n9Cr/k1c3nU7vrdcd7SQj7y4UTHNDiXP8j43sggRpeJcxn881TQs4Jc80zXa7PZ1ON5tNNptNhvIMnWvEEs9ZHciTwp3T0KORJUvi9K7d+UskIeSZpRyEkbuT55fy9Fpukx7vO2sZ91nL01l6zFscXRyILMl70uE8mPF4zHu6z9rBzq4Pp+HtuybnnjULzu12S9qARRqpVnezhmGYpkmdklSQP2D0mONpckdHxdLRrkkhu8fjOH36/BzNWnR0Lbcmd8RnSuEjOju6Vvs6Qhoe46W28bbI0rlALMlALO3kXLEEwGVALF1M8Cl5s9mMvIL+3//7f1/72te63W640a1kcM0C5n1Ljxw3792/OIfF0mKx0CV23iPf2bV7FjscDvP5vLxcfqcGo9w2eZ8DYumUBVfus/ZJLC0WC1qfKV9z91k7uF4s7Wz8lLN2Lxni+JVlWTvfa9ZIB8SSnJZ2ulg62jV9FN3jcXzM6F04KqEPiCW5Iz5TSlnkcN+BjiCWGC/FUrjFgCGWZCCWdgKxBIIBYulKRqNRLpdrt9vBSKZ0Ou0oR4FkvCtRVfVizUkJPzT/k9PYHBN3XddpqscJdddHlnZ27Yj50CxZTp/bSa1Wc4gfeXpN+V1kgEbt7DtrGfdZc5IVBzE8EUs8sXaExQ6f9c6uHTKGWuC3jEciZ4VdcNY7xRKPc2fKpVsssbjlUbGCrdVqdHbNZpO6pvVXcneyWHJ37cgO1XWdwmX7PmZCim7tDLjt7Nr9FuTzec6H5FgTdcoTxX0dyWKJBFXEVxb5B8RSEEAsCYglcEvA4OF6qCJ5MJKpUCjISqnT6fjaXeLZbDaZTOaaFnhVPU1V2Z1ZnnEahuEwSDjR2f+srglar+8weKDIw75GHJljdDgvrRGSlwCPf2fXDtxnTU9lgwd6IFtFO66M5TJ44D3pcNJyNOB8Pk/OE0fPemfX7M3AF4RPYbFYWPcm5ocXgB09a/ZdYNjGYF/LdE1oqPRA3HshlCWDBx48nR3FamgL9e7+cO7s2mEOJO/DG+WPmSw4y3ucFdxdu98C9nvgwB1/zKjZAx05IkuH44rXcFsGDxBL+4BYEhBL4JaAwYNXBCOZGo0GK6VrPNwAgcK+Ecc65t8tx0bcQZsgRwJCRBZL7HUR4nhCxEuDh3BnohBLMhBLO4FYAsGANDxvYclUr9fv7u48F4ej0YiUEqb4nnClFR4Qn488OKIo12MdK0pLmW8HwlwcFmMuq2/riFP5d9ZlF540GxheXfATcRSlJSfJm1VKwts0PIilfUAsCYglcEtALPnBZrPp9/ulUimTyZRKpX6/71X+4XK5TKVSqqomOEYXJMVicTKZhD0KAADwBoilIIBYEskVS5wLzknP4vMJ4pwNPB6POX358HpNEHcglq5huVyaB3n77bf/+Z//+Xvf+94f/uEfvvjii3//93//k5/85PAhR3nxxRd/9rOfXdnIuYR9pf0isIqLAICLCXftTLzwUiyFW/vchFiSgFjayYkfkrPgJY+9Xo9j1rxRrrPBoX9ylbnZ4m63AAweriGTyRRO5jvf+U4ul/ujP/qj0w/ZyXe/+90rWziXbDabSM+9u7u7UqkU9igAALGhcFMGD+HeTJ3P5277Vzdf+MIXju7jOV/84heD7/RLX/pSkN19+ctfPrxDLpcL/V6jH2IJADcweLiGVHjFzYPkmkpEUUbTNMfcAAAAYo2XBg9RyzzZbDaapnW73bAHAqICxBIIhqh9GcYLiKX4MpvNVFX1vFm2SD4akKdV6acv3/fcO+EsyM/glMKjZ3G9eR0NTNd1n6yij0IOE/l83lcbAwBOxMvfpEjND9brtaqqqVSq1WqFPRYQFSCWQDBE6sswdkAsxZdKpeJfbuFRD2suIXoWIbpXlw8WF7oYR3mci5Er8AQMlVINpWsA3CRTLNGKHcr+isiQQBSAWALBEJ0vwzgCsRRT1ut1LpfzJCmUqqCWy2V5su4QS+Z9tVNe7WAYxmE1ZRiGW005xBJ7NHMUa+dgHDgG4zhksVhQVVBHI54YWMtd93o9XddTqZSu6xQX2taLwQUAACAASURBVG635XKZhMd4PN4XwtppRe0QSzR+uQX3W+CGryeNgQ8hlXjilVmtVuU9hVnBxcDg4XQSKJZmsxkrpVQqhckxYCCWQDDA4OEaIJZiSqPR8CrvPZ/P82SaN8piyTRNzsrbbrecz0bVgQ5ktTWbTcerslgaDof0qmmasmGPezAyjsEIqagrKQHLslKpFEkXquxJEoIyBvfVzDFN05A4pevtdkuuQpZlWZZFg+n1erVajbved2XK5bIj6U7ut1arsZURKRn3WbsxDKNWq61WK+p3tVrRGOiBaZruK8MVfmTJulqt4IqUYG7L4CFcNzxiNptlMhmHr0C4QwLRAWIJBAMMHq4BYimOeBhWYsXiQBZLtVptZyREjiwtFgsKsDjCFLQehp/KYknugh7vG4yMYzByg/R4XxeHI0ukfJhTuibcaXi1Wk3XdU75owCUruuOU6vVavIWWSzJbdLjnV07cMgzuUF6fNmVASBgvDR4iMJMdL1ed7tdRVFYLKXT6XCHBKJDFD6i4BaISJg9pkAsxZFSqXR3d+dJU/uWHjkm0+5b0e40vJ1Kg6I98j4HxNIp66Acg/FKLLGkceu9fV0TO8UShZvoKcswOVZD0Tl5DdVhsXQ4+27nSCCWQExJTlFaB9/+9re/973vUZQpdMdqEBEi9REFCQZi6RoglmKHt1+tlHNF82Y5LiFPpik6RNlfnAN2dM0SLX1xxEPk+Tqljckb9w1Gxj0YPoTT8HyKLO28Do7FXRQco/p++/LlKKfO0YusbThJjxII93XtwBGqol4oXZDT8E65MjT4iGdqgQSTTLG02WwymYwQwrbtwWAAsQQI+SMaliMquAUglq4BYil2qKo6m808bHA8HtOSFYrqsHW4vB6JXAHkYEiv1zu8rMWtpqgFapmObTabDoMHx2D2tSwPxrIseiobPNCepFv48dmX5ljXQjJRGA6HssHDcDjcdwqOkbB1uBzUctusu7ve2TLtQ1KT/R5kgwfe88CV4VLvwCtg8HA6yRRLmKmAncgf0e12G1ZtDeBg8eyjsIfgMTB4uIawxNJisQjSrTgxYqnb7TYajbBHAZIMhaTghpdUbsvgITpiyddSDyC+OD6inmdFWx+8X374wLFxaz/vvfX654bxrmW+e23RwGTQfK2rv/KS/spLw8dv7tyh99brW/t5wKO6Hhg8XENYYinguyfJEEvr9VpRlNtJ3+DACIOqqQRHkBivzOu2261hGFBKIES8NHjwqXT3udi2nclkEjZ7AJ4QgFjSX3np6EbjjUfGG4+87Tqm5F8uHd5Bf+Ul64P3gxmMhyC4fQ0BiKXFYkEW0pQLRKsvdF1vNpur1YrWUdDyFf8UVDLEUrFYnEwmYY8CAAB8xMvfpIikP04mk2KxGPYoQBQ5IJaMNx7Veq9SlIOUzOqTj8sPH5QfPsi/XKI5ffnhA4oRme9ablEk7nVR+eED/ZWXar1X6ZD8y6VU6dvUiPXB+/SA/3HXdFTztb1VSow3HslBmPGTx/SUY1k0POpx/OSxEGL4+E3a50CzFNvhUzPeeNR8rSsPRtYzB7QNXz3KqePRUiPylZGDb+5AnHwx5Ut3YM8IArF0DX6LJcuySAJR/RnaKK+XEPfL2Y/aoF1DAsRSv9+v1+thjwIAAPzFy9+k9XqdzWY9bPAy6vV6v98PexQgijjEkmwgS5P7rf18az8nSVDrvUqypPlal+TT1n5OgQ6WBA5ofk+REN7naGTJ3bWb4eM3HWqBDhH3Wou20APSUatPPuZ+yw8f7Buwe2x0rHwdSEcNH79J7bup9V6Vz8h815Il3PDxm+4rQ/qQVNC+4QlElm4MsuTxWyztXPwgF94R9yvXfR1G3MXScrlUFAVJHADElIhEOGKBx79JUXAxyuVyy+Uy7FGAKHI4ssTTfQ740BZWC0II810r/3LJsQaJkbUHz/JPEUv8dJ82KD98IC9zktvkx/Kxi2cf0XZqvPzwwb7EP4r28BnJg6HWFs8+ovYPSBqHxpMbocc7r4w4GFly7xwjYPBwLvP5vF6vZ7PZarXq6+/IarViXcShJNM0KYhEBg+WZTWbTYd88py4iyVN0xzrlgEA4AJuy+BBCJFOp8O9z8Sm4QC4OUssNV/rUvRDlhmUtLYvwOKJWFp98rG7ZQ5zuTvaKZZo+75xOlh98jGl3rnHxqOiaNW+FhzDplw++ewglvwj1gYPFErSNE1RlH6/Tz4BAUSWLMsaj8ecZWcYxnA4HA6Hq9WKfKKpuo6vv9+xFkvtdrvdboc9CgAACAIvDR5EBKI6WLAEDnCWWCo/fEAJeMPHb5IS4Fw4XuHjYJ8koEVE/JSWPFkfvE9bKI/O+uB9WnG0e+TvWtwIhZgoHEQ90golt66gBU7U0U5Pua39nF7lrneKpeHjNw/E08R98h6NbWs/X33yMY2WEwIvFkt8ceJlL440vKPIoSTHfTe/xdJqtTIMQ16htFqter0e5eZZlkUe4vTAv2HEVyxNp9NCoRBfiQ4AAGfh8W9S6GIJt7vAAQ7UWZLtvOXsOxIPnJjH8ZOdWW2yS7jseW2+a1E7vGX4+E2WJZwmd0CNyI2wbKCnPGy3y/bqk49pn305eFv7Ob0q5xnutDU/at8nn5EQYvHsI3pKV2zfldnnGC5D78LhixM1IJYO4A4lOYhCOncAxFQs2batqup8Pg97IAAAEBAe/yaFnndYKpXu7u5CHACIMrJYOlocI/9yiSb6ZE7g36jgJJ48IJbcLJfLVqu1M5TkAGIpysR02AAABzB4OJ2kiaVsNpuAtc7X02w2qUhI2AOJFmfVTR4/eUxGbbXeqztzwGhFk/zvslSx3luvy2ETSvaT/50SfjnK4tlHjmZPXNHkwKuzduDTWYcFDB5kRqNRsVjM5XKdTueUoUIsRZa7u7tSycc7RwCAGyR07XAUjw0ewv32j4h3eegYhkEfu16vF/ZYosVZYgmAi4HBg5BCSZVK5ay6pRBL0WS9XquqGnFlDgAAnuOxwUOr1ep0OtcN6XKiedPLNE2yWjJNkx43m83FYkErjA3DoFI/tM/OFobDobwcmRvkl+h/Wp1M5UEoshTUKcYGiCUQDDeehnduKMkBxFI0KRaLZ4leAABIBh7/JoVbzzuC1cRXqxXlwo3HY1IvlmXl8/nhcNjr9Xq93nA4JPvaWq1GJT4cNJvN8XgshMjn80II0zS59jw1SP62q9WKvd0Mw7CsHWv0AcQSCIbbFEvz+fyyUJIDiKUI0u12G41G2KMAAIAQ8Pg3KdzYTjSt8HRd57CPEMKyLEetQ3rKFT/ch/OBQohyucxCiOQTaySIpaNALIFguCmxtF6v+/2+qqqKolwWSnIAsRQ15vO5qqrRzPYEAFwGDB5Ox+PfpNlspqqqt22eTr1e7/f7YfV+gOFwWC6XKXHOLZZqtVqz2dy3uM2trCCWLsY0TVVVTQB8ptVqJd7ggerJlkqlbDZbr9dns5lXLUMsRQrbtjVN8/D9BQAAmZszeNhsNplM5rohXU4EfcMtyyKXBc7Hc4sl0zRJ9uyEQ0kUnuJ0PtM0KRgFsXQ6y+WyAEAgBHbjJniDh8lkUq1WM5lMtVr14ysXYilShLsUGQAAQsdjgwchRDqdDitYr2na4fIdwUMWDmy3YJqmcY+822EzhmazWS6XWXaPx+Nms0kajKwdTNN0PDhgFwEAABcwn88bjUY2my0Wi4PBwL/veYil6GAidRkAcPN4/5ukKEpYtb1zudxyuQyla6+wPg874AEAQCgsl8tOp6MoiqIo3W43gJS/VCrV9oIf/OAH//AP/+BJU36gqmrExZJt24qixP1XFQAArsR7sVQIL/UQYgkAADxhs9kMBoNCoZDL5VqtVpC3wAaDgSdq5O/+7u9efPFFT5ryiYj/YEV2GTAA4Hpg8HA63oulEFMLEiCWAADgLDw3eBiNRpVKJZvNVqvViC+6PUy4a2jjDhLwAADBEGKU5UQ8NngQQnQ6nVardcWQLgdiCQBwa3hl8GCaZr1ez2QylUplNBolwydaVVXYuF0AEvAAAIDx3uAhxFJLEEsAAHAWk8mkXq9ns1ly8NtsNmGPyEsajUa32w17FPEDCXgAAMB4n4Y3n88VRfG82VOAWAIAgKPYtn13d0f238Visd/vh1KpKQD6/X69Xg97FDEDCXgAACDji0NrWMavEEsAALCPzWZD65EymUypVBoMBgmLI7nBvP9ckIAHwI0Ag4fT8UXVhOUeHsE6SwAA4CtHDR7W6/VgMCiVSglbj3QKmA2cCxLwAAABc4sGD0KIUqnkR1n3o8Sixh8AAHjIPoOH5XLZ7/cLhQL52oXynRwFbqTErScgEAcAAG68N3gQQrRarU6nc3HLFxOiER8AAESB+Xze7XZVVc3lcvV6PeK36wIA6dknggQ8AADYiS+33MJaUxuiER8AAITIbDZrt9uKoiiK0mg04JfNQCydCBLwAABgJ76Ipel0qmmaHy0fJkQjPgAACBgytavX67lcTlXVdrsdymLRiAOxdAqz2UxV1bBHAQAIDizpPB1fxJJt2+l02o+Wo9kvAAAExmw263Q6mqal0+lSqfSd73znf/7nf8IeVHSBWDqF6C+wBgAkleh///hi8CDCq5se/SsOAADnQq7f1Wo1m82qqtpqtfjrd5/BAyAymUziHdKvBBnsAABwAF8MHkR4xnTweAAAJIbpdNpqtVRVJdfvwWCQ1OqxPrFer7PZbNijiDTwdQAAgMP45ana7XYbjYZPjR8Ay5YAALFmuVwOBgMqHatpWqfTgVvDxYS1gDZGhPVjDQAAccEvsRTiTxQy1AEAsWMymTQaDUVRcrlctVodjUZIHrseKIHDrNfrXC6HNE4AbhAYPJyOX2IpRK+FsKo8AQDAWcxms263WyqV0ul0sVjsdrsX2NlVKhXk5u0Dq1gPA7twAEDoRP+L2i+DBxGexwMsUAEAkYUFUiaTUVW10Wjc3d1dc2sfBg/72Gw2mUwm7FFEF/xWAgDAKfhl8CBCvWVVKpXu7u5C6RoAABzsFEjIsvMb5OAdJvp3cwEAIAr4lYYnhOj3+/V63b/2D4BFvQCAcJlOp51OBwIpLGzbzuVySFDcB+zCAQDgRHwUS+GG+MNKAgQA3CwkkIrFYjqd1jSt1WpBIIUFykgcAHbhAAAYPJyOj2JJCJHNZsO6sYfbZgCAAHALpMlkEuQiIhg8uJnNZpqmYSnXPgaDQbVaDXsUAAAgRBxSgn00eBDhlaYlisXiZDIJq3cAQCLZbDaTyaTdbhcKhbAEkgwMHhzYtq2q6gW+grcDMi8AAOB0fDR4EGHfvlqv14qiIAcGAHAl0+m02+1WKhVFUTKZTLFYbLfbpmlCpUSQcG/SRR+kXQAAwFn4m4YXekIkkg0AABcwn89Ho1Gj0dA0LZVKaZrWaDRGoxHiFREH3/lH0TTtaFYIAAAAxl+xJITI5XLhriJFMh4A4CicXFcsFjOZjKIolUql2+1iWhkjKGaCcN8BUFsJAECEHs+IEb6LpdAzIjabjaqqsP0BADjYmVw3mUzilbsLgwdiMBhAKR0FRQgBAFHj1g0eRDSSIpbLpaqq8ZoAAQA8xzTNfr+fsOQ6GDyIaPzQRJ/1ep3L5fBpAQCAs/DX4EFEJsw3nU4LhQJ+JAC4HdbrtWma7XabYkepVKpQKNTrdSTXJYxutwuldAqoPQUAABfgexqeiIxL6WQyKRaL0EsAJJXpdDoYDFqtVqFQyGQy2Wy2UCi02+24x47APmzbrtfrjUYj7IHEg9CXEAMAQBwJQiy12+12ux1AR0e5u7srFArIxwMgAWw2G9M0O51OtVpVVZXS6qrVaqfTMU0Tf+aJZ7PZFIvFfr8f9kDigWmahUIh7FEAAKJCRDK/YkEQYilS9juUj4e7awDEjul0OhqNqBpsNpvNZDKFQqHVag0GgyjErsPiNg0elsulpmkRXxMcKSqVymg0CnsUAADgBAYPvyNS0f/ZbFYoFLBoAYDIQlGjfr9POXW5XI4CR5VKharB3qA82McNGjxMp1NVVZFaeTqbzSabzd7a5wQAADzBd4MHotFodLvdi/vynOVyWSgUOp1O2AMBAIj5fE41jqrVaqFQSKfTFDWq1+uUUxedWy0gdEajEbKpz2U0Gp3+ew0AAEAmiDQ8Eclsadu2W62Wpmm4RQ1AkJimORgMqPwrrTVSFIVqHA0GA9M0cf8b7KPT6VQqFXxCzgU5eAAAcDEBiSXbtrPZbATvBU6nU0VRwi2bC0BSMU2TQkaNRoMWGpF/d7VapfKvt7zWCJyFbdvVahXO1xcQ2d9fAECIwODhdAISS0KIarUaTU2y2Wyq1aqmaVjFBMBlzOdz0zS73S7FiyiVjnQRhYy63S4WGvnELRg8kPFdNH9Bok8EMzsAAICBwcP/EfGc6el0SsvHEz/tAOBiyHfh7u6u3W7X63W2XlAUpVAoNBoNihchlS5IEm/wYNt2qVSaTCZhDySu1Ot1GKwDAMDFBGTwIGKSCTAajXK5XL1eh88SuGXW6zVn0JFVt6ZpqVSKfBdKpVK73e73+7BeAH4DpXQ9kXKjBQCA2BFcGp6IcCaejG3b/X6fVpzf3d2FPRwA/GK5XMqKiNLnaFlRNpvlDDqy6kaSKgiFUqmE7+FrwLIEAAC4kkDFUrwypyeTSalUyuVynU4n4gExAPZBiogS5yhGVCgUMplMKpXK5XKyIqL0OaShgugQi/trEefu7q5UKoU9CgBA5MCdlNMJVCwJIbLZbLxmY8vlstVqZbPZarUK5y4QQUzTlOUQlSpiiwVSRJQ4RzEi0zQh/pNEUldaYqWNJ0StyCEAADiAwYOTVqsVx1Kwtm0PBgNVVTVN6/f7yP8GgbFPC1F0iBznZDlEpYpgsXA7JNLgYTAYVKvVsEeRBGD0CgAAVxKcwQMxn88VRbm409CZTqf1ej2XyymK0mg0sOwYXAwlyBHteyqVyolaCNEhkFSWy6WqqviEX49t25lMJnlaGgAAgiToNDwhhKqqCchnm8/n3W63WCymUqlisdjtdmGgB8S9uTbR6XRI4ZDLNpG6hxLkCBZLo9EIWgjcONFPyYgLs9lMVdWwRwEAAPEmBLHU6XQSVoV9Mpk0Gg1FUch2fDQaQTglALLPZvr9fluCvOMIstUmyFybaLVatDO5bBNhnxYAkSZ5PxAh0u/36/V62KMAAEQRGDycTghiab1e53K5RCYGLJfLfr9fqVQURUmn0zRdhnYKl8s0D9tnM/V6XT6QvOMILAkAIZIkg4fpdFooFBL56xAKMV0kDAC4KaKfTRC0wQNRqVRGo9HFXccC27YpEUvWTpVKhZedJGZ+4zfmLqB5ACCSZPCQjCTt6IAqVQAAcD1BGzwQ0+lU07SLu44jpJ1GoxEbmlH1T1VV5Rk8zdrjGImS1+rItHfBNgYyqqqmduHeE5oHgOSBikCeA/EJAADXE0IaHoEvcWI2m8lxElICiqKQTiApxTQajZ3aw8FO0SIzmUyONtJqtXaqFJZ5DuS1OjI7G2cbAxl8HgC4ZfCj4DmZTAZWMQAAcCWhiSUsPD0FklJMt9s9RSztEzlMsVg82kin09mntZBACADwFoSVPGe9Xmez2bBHAQCIKDB4OJ3QxJJt27lcDtNuAAC4hmQYPCCs5Dk3mO4OAIgjBRg8HKDRaHS73WtaAACAGycBBg8IK/nBaDS6eF0xAAAAJhyDBwIRQAAAALfgjxo8g8GgWq2GPQoAAIg9oaXhETA2BQCAW8a27UwmE/fgWATpdruNRiPsUQAAQOwJWSzNZjNVVcMdAwAAgLBAtphPkFVP2KMAAEQUpHedTshiSSC4BAAAVxB3gwfk4PkExBIAIBbA4OE4CC4BAMDFxNrgATl4/lGtVgeDQdijAACA2BOmwQNTr9f7/b4nTQEAAIgL8MHzD4glAADwhPDT8IQQ6/U6l8vh5iIAANwUSBXzD4glAADwhEiIJYGaSwAAcHtgwZJ/QCwBAA4Ag4fTiYpYQnAJAAAuINYGD5qmebL2FbiBWAIAxAIYPJwBgksAAHAusTZ4yGQym80m7FEkE4glAADwhEgYPHCDCC4BAMCNsNlsMplM2KNILLj/CAAAnhCVNDwCX+4AAHAjTKdTTdPCHkVigXkGAAB4QrTEEoJLIBZst9vVanV0N/c+i8XCvfGUprjfU3o53KacGTwcDk/s2isWiwU9sCzr8J7j8fhwC+Lz57IPR0fb7XbnZTyXxWJxtJ2db7d8lHwuNwjEkq9ALAEADgCDh9OJllgSQnS73UajEfYoADhEr9er1Wr81DFpHg6HzWZTCCHvQxiGQS+Nx2PDMAzDKJfLuq5blrVYLAyJcrksP+bDy+Vys9nUdd0wjHw+T1vcmmc4HBqGsXPw+Xx+PB6TzMjn89dchwswDINGq+s6CYler+fWPIZh6Lq+U43Q5aLH+XxePnbf/o6W+d1pNpvNZjOfz18gnwzDcA/bsiz5Tee+5DeI3lN6XKvV9r1NpxNfg4dY/1QbhtHr9YLvd99NBDeeiKXVaiV/YgEAwHNg8HBJs7lcLqa//SDZsHrRdb3ZbNJjmm3LAQSWAYZhOAILdIhpmoZhuEMr2+222WyWy2XTNOXpO0sa6m44HJJgyOfzlmU1m01qarFYWPeMx+NarUaPe70eT9ZN06TZPEmRUMQSjYpOkxSL41tyu93SCZLSkLePx+NyuTwej4fD4WKxIBm53W4pREMvUZt8FEtNglqW3xfHDochecOqld4RWSCR9OJ9aLdms0kjHA6H5XLZsiyafbIgvOZ3Ir4GD/EVS/Qp6vV6jo+or9D3w+l/s/1+v16vX9PjarWiz7Zpmmf9mQAAQJKIkMEDg+ASiDKsN8rlsjvJynEXVp5h8OyZ9nGLpXw+T4GmWq0mH8jTI5I9NEujoAqFMmgivlgsaAvJJ3qJH/N4er2eZVmO2FQA+WA08WKNIQeIHPeta7UaXWEOQxE0bMuyKHZHZ0fj53dE3Eel5MARnTWNgVqgLuhAelNOlCscp+J3kEYln6YQYjgccsvyWZC+pUMoPsl6+6KLGntSqchlNxxFfseDf+NO7/Hu7q5UKl3TV7hnCgAAESGKP1QILoHIslgsOBrgvtXqyMISQtRqNV3XeSIuywCazdN8ndRCPp+nHXq9npySJ4slkgc0EacH7nwwHoOu644VPqSRms0mzekdEyBKuen1epzqQ+l8q9WKoiW1Wo0eUCIfdU0P6Jrw/uI+DrZYLHq9HicskcagG9Ucncvn8ywnarUaCUK6vHRBqEGeurHa4TbpArJYMgyDT1x+m+jtoMAOj2rnyqJ9UFyIFCmNkwJ9NCqSPXQRZG2s6zqdIF9wXdd5YA65dVPEUSzJN0RkzR8Mp4sWT5aE8d+1O6kYAABuhIj+UI1GI5/CVgBcA816eYpPeoBScRaLRbPZpMVIpEloH8oc4zVCFDviuIQjgkRzaw6Y0HY51UeXKJfLssxgWAs5puAsTniqxxMvln/kXUFdU4IcJcXx/jRyOZdvtVrRCN37U4SH8+VoHxI/FAQj4USnQFlGrNPoQLqqckCG9EmtVjNNk/rlM6ILy7E7apa7JtnGWXAsY0j7nfgBOCCWeAf+MHCiJrcvnwhf51sWS7lcbrlchj2K84iLWFqv19ls9voet9stcvAASB7xTYQOnoiKJSFEsVicTCZhjwKA/4Nn7fTUMYHYucpIntnQehWamu8TS7ScxiGWZOQEM3J6cM/VKOHNkcNGw2OxRIenUimObtFgSKLQzjyzp+VPwjVRoy56vR7HqRz7y1E1CsrxgFlP0lmI+wQ2imsx+XyetaIsllgdyQvQ5ciSuNeKfBlZELLUGY/HHGhyX+qd0P5HxRJfBHogq1NesiWE4EauEUvxNXgQQmia5sfaV1+RwyyO9YoBcFY6nCeBOz9iSnTPSAixWCzy+TzFeGu1mvzNSf1SyjEFiuV4LAAgMcDg4XJgIw4iBUkIWZzs+9nmRU3i87EdOarD650cYok0DE2v5Vk+KzHZW4L22Xljm/LN3Nvlm+JiVxoeDZ7GzzN7S3Kfc+xP4o1fdezv0HIkbFgl0p4OsSEjW1OIz6fh0VnQFGqfWNqZLcmRJVr6pev6eDy2LIt2Prp8iM9RFkvybJLap/VIO8US78YjvFIsxdfgQcSzth597OUHQXKWWLo+cMefbW+tLOgejbi/hhR65Y1CCErTFULQHQ3+tgzSUQMAAIgoGjww3jo9ONY5BAbNnIIsqDIej2nCHXB+yC2wUyw5bi2zEHLPpWgeL6e17DRy4DwxfirLDzmytFMs0YogimI5Xjoslvivg7rmxo37ZUjuiRoZFfBRjv3dga9TxBIpjfF47LBmdoslR5tyGh6/ulMsUcv0WP5OoFiWOAFjl0WHkDIVORtQHo9DLPF5nR7aShjXmxCEAt/UCPJuKLvhGfdLBI9yZeCO7ibQl8nNZooCAEB00/AID5M0aH1F8Bao1r3FczDdLRYLmvyFctcz8VBgh4UK58LxnIkWqFAIxWEqLe61CvvXCZdY4sw0QzKnlk3taAC9e6jIEk+1OYWPu6O5jrzlgFjiU+PhyVbmHM6SJ2qcg+fYX0iRNL44ciiMr+TOIBifqWMjrxOjszDureQ4xCSkfEjyyXA0Lq+eorAVpUdSC45Y1gH2iSVOw+MRlqVCWPwW025kdM5mfTfIZrPJZrNxjIwFnH13GaVS6e7uLuxRAABAvIm6WJrNZpqmXf9TKmuk4C1Qg1wELC+mh9mr5xyIAJCc4Jn6drt1hzFp+i5/GOQGWRtw4SA5q43r2O6EbBJ2TvSpJBE/lu+FB3zjgG6N02M+cfJd2Lm/e1WY+0Y+LT3a16P7VXqPHMFeviynV6d1XEkHi8WC+mX3Cz6KHvBU+5bDSkS1Wh0MBmGPIpnEMcsRABAMMHg4naiLJSFEq9Xq6zddZAAAIABJREFUdDpXNiLfUA/evyj4HoUrhgAASCSxNngQQpimWSgUwh5FMrm+Li0AAPgNDB48wLZtVVXn8/k1jdyaWKIF6N62uVqt5NvhvJ3v0Mu36nkH+SgAgOfE2uCBUFV1NpuFPYoEMpvNVFUNexQAABBvIm3wwMznc1VVr5kQ3E4anpCU0uk5Raeg6zpdOsuyUqkU+4/JZq9sR5ZKpdhsGkunPISs24QQ+1LX5HDizry18XjM5uDu2KN7/3M/RZyBRoN0WJusVivacrjZA7l5w+GQj90ZO5XXXB1g390EytNbrVY7cxrlsxNCmKbpuBdw9A3iXg4Mcjgc3tQtBgSXfMK27XQ6HfYoAAAg3sQgDY+43hmPpuzBGzyIYMWSvFTGW+s/2Z2Mp3ryRqqQI4RYLBY8i+WNCYCs27yVoCf2y4+N+wqq7D1dq9V4Wk+1jITkSS1LAq6/xAWL3DpW13UuacL2FWfVbKW1VWRnx60x5E4h7l2A2SfDfcr7NDb7CAsh2NpBPkdyYJcXdLn/5MmCb59DA109rgMjnwU59fHOsn0FbznwBsm97Dw7xylwyePEAysCn1AU5cq8DAAAuHFiI5bE1UmN4/GYam4GfMuWpps0dwygO5oFktlr8D7pyYa0R5BBwsViQT2yZTZ5uHF922azaZqm7MVH7zu99W7zAJp8k4Qgi3kh+UmQmiJNyLP5s6Q+ucmRfZ/sNcIjJCkiCxg5RZbCMuwnTo+pOi1fDVZZVBKKdmA1IlvPObpmqF4WnawsfbfbLV3q8XhsmibLRTmaRH/L7F/nsOs4+gbRuyOfBfkByopI/stla8HEs1wuVVXdbDZhDyRpVCqV0WgU9igAAJEDBg+nEyextF6vFUXBrykIkX2G0X53R2JmOBxyLVQ58NJsNuUCrOPxmCNLpENowt3r9chom2bqXN+WayWReKBICGuV08USxZQo8ZI0AAkGrgzT6/XItY8rRJG6YLHkKL7EO5CWcNRZoiiWvAOFrag7LnPkNu6nEyTTc9n2fbFYkEayLIseyIcIydqO9Ri/QdTI0Tdo58WUNS1Zz5MspPfr6GWPu8EDE9OaSxGn0+m0Wq2wRwEAAHuBwYPH4NcUhIsslqiklRwzpLI5BwJ6jsQq+SlFPuUiQhyTlGfM7BJO5YkohJjP5ym6wjUrCdIk9JjkFkUtqEATBWGofKq4L8zF479ALAmpUhOHUIS0SpDaJxWxTyzRA1lscOhJFkty8h7twPExXjhHOzgS3kiNCKkgkiPwSwOjHMLyPRSJ4rxEOcGPI3W8DGzfG8RXlRzkOVlxp3v4zvJTO0mAwQMDq2vPmUwmxWIx7FEAAECMiYfBgwyKcoAQkcUSlTkWQpTL5dVqRVlhYr9pu2EYFJGg6TgXk+UDWZbIOkEWKqvVikVCr9fjLDU5fJTP57fbLU3N5Vk4l4Gi3nu9HlU9Mk1THq2cAManeaJYIknGtaT4vGS5wnmMO9PwjoolLkrbbDa57DJrFeO+Ri0rGYoscVVfQyqEJY+KS+uappnP5+lt4ivM6+5YPS4WCy6De/obxBeTj6IHDrFEwT3KkyQh57aRSDD4hveW9XqdzWbDHgUAAMSYOKXhEbZtFwqF4INaAAhpcuyezbvX+jtwhDhkEUKxF95BFhJyIIumziw25Iw1IWXBsXhwzMJJxnCWmrh3WeBhU1iJtnD8xJHGdsDDjQdAkSUSYxTv4gFQszRmWdLwiVuWtVgsaAfSJOwJ4UjDE/cyVZZbpP1YE4r97pduiwUyb+C3Vc4DpPY5j9EwDPeapaNvkDhBLPEF5NggpU3e1PrDarWK+JKHZLPZZCRqAgBAKMRPLAkhlsulpmn49gfBY0iLiGSxRDqEjQF3mnnIpmrkyniWWHJsYbFBiWG8w77IEkHqhUYr7qfmcuM8wp2RJdkpfidsukCHU6BGtpKTrQ64Uzn8RQ+sXW54brHELcg+jfQSx3Pca5YcA9i3faecozFQIFGc/waxWCI5xIKK2ifHcPmC78zQuwUajUalUsEKVU9AsA4A4AYGD6cTS7EkhJhOp4VCITGZ+iAWWPdeZzT7pwgMmaqJ+xQsR9qVDK1oorQu0zRpyZO4d5AjizbLsvgBBVW4O4Ln4uxw7bAi4GpXYtdUm9qkzDQKv8hTc9M0yZhBdth3WCAcXkhDLg40Broyuq6zHQIbM8huexwHc1zqfWJJzmAkZItC2e6PI2PGvZ23zFGxxA/kVVWUCigvl9onlna+QfzOOs5LPp1zxVJiDB4cjEYjTdNge309g8GgWq2GPQoAANgNDB58pN/v1+v1EAcAbg3rHjlAJBtVr1YrOXjihipQ8foTqnzKRVqpZX6wWCwc3dVqNY6T7IssyRrAsiw5fYt655hSuVymLsi8jrQNxUzIloCtGvY5ZTug0yfnN1IIbKVAyoFkGIk0R/uONLOjYonGQ6Irn8/vXNJjGAY58u0crXs7yV3ZjsIdWWJtzF3IH4Cjb5BjARhdk3w+L1ewZVcPEq5HxVKSDB4cUDnyVquFENM14P4xAABcQ/wMHmRgnQQii/F53GVJL4MjJCzJ2AXOjeMlfkyLgjwZjwzLgO1262j/XH8Cklun7LlYLA40zs4NbvZdATmqw13sq0TsfunwG7QzP9NxpvLADry5N4Jt251OR1EUFAu6hlwut1wuwx4FAADEkrim4RG2bReLxYgH7wAAAFwD3ZvTNG0ymYQ9lliCZUsAAHAx8RZLQojNZoO8dgAASDzT6bRYLKqqinn/uWDZEgDAARJ0Tyf2YkkIsVwuC4UCcgxAkHCRJQeybwHZWMuRz+FwKNvBuYOi7Pog7v0kPB43kIzyhBBkdLFzt31vcdRIqsHDPmazWbVazWaz3W73pk78GjArAgBEFhg8BMR8Ptc0TV4EnNQVzyAKkHPAzkUv5GRArgDkXkDr+2nljGyQsNN4gKwLaI4um7CJ+6qy++wKLoa7CwzysuOlREFaY5N5BpV+4gqzXDzXwWGT9OiQYIOHA6zX60ajkc1mS6XSaDS6wStwLli2BAAAlxFvgweZ2WymaRr9ZM5ms0KhEPaIQDJh+2y5nKuQSrKWy2V6TL7P8pp+uQgpWVqT6Rm9yh5x+XxeLgtLNty8zzWDdws8ufEAoIvGNn1kQBdY70IIt1iiB6QYScjJnuP8FgQ5SHA6d3d3lUolm81Wq1Wv7k2u1+tisVg4xje/+c0XXnjh61//+tE9PeRb3/rWZQdms9lvfOMb5x71Z3/2Zy+88MI3v/nNyzq9jD//8z//q7/6qwM7VKtVyGMAQGAkIQ2PmUwmpVLp6dOnmUwmlUphIRPwAyqmRC7bpGf4JblqKvlN0zx7PB6TSTS5QpNOoPm3XEiHfaWpEhHbScshjitn7e4Qiq9KyR2z2mnY7d8AdsJu6aRL5Zfk0B+/tNPHHESKzWYzGAwKhUI2m200Gld++ZumqaqqeYzvfOc73W736G7ekkqlLjvwv/7rv95+++0LDhyNRl/72tcu6/QyvvrVrx6+sNlsFlEyAEBgJEosCSF+/OMf/8Ef/EEqlUqlUu12O+zhgETBGklIk36qk0OCh+qxUjUhno7LpXXcaXg7xRIdy1GgfWJpOBxyQR4ejBwGoae1Wo2iWxwt4ZYNw5BlANf2obVVNAxqYecFoRAND3WxWJBEpAFwFiKXV3IMgLa4B0ClcofDIb1k3hd1pZ0pHEfXhAJB+1Ii9yFfc4d4g1iKO+v1utvtKoqiKEq3271MNZmmWTghN6EQRp59KhX0r3bw651eeOGFwxcWKYUAXA+WMp5OosQSvfGpe/AhAB5ifr7+rDzJlovGkjygYqkcWZLFEid6cRoeaRIhVSOlaToXkN0nlngGT2qE/qenVH2ImmXVIXYFdniLKS3dof1p/dXOo4QQFFgTkikFZ/TRObJBxQFx4tjiEJD8Ej/gUJ5lWTwA+VKcghz3cxxIbxDV6qXyslSTKspi6dYMHk5kPp83Gg1STY1G46wVthBLMhBLAABfCeW79CwSYvAgXEqJiNQIQZJwT/opP4S2j8fj8XhMYsM0TV62RBKCsvJYIzFyGp4QYrFYHBBLcrhj37oakgQniiXWZjwSt1aRcZv1OUIxrHlOF0u6ro/H42azSVdsp1iSi8bm83kORtFGuvLu0fIhO9cscWxqX2SJz/Rw+6FwmwYPpzOfz7vdrqZptK5pNBrJVkA7gViSgVgCANw4yTF4oJz1Uqkki6V6vR72uEAycU/6eX4vx444gsEpZ+QYzvvIM2+HWJK3u/uV4yocy+KJPrcv7qWLHCNarVa8mogbJAnBPcrWCzvFEhtdCCFoeRU/pSDVZWKp1+vxNZE1kuMSOQbAh+Tz+QNRIBJIpGlJtbJq4maZnW54h9sHUWa9Xg8Gg0qlkslkNE3rdDr7kvQglmQglgAAN06i0vAI27ZHo1GlUkmn09lsFvdcgR/sM1rg7b1ej7Ls2KeBHziCNjzR5zVCPB2nbDp6ynKLazeRImKRw0uGms3marWi0BbpgXw+T707/Pe4QTYr5zZppZD8wH2ylDQoqzIKClFWHgV8KBuQHdXl8ctb+GpQiIz9BmnJExsD0iXiiZRjAHxNDrxxFNPjfcbjMYWz3HvuFEtH2wexYDqdtlotRVFyuVyj0ZjNZvKrEEsyEEsAgBsnOWJpPp+n0+nUMb7whS8c3cdzvvjFLwbf6Ze+9KUgu/vyl798eIdcLnc0+yVG7AsvsDxgQUKrkng6TiLK0RRpJw4N8bHkGHHYvcDhJueIkPB6qgNbDrR2lNVq5TjkcPsHIF1Hj2W5eNYAWJHu66JcLjvapHQ+9847Nx5uH8SO5XLZ7XZVVSXVRLGmn/zkJ9/61rfa7fZkMjlwLMSST0AsARAAMHg4neSIpSjfC/zKV74S8Dc7ft78Zp+oWK1W7oQuznm7oPxrwBVjw4Xt9Xz6I933ru28yMF7ml8GDB484d/+7d/+4i/+4vd///flWzyHzfQglnzi1n5NALhxYPAQHBBLMvh5A+BGgMGDJ6zX62w26wiGHz4EYskn8GsCAIgUyTF4gFiSwc8biAV+xM1OjOPFJXAEAsM0TVksHfUHgljyCfyaAAAiBdLwggBiSeDnDdxDfoD0WNd1frzdbi0JcvEmeKUQ2T/8//buJ0RuNL//eBEIXkLwzCYd4mwPk8GMJtPJsjRh43hIOeMkhhgGgss7h53L2lklZgIOMbjYNA7BhlD4sNC+yDFJDD7oMPhkF3toloTWqcmhBQZfjBJ2Hdhd9UJY+iDIQEKi3+Hz6y/PSCp1df1Rl6rfr8NQf6SnJHWP6/n08+j72HpWqvdQqNBgdcCt1ESBigG6ZQArj9PzvBM1BxJ5nt+9e9fC0rNnz+o3JizNCd8mABYKYakJhKX8xH+9qRJ3+XamNqpc0ynPc1W2qK+srZSSZZlb6M+onp7Kr7vByWotqPCdrTFlq/e6F7bb7WpVWVtYNggCNxFZbT2r8F55qOXXxznBo3JLtGMRXLx4sdPp/NzP/dyhkxsJS3PCtwnQAAo8jI+w1ATCUs7XW6lPby/WPF1YNf37mrcUclS+3KqE67GGgLoH7BVxw5Lv+2rB8zxbjdcK3KlEhIUlW4XWvfK2lK24oUjt6/VOp+PWLh/nBMdRWMk3n7rCHgUeZmtvb++XfumX3nzzzUO3JCzNCd8mwIlCgYfmEJZcfL3NXJIkURQVit2pU67q1ZpFpv9WFry2eWW6WybLsiAItCiqNlCWsN2ttZq7a8rF92x7HVv5mEeNbukE7UPr29fokC2X5P7oC1kiSRK7GjYiZCNIdmWUEhVjfN9XgXUdjzuypHctwOhBea2q/GCNJnGXss0PVrYtD1vlXwy09rodduUJFn7chSump/YT1LJOusi2e2GVJ/c3JIoi98dRiQIPM/fgwYN333330M0IS3Oy9N8mANqFAg9NICzl7f96U69aC7baoqtBEARBoNESTSrTgrOVl0KjFlEUaS2mLMs0DDIqLClOaGmgyga1QKotcWsz/bQybJIkNoBjzerjdADl1rSmk04nCAItfORur9Vp1aBWd80Plnm1dtwsoSNRJsy/GJY01045wQ1LGmtSWNLpuGv4qn2tWqsBKM/z3DWsNO6kj3Bvf3LPdIZhST8gO8HCT8QuoH7u7o/YDUvWYOEnqAurQuqznfuHeov8bUJYytv/bQKgXZiG1wTCUr4UX2/WqbU1ZAuvq1M7alaVdcTtQbkf73bE3c0qp35ZB1qNWI/c3lI8cxvXBsPhsDzfz/rx+lwlIjsv3/fdwxh1BdzHSZJYC5aRFDj7/b4OoNvtpmnqhqUwDHUZR90Zpfxgdxy5d4LpvMphqTB0oxaUysrT8JQSh8OhYpiyUGVYUta1Nt1bsHQMSZIMh8MwDBVZy9eq8Er5J1h5hTFvi/xtQljKl+LbBECLEJaaQFjKl+LrrdBztftbCsUDCl1zM01YqhxYKLzoTjazygdu+27MKP+wymGpMLTiHu04YcmikRtgLDXpFV06NyzpsY5zVFgKgsCCkFKce9Eshrl3JdlImubFacxHUSfLMneanI352OlnWeb+TMuzB+3iF34iGoR002BeG5bKP0HC0rFY5G8TwlK+FN8mwLGjwMP4CEtNICzlS/H1Vh5XUZ/eblnRnKtRM6Yqw5L66zYYpZZ1o9FgMFAfXZO7yg1qLpw2SJJEUwRzp8BaISz5vq8G0zQtJ7pyWLLZdzoAGymyIRR9SpZl7uCMO6msMNJSDkv2rn553HjmhiXlIjtrmwAZBEGhxqCbu8qHpMf26RbY3LuezKgqee5Aog3c6bwKPxELP4p/ektbusOPbvoq/ATHCUsUeJi5Rf42ISzlS/FtAsBQ4KE5i/z1RljK2//1pr67JnrZrURxHGuOlrKKyrIVKrmJur++7xc2sBf1VM1aV16Py/XTRPPi3CleCm/aXru77+Z5rnIIldHLPk63/dh9We4B2Daa0aeY4fu+ljZSZW1lSIt52kBPNdakqgwWVHQTl0KF1anTBrrOusjuGI4VrNPHxXFsv3vlQSp3PqFaVkZVANPgTxRF5Ys8qnR44QR1GO6ESbvCatyOU8nTaqMXGiz/BO2Xwf2tKKPAw8wt8rcJYSlv/7cJgHahwEMTpg9LL168ONL2fL01QLep5Hnupp0ZspGlpaFImee51lnSi4oTeuze76QaFRZ4rF6F6joYPbXZj7rpKP/iUIy1b9PtBo5RF5maCifWIn+bEJbyZfw2AbDImIbXhCnD0v7+/pkzZ470x2O+3poRhmEQBJWlvQdf5N7XNI4sywqT6KZscFT7ZsEHwYHGLPK3CWEpX9JvEwALi7DUhOlHlq5fv/7kyZPxt+frDQAms8jfJoSlnG8TYBYo8DA+wlITpg9Lz549u3Llyvjb8/U2J+76qpUb1K8faoXX6q9VkiQ1C9GOY8oWRu1uleLsaeEVU3OC1rJbhu7Qz6psoWb3yf43dz+08vAKr9RMvxz1m6DqHYceyfjHT4GHmVvkbxPCUr4s3yYAhAIPzVnkr7eZ3LO0vr4+/vZ8vc2JzX+zG5aCILATT9PU8zx3vdFCpQd7xdqJoqh8436hHPkE3JoBldxefvmmnVEHoIoLdoJu3YUCt4S6+4vhLtak8g+FHe162t1HNY3XFGofVcuuXmF+Y/m2Jf18Le0UavGVt8y/eINWfvCjqVkz13Yf83eAAg8zt8jfJoSlfFm+TQC0BQUemjB9WDrq1xVfb3Oistrq8atydL/ftxNXZTyVXMurllFyC3NrqR+rFJcfVOhW9Tb3bqJybb16Kp4WhmEhSNiarf1+X3UR9NRyxaEHoGp1KnBnJ6tX8oP6Ddamu3SsYoNO2ZbEtaRR+M2x9aAKOUTZzG3cjqccutzCeke6gCqOZyeuy2Ul3VWLz6rGq+aeFfezK2xviaU+K6JooiiK47gwjGY18aYcYMRkFvnbhLCUL8u3CYC2YBpeEwhLefu/3tI0dXvJ7vqhA2e9UXfYwcKSusJKVlae28YNbBGhQkUHc6QFSbMs63a7+lm4n5I7QxxBELilKSpXWS0fQBiGYRhq6p1WDVKmcre0tGB5xh386Xa7YRhqtSUFD9tYRzIcDm2aYjksGbv47k+hwF1SdsxLV2Cr1toPVCvMpmmq8hgWSt293ERnyVMtqGq84paVFNcau24LqqUeRVGWZTUjV5ifRf42ISzl7f82AdAuhKUmTB+WPvvssyON4/H1Nifqwas7ayMnmjGlFzVio66w7/saJLEurzuypOGIwWBgyy7paZIkGm0YDofqiNeHJavHnR8kOqUvtamuuXW4NVhhK8NGUeQuMVR/AMqKtuCP1oT1PC+O4/KtOxbY8jzXEky5k20Kq0u5U+YsgFUGIXfARw9sHM820I/GRr3ciZH1lGEsGeqyWGTSYYubRSunAmqhXvvcgbMGrtoPgsB+6O5p6rcoP5gQqJWpBs7Cx2jAIn+bEJbyZfk2AY4XBR7GR1hqAtXw8mX5elPXPE1TxQnlDSUK/Vf9fmWD8jQ89a1t38ItKwoAtmSq9dfLk9zKsizTJDo1VWjWjRPupLXCNML6A8gPeva+73uep8SirrytcSSKKAqT+gi7xchGltSOMoAbltI0tY0tRdgRWvywQ1Jrtnt5cOxI43J23dwhxCRJLKto3WHFYJ2ahRm3Gnuv17ORJcXLJEn041a81ExOXeogCHSdlT/dS61Ttml+lSjwMHOL/G1CWMqX5dsEgFDgoTmL/PU2ZVg6anWHnK+3OUiSpNvtuhPALBios65o0el0NDqRZVkhLNltQnmea0cbmNIGllW0jdtxP+rRjioboNYsXbiPDz0AG9LRgJJ20fiJO7SiyWMasFKSqZyGl+e5bvrKD8KSkoOxm46U7gqjQ/MOS7avopHiqLKTJtrZ6FwhTeUHRSw0LqciFnpXeUm/QtpAT3VNCkcyGD0LsYACDzP34sWLzhh+4Rd+YZzNZuvnf/7nm//QX/zFX1yoj3vzzTf39/eP+9cEwElBgYcmTBmWzp8/f9RcSliahzRNrQtrt+lrsMi2sX5/Xup5p2lqr9gkKw01aAPLKlYlYuZhSWMXliisdMGYB2Cn73me2rHxE4WZKIr0Sn4QCN1Pd6fh6RXtVa5cp2haUw6uJixZ4Qob2LF3lcEOvW760WjgqzwuZx9qY2gDp4SDTU3UxoVT0HnlB/cv5aNvuxo/LAEAgPlhGl4TpglLT548uX79+lH3IizNyThhye4RKieWccKSO0yhLDGrsGQjOWmaqji4BsGsQ3/oASgVuKNhbvbQSVkS0+03bvWCcliS8glqNEaJojL1aaxJWcUNM4pnOqPBQYU6G9oaDoeHhiWlIGuhcAA6o8LIkt5KkkRzGu00h8Ohe+9WfjAP00bM7PjL9foISwAALALCUhMmDktbW1tXrlyZYI4NYWke1HW2aXhWmboQlqyPq3ll9pbm6VlYsnpohbDkfqIVTDvqoZbDUmGynDsYonMZ5wB02Hbkyh66ccstZqD7eXTjlptnrCa4GlQ5isLoljtvTQpXWGwXt7i23fOjqXF2E5e7KFb94kU6pPwgWOqKuYlICUf/VeDUr0RhdSaLWGma2v1Lhc+KoqgmvBGWAADzQ4GH8RGWmjBZWJo4KeWEpfnQUIYeW983SRJ38MTtuxfe0l6KAe7SrtamSuoVPjQIggkqoQ2Hw5ofRxzHlQv4jHkA2iZNUxtjcTNhFEWFs7bPsrTmfrrtq2xZedjl1Wkrl06yzawRu9p6OmZZPBUJdF8p1Luze5AGBzetuWFpMBgUdh+1XJKF5zKb2XgoCjwAANqLAg/NWbKw9OjRo4mTUk5YAk4MCjwAADA/S1XgYX19PTrM17/+9QcPHhy62Wy98cYbn3322Zgbf//73//DP/zDP/mTP/n+978/8Sd+9tlnq6urE+8+gV/7tV+rv7BnzpwhLAEAAKBFlmca3uvXry+O4b333nvrrbd+4zd+Y5yNZ+Xs2bO///u/P86WX//610+fPv2bv/mb03zcV7/61ebPcW1t7fd+7/dqNphmoKyNotpxtlG3o7jztbIsGzV9Cwuo/ifuKvxk3VmO4zcCAAAasDxhqe329/dv3bq1vr7+4sWL4z4WjDQcDgdf5NYe0NpKopJotsCr24gq4LkVEewtVagrP56JeUQv4txwOLTyFVEUqTi4e0Nar9dT1UFV8NNqS+5dXm71cM/zyEsAgHmjwMP4CEsL4dGjR++///6DBw+O+0BwiPp77rMsCw7Y6qVWIMHKaltROKN6D27KUhdc/eZCdYHJRFFUWVWvcEZHCj9uecBZGVUrfHGUfwdUFk9hSaszuYNFqmtn5fv089U5qkShrWBriy8pU415PBR4AAC010UKPKDG/v7+/fv3z5w58+mnn9LdaS83YKgMXXSw2E4cx0mSuP8KpGlqbykUWSE1q8RtqUlpRJ3p6Y+zcr2mcq3wI7U5ZYVrnan7yuIPVblXzEJvt9v1PM9dDzdJkizL9BO0+ukaaLKwZNlYZeW1gXYZf1CRAg8ngf6YUl/4fh60lHbDHwoAC2V5Cjy0yOeff/7s2bPr16+fOXNmY2ODmNQWtr6QhobUo9UMqyzLbOBIG2hJIus623CE5lkpJERR5K4Jmx8s06QS3so2VodaK6XaUkKiwaswDBW6FF3Kpaul1+tFUWTvahhE/fssy2yNV20QRZEKeY9qTQphScdg26dp6i7opKeDwUCJyFZotfihzOAOqugEtX3lFSiwi6CgopBpD2yDNE21gUUa+9Ca9gtXzP1QLQY1HA71i+FeMaUjGzIqhyU9cJemLS94hRNOYWmC9amnof/dZj4fGADahWl4Dfn888+jKHrw4MGVK1fefPPNK1euPHnyhL8Ht5Q6uO6tJmYwGHieZ0uvFjYIgsBdhNTzvMJAisKSRQgtaapt1FUHUu5qAAAgAElEQVRK01Q9mPygF67XNZFPq6+O6tnYckA2H6+8dq3bG9NMQr04asDHDUuWizSBUAfvvq5z13GWdy+/ohO07ctXoHwwhStjmUQPFP+sQfsse6DcW9MrLVwxXW07a10ld8aj0pF7YQsHZiNLumijVgcG8hGDww183OKP9wLA/BCW5uVf//Vfnzx5cvfu3YsXL545c+ZLX/rSxYsXb9269ezZMzJSq1lPujIsaYTHok6/37chCI1LFCbaxXGsv91qG7djrS51OdjYA/Xsc6dPMxwO3eoCBbaZ23GvCUv2uKbv7mYby4G6RBoIyvNcw1a6Ahp5sy1rwpIqJdiLQRCUr0BBodny9nbxfd/Xi25YcstyVN7fVfhoDSfa6+6VD8NQj22grN/vK1OFYeh5nka63LCkZhV3CUuo5P7vqdsadY+cXtG496ipekmSaHv7P07b6zdNw+baIE1T/dtlf/eZ82kBOAYUeBgfYSnPD4Z9XPfv3787nsuXL7sFsjsHzp8/f/369bt370ZRxES7ZWK9XgtLduONhix0d4ruVNGkrNzpWGs0qdA1t3igQSG3GIDbHS90/e3mFuv9KCyNmjXXZFjSREQ7eHW/lATyUqqpbNBNLDqAGYalwoBSOSyVY3D5iiVJYtMsrd6dvaKxvnKBRKuel39xGp6aVcf3SGGJAg8nhzvUY/+w6FfIhn/dsWuXOzybHwz/5gezW/UXhPzgLxqFjwOA+aHAw8J58eLF1tbW3bt3NzY2Ll68eP78+U6no2Ef18bGxphhaWtry01Zx31+mC/1+PXYwpK6GnpRAcZuTdG8L7cFtytT6IvYEJM+IgzDXq9XM7JkHXSFtyzL9FfhUaMi5bBk8cy6RzY/zT3BMafh2ckqKmgkTQem+ulqPMsy3Rllp5ymqd1TVJiGZ0NnSpj1Ycn6fzYNTwegv5rb6/oUDeBoCMidoKhPHDWVsXzF7LqNmh9YCEtuEiuHpfJFOBQFHk6Oyr9f6Pdq1P/1En+xWn1e+tNG5f9chCUAyE9IgYfXr1/bzULr6+uXL1++e/fu/fv3oyhqY97DcVFlZ7crrxIOusUoz3NVZVAX3DrBuu/fGlEfRX++LfRvNKNGRdVU2CA/qIJg6zvZHC27GUbdd3VxVBnCHdIx9nphA42K2GaqZK3xDR2GJZAyG0Wx1oIg6Pf7dr5qzfpeak0VFGwbXUM9tiIZ9omatueOt7hXoHxINpXIQpHv+0putoFbgEE5ajgcuoN7dvfRqLN2r5j+xu9eAY2qqXRE7LCwpDoQ+cGKWzpHGy3U9KfxS4fj5LD0Yv8+5Hne7Xb174aeqnhJYcfYuQ1Pv/yFSbOEJQAYZZmn4e3t7T169Oj8+fPvvPOObhba399v8gCsNFaTH5ofdOYY5pqtytGMwiQ66zG7dw6kaer+LKyf7d6qlB/0YPKDknFuZz2O48pgoD66Elq5cx9/0VE73xpvcY+80GD9klMNqDlB3/enL7Ks1WNd5Q1sTqZL93tYWY5R8jzPsqz8/6lqG0558FgyCt7ufZKK9FYURL+K5REkozIw8cFwq42C6m80utMyP6hImTsjTsf+fzoAHK/lDEt7e3u3bt165513Pv3002MfO2q+flGapurGNfm5OBb6WVe+NX1YKuzVorBUmW2O6tCwBDTGHaW0F/W3EnsaRVFNVX1t7/4RQRnJTfXlB4vwfzqAeaDAw/iWLSxZTHrw4MGCzOMvhKVCr+7QJf/UY6vcXk2JvaK/BTKHBzghKPCAAi0d5mKiAYCFRYGHRj158uT9999fnJgkhfJiw+FQ93XkzgKao0afNJvL5kVoXl/srDajG9Nt0hdh6SSw2YA1BdMKf3LGEqPAAwAA87MkBR729/evXLly/fr1hu9KGocFIcs8+UHtLLcycnlHlRPI8zzLMqtVrbdUZyzmltxmxXFs6+fMylFjrZWYy50i5u4NS7rz22pYu+UTAAAAcCTLMA0viqL333//2bNnx30g1Sj2ujT0E5nm3hVbntUcte6ZBidtBScVc3Nv+x4crN8qhCUAAICJtT4sPXny5PLly4s8Zd8t2GpjAopJtqhLGIblHrM79GSrxGgMwebvEZYadqQFcMqsRPVk0jT1PK+w1Gmhqp4tMSlWkxoAAEAo8DC+doelBw8eXL9+fWHn61vpcKsjrJl4Njqhu4/chWgKtCypForRK+r7KjtpTVKtDKMcZR9H6eE5ccOSrcnjLiukV2xjLftjywR1u11bIDXPcw0KWeNug1q9R/Po3Hl3Gl0sLODj3p6kXfoHtObPXK8JjhcFHgAA7UWBhzna2Ni4devWMR4ATiA3LNnAoJKqjRxqvqXdcqZ1kMq7izsSWGhQE+ryPFe6jqIoDEOFJUvdCmPudE1Glk4aCjwAADA/bS3wsLGxcffu3eP69Hmg2GsrWNpxbzkb9SPTyJI7fFQTliob1MZ6oBylsBRFkcWh4XDoTsPT0yAIer2eJunxiwQAADCZVk7De/To0aeffnrcR4GTyAJMkiRutlENOlsR0i0QX0hB2t3KPFhYqmzQDUt6S2FJMUxhya2yqEW3er1elmUKSyqlSF4CAACYQPvC0tbW1uXLl4/7KHASaVabVePo9/tRFKVpqtl3ustIQz1KO8owQRB0u13lKFsUS+nFqhqq/UKDtnyWPcidsGST69zyHioobxXntW+WZZ7nueXFAQDASUaBh/G1LCy9evVqfX2dCfo4FjbzzUoX6j4i2yBNU3cYJ4qiIAjSNHWn3rnLxVqD9q7boL3lbmNhyVZSsruSLGX1HJ7nRVHEyNISo8ADAKC9KPAwS59//vn6+vqrV6+a/FBgoWiEarYL46LVKPAAAMD8tKnAw6effvro0aMmPxEAAADAidWaaXjPnj27cuXKcR8FAAAAgJOiHWFpb2/v/fff39/fP+4DAQAAANqNAg/ja0dYunXr1oMHD477KABg4VDgAQDQXhR4mIG9vb133nmHO5gBoIwCDwAAzE/TBR5ev379+vXrIz24fv36d7/73aPuxQMe8IAH7X0AAAAWwdyn4b1+/fq//uu//vqv//pv/uZvfvSjH21ubm5ubo7/YGNj49133z3qXjzgAQ940N4HP/3pT7/zne/8wz/8w//93//N+59oAABQY75haTgcfvvb306mcO3atTt37kzTAgC0zu7u7s7Ozr//+79/4xvfYHE5AMBsvabAw9jmFZZevXr1gx/8YMruwsuXL1dWVnZ3d2fS+QCA1nn+/PmPf/zjmiEmCjwAANrr5BZ4uHfv3sOHD6fsJdy7d++TTz6ZRX8DAFrsr/7qr0b9e0uBBwAA5mcuBR7+53/+Z/phpSRJ1tfXnz59On07ANBqYRgyfAQAQPPmMg3vL/7iL16+fDll52B7e3t1dXUm/QwAaLs0TefxzzUAAKgxl7D0d3/3d9P3DO7fv3/16tXp2wGAJfDxxx9/9tln8/gXGwBw0lDgYXxzCUv/8R//MX3P4KOPPtrc3Jy+HQBYDv/7v/9b/veWAg8AgPY6iQUetra2vvOd70zfLTh9+vQEdfA+/vjjD9BC58+f39ramv7XBlhi//3f/13+J5cCDwAAzM/sCzzs7e398z//85R9gufPn6+trU2wY6fTidBCf/zHf3z//v0pf22AJXb//v1vfetbU/xrDwAAjmwu0/B++MMfTtkt2Nzc/OijjybYsdOZ7zK7mJNvfetbhCWgXuXIEgAAmJ/ZR4uZTMO7cePG7du3J9iRsNRShCXgUIQlAMBMUOBhfLOPFjOZhnfp0qXJ1rQlLLUUYQmoN2oaHgUeAADtdRILPOSzmIZ39uzZyW73Jyy1FGEJOBQFHgAAaNjsCzzMZBre6urq9vb2BDvWh6XhcDjx+eZ5nmVZlmXTtIBRCEvAoZiGBwBAwxZ0Gt7KysrOzs4EO9aHJd/3pzm14XAYx/E0LWAUwhJQj2p4AAA0b0Gr4XU6nYl3tMPo9/v9ft/3/SRJ0jT1fd/zvH6/PxwOh8Oh7/u9Xi8Igl6vp6eDwSDPc3uQJInv+77vKyANBoNut+v7fr/fn8dFO+EIS8ChGFkCAMwEBR7Gt6DV8KYPS0EQhGGY53kYhkmS6MVer2fHGcex53lxHGudnziOlZHsQbfb1VPbazAYMLI0J4Ql4FCVYYkCDwCA9jqJBR5mMg3v9OnTu7u7E+xoYSlNUw0EuT+AQlhSHLKnbliK47g8gkRYmh/CElBv1DQ8CjwAADA/sy/wkC9GNTxlpCRJNMtOLyosqUjDqLAURZFCkSUri1sWlijzMHOEJeBQTMMDAKBhCzoN78KFC48fP55gRwtLg8EgCAI9sLTT7XYVirIsC8NQT/VWkiS9Xk8ZqdfrZVmmlBXHsZWFCMOw3++HYbjgw4VtRFgCDkVYAgCgYQtaDe/q1auTdZ0tLCVJEsdxEATJwQ1LeZ6naaoElWVZfMDejaIoDEN31CgMQ9345L5CUpoHwhJQj2p4AIBZocDD+Ba0Gt7t27dv3LgxwY4sSttSbQxLOzs7YeOeP3/e5DneuXPnZuOaPMft7e3mT/DOnTuTHS0FHgAAS+YkFniYyTS8MAzPnTs3wY6EpZZqY1j68MMPv/a1r11o1qlTpyZbgmwC29vbb7zxxt1mXb9+/YMPPmjmBJMk+fjjj69cudLwOf76r/+6qnQeVWVYosADAADzM/sCDzOZhpdMWhCPsNRSCxiWdnd3wzCsSSYffPBB838Lefvtt7e3t5u5Atvb22+//XbDJxhFUcNh6cmTJw2f44ULFyYIS0zDAwCgeQs6DS9JkkuXLj18+PCoexGWFl8UReWy7IsWljY3N1dXV8+dO3f27NlRB0ZYmgfCUg0KPAAA0LAFrYaXJMmdO3euXbt21L1mFZZU+G4mTc1JlmWDwcBdOaoZKq0+TUioPOaFCkvb29tnz57VwObu7u7Vq1dv3rxZ3oywNA+EpRqEJQDATFDgYXwLWg0vSZKdnZ3V1dWXL18eaa8ZjiyV+/T6CPeVQq285jUclobDoVajcpeoOqrFD0vlUU3dl1/YbEHC0vb29tWrV+dxHRYnLIVhOME48zhaFJZGTcOjwAMAoL1OYoGHfEbT8JIkuXbt2lHLRs01LAVB4JYat3Vsj9Fcw1J57V1blncaCx6WdnZ2VlZWyq/fuHHj9u3b7ivHHpYUkzqdTqfTmcelWISwpFovnU6ncnBvei0KSwkFHgAAaNzsCzzMahpekiTPnz9fW1s70i4KS1pS1vf9fr9vXfN+v6+n3W43DEPf97XsrJagLZ9It9tVC0pEYRj2ej17qhtver2elriNosi2HxVgNLVPy9rqqbbXfL/BYNDtdgeDQb/f9zxPGwwGA9/3a8av3M8qNJjnue/7NVP1tN6uPtFa0/ZJkoRhWLgCesuelg2HQ21fP+5ki/y6FicsVQ4iJUny8uXLc+fOPX36VE+3trZ++7d/+7jCkhuTljUsWUwSwlLCNDwAABq3uNPw5KhlHmxkaTAYDIfD3BkMUWZwh4O63W6/30/TtPJErMdvYaMwrlIYWbLQZXHIlaapGkySRGnB2vd9X31uhSW1bNvntXPe3CBUaNCa9X0/+eLswcoTHAwGOuw0TfXKoVegfDD6xJp0N+pmsMUJS+fOnRvVkdW9TDs7Ozdu3Dh16pTnec2Hpbfeeuvy5cudknNzsL6+/uUvf7nhE4yi6Ld+67fcmCSqtzFzZ86c+e53v9vwOVINDwCAtljcanhu93T8O5fcsKRuvT3odrvD4bDf7ytE5QeDRaPOwt4aPyzZZuWxlziO3ZAQx7FFEdu+2+1a+3Ece55no2GHHmS5wUNn6BU2cD9dQ1uHXoGCJEl839d1Hv9zZUHC0u7u7srKSs3v2ze/+c0vfelL6r6/++67xzKytLm5Wc4S81gAd3Nz8ytf+UrDJxhF0e/8zu/cvHnz9OnT7gn2er15nOOHH374j//4jw2fIyNLAIDjRYGH8S1uNTxz7969Tz75ZMyN68NSEARuP973fRt+KauJCvZfhRy16c73C0tDK0mSWJgJgsAdOLLt3bjibl+TPexDyw32ej1rrXw8+UEiyvM8iqIkSdxLoaaOGpYsImoi36HH7FqQsPT48eMLFy5UvvX8+fP19XW3+/72228f4z1L4Rdnqc3jahzvNLzd3V03MjENLxkRlijwAABor5NY4GG20/Dk3OiZUQXuPUuaYqcHuXNDTrfbzbJM9wLpTqHyDykMQ71uD/I8j6LImtVmmjinMKNJfeHo0Sq7/8dugtLMN/eepX6/bwdT2L5ApcN1ADb5zW0wSRKd8qiphmEYFu5Z8n1fg29xHJevQHhw11Zl9LKroRmAlRvIIoelmoL1n3zySWEw56233jr2angWmeZxNRahwINFJsLSqGl4FHgAAGB+Zl/gIZ/pNDzZ3t5eW1vTujf1RlXDUwbQ42nKXpdTh72iDJCMHlHRxoUWRt0xNWr7ox7hocXrCgdcf/z1dMvWoS1YvHQtSFj65JNP7t27N+rdp0+fnj171sLSr/zKrxx7WJLJhikOtQhhSXZ3d58/fz6Pc2xRWEqYhgcAQONaMA1Pnj59eu7cuUNvXqopHR4eFKMrd3DTNO1/Uf1dN2WqqmdDQMpmrqNmnnL7UzZY2H3KoudTXrGkFKgWJCytr69bvbtKL1++VHWHTqezsrKyIGFpThYnLM0PYQkAANRY9Gp4rsePH1+6dKk+L9WEJSyyBQlLp06dGqeayNbW1vr6+unTpwlLM0dYGoVqeACAWaHAw/gWvRpewebm5kcffeR2Z3d2dtwNCEsttQhhaWtr6+zZs+Nvv7a2RliaOcJSDQo8AACWzEks8DCnaXjm/v37586ds/7ihQsX7ty5Y+8SllpqEcLSw4cPL126NP72H3zwwTKFpXL3fcnC0tbWVnnYcAnCEgUeAACYn9kXeJjfNDzz9OnTtbW1x48fP3z4sNPpnDp1amtrS28RllpqEcLS7du3b9y4Mf72SxaWtLKt24lfsrB08+bNlZWVO3fuuJGpRWGJaXgAADSvZdPwzO7u7oULF375l39Zdcls4VrCUkstQlj66KOPNjc3x99++cKSWGRavrCkE3QjU4vCUkKBBwAAGteaanhlGlYyWriWsNRSixCWzp49a0OU4ziWsPSVr3xlc3MznIPCKlLnzp3b3Nw8lrD01a9+dR4n2Ov13BNUZOr1eoQlAMBJQ4GH8bWpGl7B2tpaoXun+DTmcQZB4HlekiR5nnuep1WS3Be1fG2e50mSeJ4XBEGe577ve54384uGYw9LL1++PHXq1JF2OZaw9OUvf3l9ff3cHHRKLl++/NZbbzV8gt/73vfefPPNeZzg6upq4QRXVlZ+93d/ty1hadQ0PAo8AADa6yQWeMgbmYZ3586dct9uZWVl/LA0HA673a5WK+r1elqy1n2x3+8rQaVp2u12tY6QvYjZ+uY3v/nnf/7nGgGY0/Kj9Z4/f762tnakXZZ1Gl6n07l69er29vayTsNzZ+ItwTQ8CjwAADA/sy/w0Ng0PClPJZriauDY/MEf/MHZs2c1ArC2tnbq1Kmj3kE0JVWlP9IuyxeWTp06de3aNSvHv5RhqVDjYQnCEgAAmJ8WT8OrRFhqqcI0vJcvXyq9rKys3L59e3d3d96/OdeuXXNr0I9jycKSG5NkycLSvXv3CqXwklaFJarhAQDQvLZWwxuFsNRSo+5Z2tnZuXHjxurq6s2bN8uL5MzQ2traUaf/LVlYKluysFSpRWEpYWQJADAjFHgYX4ur4VUiLLVUfYGH3d3dmzdvrq6uHnXwZ0y7u7unT58+6l6EpXkgLNWoDEsUeAAAtNdJLPDANDxMYJxqeDs7O9euXVtdXX348OFsf20ePnx46dKlo+5FWJoHwtIoo6bhUeABAID5mX2Bh5xpeDi68UuHb29vX7p0aX19/enTp7P6tblx48bt27ePuhdhaR4ISzWYhgcAQMOYhoeFcNR1lp4+fbq+vv7JJ58UahJM5ty5cxN0XglL80BYqkFYAgCgYVTDW3JJkhz3IYxlskVp7927d/bs2du3b09T+2F7e3t1dXWCHT/44IPr16/fbdYbb7zRZFg6derUhWZ97Wtf+/DDD5s5wSRJvvGNb7z33nsNn+Mbb7xBNTwAwDGiwMP4qIa30LQ87mS7RFE0GAy63e4MDyBJEs/zpmlwlMnCUpIku7u7N27cOHv27GS7J0ly8+bNmzdvTrBjGIY3GzenEhejPH36NGzcTEYLx7Szs9P8CYYTDSslFHgAACydk1jggWl4M9Tv94+0fRiGvV7PfaXwdPoDSOYzVDVxWJLt7e2rV6+ura0dtfbDy5cvV1dXm+ydAxOrDEsUeAAAYH5mX+ChFdPwoijq9/sae7E4q6dhGA4GgyzL9FhPRzWi3UW5wh64G+R5bu24Depx5fBRlmX9ft/zPPcIa8Rx3O12gyDo9/u9Xs/3fb3uhqU0TQeDQRAE9ooOIDnIP3oahmHlAeiauPHJrtioS2oNZllWf/xThiV5/vz5pUuX1tbWxv/L/WSlHYDmMQ0PAIDmndxpeN1uV718TVRLkkQBw/d9hRkFg8FgEMdxefcoirT9YDDQ9hZL9GA4HOp13/cVHgobKFpkWVYzU+5I40JRFPV6Pc/zdF7lFrrdbpZlcRzbAQyHwzzPNbMuCAIdcL/ftxbKB2Cv2BWwHQuXNAxDBbN+v195DV0zCUvy/Pnzc+fOra+vb25u1m/5+PHjS5cuzXWtW2CGKPAAAEDDTm41vEJ0ieNYYyZuz77b7Y4aVur1etosjuPKsKTkEMexDSUVNvA8L47jOI593x+VJcYPS2ma6mh937fQ4rZgkUbHliSJhTT7dA1MuWddE5bsCuQHcatwglEU6UgOHVbKZxqW5OnTpx999NHKysq1a9ceP35ceFdLNpGU0C6EJQDATFDgYXwntxpeoWef53m32+33++40M9/3R8WV8cNSHMeaaDcqLNWMuhxpZEnBrNfrpWlqbVoLNgKmY9O0PXf3fr+vgSB3y5qwpEb0uDIsKSMFQaBsVn/wMw9LsrOzc+fOnQsXLnQ6nfX19XMHVlZW7ty5Q1JCi4yahrexsVF5+ygAADVev3593IeQ5yezwEPekml4hZ69RmZ6vV6/30+SJM9z3czj+77mqhXYeJE7DU8pRSnI7g6KosidnKbwkGWZxa1Rty3ZLqNGt8qSJCkcrZ1mmqaWYfSgcAAWfvr9vu/7ugjlA7AGbZ6h3aZVuKQ2g1G3ftUf+ZzCksst7DbXDwLmpHJk6dWrV1TDAwBgTmZf4KEV0/CsMoFb1EExYzgc9no9va6KCKr3UG4kCIJer2dhKUmSXq8XBMFwOEySxDawnKCWh8OhzUxTMYaaPK1dkokK0OkU3ONPkkR3Ydk27gHoXd2wZNu4B6ACD+6403A4tPGo8iVVmrIN6jUQloC2YxoeAAANO7nT8AqGw6HuHSoUfBPVRXDZW7rPZ/LrdaDQ/jj3+SwTwhJQj2p4AAA07+RWw6s06vahmrBUf9PRkT6asHRcvzZAKzCyBACY3ueff37mzBnW6BvTya2Gh4VCWAIONSosbW1tXb9+veH/ZwEA7bW/v3/ch/D/ncQCDwsyDU838U98dmgYYQmoVz8Njz8QAgAwD7Mv8JAvzDS8I9XdxvEiLAGHYhoeAGAa/GVtAss8DY+w1CKEJeBQ44SlFy9eNPA/LACgjd5///3FmYDXFstcDY+w1CKEJaDeONXw9vf3Rw34AwBAUprAMlfD831/HmeHeSAsAYc66jS8169fuwNN+/v7POUpT3nK0xP19NWrV/fv388X2Eks8LA40/DCMGRwqS0IS8ChjhqWPvvss1u3btnTFy9e8JSnPOUpT0/U0729va2trRxTmH2BB6bhYQKEJaAei9ICANC8ZZ6GR1hqEcIScCiq4QEA0DCq4WEhEJaAQxGWAABoGNXwsBAIS0A9puEBAJbPSSzwkC/GNLwwDNM0nfjs0DDCEnAoRpYAAGjY7As8LM40PLQIYQk4FGEJAICGLfM0PLQIYQmoxzQ8AACat8zV8NAihCXgUIwsAQDQsGWuhocWISwBhyIsob2yLBsMBsPhUE8Hg0GWZXocRdFgMBgMBmEYajO721svVjYYBEEQBO5j7euKosgaN1mWBUFgG9QfduU2YRgOBgP7dEmSxM6ipsHyZmmaugcz6kIVzqv+sIEWOYkFHpiGhwkQloB6TMNDq8Vx3Ol0PM/TU8/z4jjO89z3/U6n0+12u92u3tXjPM/DMOx0OhYbCmwze5wkiR5YgwpRatle1Gae5+m/nufVlIPyPG8wGLiv+L5v+9oB9Pv9wllUKm+WJImOQYc9HA5HXSjbTOc1zjUHMBOzL/CQH+s0vFOnTl1AC/3qr/7q5ubmcf3aAK3AyBLayzKAOvrKAIpDhaGYKIr0YrfbrVkCpByW3A9SwDCDwcDNMLZ9lmXlOOQqvJskiR2wHWeapp7n+b5ffwUqN+v1enbkelx5ocpHAqAxyzYNb2trK0Q7HdfvDNAWhCW0VxzHnuf1+31lA2UAjdLkeZ4kSRzHlnB6vZ7Ggmom5yjwaK+Jw1J+WAgpvFtoR+8GQVA/PCWVm7ntq/HKC3XocQKYn2WrhgcAS4lpeGg1ZYAkSTzPC8NQGcBCi9KR5ZAwDN2paJU0b017aW6bfdA4YUnZQ5MAayLZOGGp8OIolZuNCkuFC5UfTMMTUhPQpGWrhgcAy4qRJbSXMkCe577vK6vEcayMVNggPwgznU6n5uacKafh6f6fXq9Xf2f5mGGp0+kkSVJ/BSo30yCS23jlhSofCbA0TmKBh+OdhgcAy4qwhPayDJAkSafTUZ4JnXuWbANlhiRJFKWsaF7BTO5ZOlTlPUuKcDr4KIoKNyMVPtpUbmbnmGWZwlvlhSofCYDGzL7AA9PwAGDmmJdTYl8AAAeSSURBVIaHVnMHjnq9nmUATYSzCWaquKBEkSRJTeGExsJSYfKbHXCn07Fj6/f77pajWitvlhxUw5MkSUZdKMIScFyYhgcA7cDIElrNAkyWZW6YSZIkCAIN0ZTfGjVQo/8pyo/zqrGdcrPJYbPmrCljY1xJkqgokbtlmqbarL7SQ+VmWg+qfPzuYbsHAKBJy1YNDwCWFWEJJ5OtIWtmvtDQbD+ivBIug0JAe80+LL148eJf/uVfjrtTAQBL5f79+3/7t38783+xgcWnUgeuQxc1Ot6P0Eq4rpoFo4AT7iQWeMjzPE3T4+5XAMBS+cEPfjDxP9cAAGAysy/wkOf5n/7pn+7u7h531wIAlsdPfvKTif+5BgAAk5lLgYfvfe97//Zv/3bcXQsAWBK7u7vvvffe559/Po9/sQEAwChzCUt5nv/sZz/b2dk57g4GACyDH//4x3P6txoAANSYV1h69uzZn/3Znx13BwMAWu/b3/72qOrJAAC02pkzZ16/fn3cR1FnqrD04sWL/f39mg1+9rOf/f3f/z33LwHABHZ3d//zP/9ze3ubCXgAAByLqcLSxsbGocX+bty48Ud/9Ec//elPh8PhxsbGj370ozAMecADHvCABzUPfvKTn/zTP/3TX/7lX07zTzQAAJjSvKbhle3t7b169YoHPOABD3hQ/+DFixc5AABYAM2FJQAAAACQUUu2LhTCEgAAAIBG7e3tXb58+biP4nAzCEsbGxt7e3vTtwMAAAAAi2MGYenZs2eEJQAAAABLhml4AAAAABrSrlEWwhIAAACAhpw/f14FYFthlmHp7t27jx49mmGDAAAAAJZJu1Zan2VY2t/f39/fn2GDAAAAANquXVPvXPOahre3txdF0ZwaBwAAANAWFy9ebOmS6/MKS69evdrY2MjzPIoiNzW9fv369evXPOUpT3nKU57ylKc85SlPl/VpIQK019wLPBSu1JMnT548ecJTnvKUpzzlKU95ylOe8nRZnxKWAAAAAGCZEZYAAAAAoAJhCQAAAAAqEJYAAAAAoAJhCQAAAAAqEJYAAAAAoAJhCQAAAAAqEJYAAAAAoAJhCQAAAAAqEJaQJ0kSx/FxH8W40jSd09FWtpwkSZqm8/g4AAAALDjC0ongeZ7neVEU5Xkex7HneXo9DEPP8zqdTqfT8TxPqcnzPN/3bcderzeq2V6vZ01pxziO9aDAjsEVx/FgMLCn3W53OBzWnEWSJN1uVwes3fM8L7Sgc+z3+zod7RgEgfu0LI5jt2VtqRf1Srfbrb+S7nnVXDEAAAC0CGHpRFAMUCfeuvhRFHU6HQWMOI6DIFBI8H3f87w0TQeDQafTUTCopIChx3EcdzodBRiLTN1uV4/tRe1iL+ojwjCMokhv1QzjKJsNh0PtnmWZ28JwOLRUo1MLgsDdcVSzaZoq5Khluw52/IqUunqVV1Kv9/t9HVhNKgMAAECLEJZOBPX7FUWsi68IocjhUnjQuzbEVGlUWHI/tGaX/CDqWJoqtFC5b2EDtwW38cJwUM2JVGZCxS170eJW5ZXU64PBYNRHAAAAoI0ISyeCxj2UGayLb3EiCILBYDAYDCw4+b6v6Wf1t+tollr3wJRhSY9rhmXCMNRR9Xq9MAzdFvr9fr/f1wO9bvGmEHsqz6I87uQemHtslVcyP5ivqMtoI1oAAABoNcLSiaBxD93eo+lquRNmfN8vRJ2Gw5LtfujdPlEUKQVZLrIWCrsrWUVRpGxTfxZHCkvlK5kf3LOkE6kfjgMAAEBbEJZOBJskZvPr8tGT6NxpePXpZVbT8Pr9/mAwsMGiQ9ldRrmTasqz6TQK1O12689CybAwohUEQSE9WsIsX8mcaXgAAADLiLB0IlhX3oaM8oOYoTljbtRRBrACDzUV6mZ7z9KhwjDUSJfCkhp3WyikO32W53n1McwKXajxKIqyLNNHaIxI0+2swEP5SuaEJQAAgGVEWDoRrCvvjsnked7r9dTj18S2OI6VHNzS4eXAYxoOS94XKcW5LSjA2OCSRocOnUyYH5QaN2pNN0HZ/Do1MupKEpYAAACWD2HpRLBC23lpCdokSYIgiKJI89DK79YkmcK7hS0ri2gXdsmybPwVZrXvYDCoacE90/ygXvk4jau6XRzHbrJKkiQMw1Htu+dS+FwAAAAsAcISDhdF0aBkfjXfrDqfq6ac3ZgaPgsAAAC0HWEJhwuCoFsyv5pvqs5XMH2qafgsAAAA0HaEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACoQFgCAAAAgAqEJQAAAACo8P8A9oFyX3mPFMIAAAAASUVORK5CYII=" alt="" />

4、nginx将配置信息location分析后,存储到相应的数据结构中,关于对于location参数的处理,例如,location /,location ~ \.php$,参数分别是/ 和~ \.php$ 如何分析,以什么样的形式存入到相应的数据结构中,这里不再展开。 在将location规则存入后,下面就是nginx处理客户端请求,去匹配location规则。

5、ngx_http_request.c 记录了nginx对客户端请求的分析过程,最后,会启用"解析函数组"去处理这次请求

void
ngx_http_core_run_phases(ngx_http_request_t *r)
{
ngx_int_t rc;
ngx_http_phase_handler_t *ph;
ngx_http_core_main_conf_t *cmcf; cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module); ph = cmcf->phase_engine.handlers; while (ph[r->phase_handler].checker) { rc = ph[r->phase_handler].checker(r, &ph[r->phase_handler]); if (rc == NGX_OK) {
return;
}
}
}

6、“解析函数组”可以理解成一种工作流,针对一个请求,整个处理流程中,存在server 重定向,查找location配置,location内部重定向等等,关于细节会在后面再研究,这里我们看查找location配置,ngx_http_core_find_config_phase

ngx_int_t
ngx_http_core_find_config_phase(ngx_http_request_t *r,
ngx_http_phase_handler_t *ph)
{
u_char *p;
size_t len;
ngx_int_t rc;
ngx_http_core_loc_conf_t *clcf; r->content_handler = NULL;
r->uri_changed = ; rc = ngx_http_core_find_location(r); if (rc == NGX_ERROR) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return NGX_OK;
} clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); if (!r->internal && clcf->internal) {
ngx_http_finalize_request(r, NGX_HTTP_NOT_FOUND);
return NGX_OK;
} ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, ,
"using configuration \"%s%V\"",
(clcf->noname ? "*" : (clcf->exact_match ? "=" : "")),
&clcf->name); ngx_http_update_location_config(r); ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, ,
"http cl:%O max:%O",
r->headers_in.content_length_n, clcf->client_max_body_size); if (r->headers_in.content_length_n != -
&& !r->discard_body
&& clcf->client_max_body_size
&& clcf->client_max_body_size < r->headers_in.content_length_n)
{
ngx_log_error(NGX_LOG_ERR, r->connection->log, ,
"client intended to send too large body: %O bytes",
r->headers_in.content_length_n); r->expect_tested = ;
(void) ngx_http_discard_request_body(r);
ngx_http_finalize_request(r, NGX_HTTP_REQUEST_ENTITY_TOO_LARGE);
return NGX_OK;
} if (rc == NGX_DONE) {
ngx_http_clear_location(r); r->headers_out.location = ngx_list_push(&r->headers_out.headers);
if (r->headers_out.location == NULL) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return NGX_OK;
} /*
* we do not need to set the r->headers_out.location->hash and
* r->headers_out.location->key fields
*/ if (r->args.len == ) {
r->headers_out.location->value = clcf->name; } else {
len = clcf->name.len + + r->args.len;
p = ngx_pnalloc(r->pool, len); if (p == NULL) {
ngx_http_finalize_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
return NGX_OK;
} r->headers_out.location->value.len = len;
r->headers_out.location->value.data = p; p = ngx_cpymem(p, clcf->name.data, clcf->name.len);
*p++ = '?';
ngx_memcpy(p, r->args.data, r->args.len);
} ngx_http_finalize_request(r, NGX_HTTP_MOVED_PERMANENTLY);
return NGX_OK;
} r->phase_handler++;
return NGX_AGAIN;
}
												

Nginx源码研究七:nginx的location指令分析的更多相关文章

  1. Nginx源码研究一:NGINX模块启动

    Nginx 是一个轻量级,但是高性能的 HTTP 和 代理 服务器,也是一个 IMAP/POP3/SMTP代理服务器. 它的第一个版本0.1.0是由俄罗斯的工程师Igor Sysoev与2004年10 ...

  2. Chrome自带恐龙小游戏的源码研究(七)

    在上一篇<Chrome自带恐龙小游戏的源码研究(六)>中研究了恐龙的跳跃过程,这一篇研究恐龙与障碍物之间的碰撞检测. 碰撞盒子 游戏中采用的是矩形(非旋转矩形)碰撞.这类碰撞优点是计算比较 ...

  3. Nginx源码研究五:NGINX的配置信息管理

    配置信息是nginx系统重要的组成部分,配置信息的使用,实际上包含两层,一层是用户针对参数定义了值,例如下面nginx参数文件中的 keepalive_timeout 65,还有一部分是用户没有定义值 ...

  4. Nginx源码研究八:nginx监听socket实现流程

    前面描述了nginx系统分析nginx的配置文件,初始化模块相关参数的过程,这里利用nginx监听socket的实现过程,做一次完整的回顾 1.首先,nginx启动的main函数中,会先初始化cycl ...

  5. Nginx源码研究六:NGINX的配置文件分析

    上一篇写到nginx的各个模块的配置信息的存储结构,大体描述了对配置信息的配置项生成,定制,初始化过程.这里重点研究实现定制的过程,所谓实现定制,这里指的是,nginx系统提供使用者定义nginx的配 ...

  6. Nginx (一)Windows下编译Nginx源码以及安装 nginx for windows方法步骤

    转载自: http://apps.hi.baidu.com/share/detail/11192699#content Nginx介绍: Nginx ("engine x")是一个 ...

  7. Nginx源码研究二:NGINX的事件处理概论

    NGINX作为服务端的应用程序,在客户端发出数据后,服务端在做着这样一些处理,数据先会经过网卡,网卡会和操作系统做交互,经过操作系统的协议栈处理,再和不同的应用程序交互. 在这里面涉及两个概念,一个是 ...

  8. Nginx源码研究四:NGINX的内存管理

    关于nginx的内存使用,我们先看代码,下面是nginx_cycle.c中对全局数据结构cycle的初始化过程 pool = ngx_create_pool(NGX_CYCLE_POOL_SIZE, ...

  9. Nginx源码研究三:Epoll在NGINX中的使用

    Web服务器在面对高并发的情况下,网络的IO一般选择IO复用,像apache选择的Select/poll.Nginx在linux 2.6后选择Epoll做网路IO,提高了WEB服务的并发能力. 在本章 ...

随机推荐

  1. 未在本地计算机上注册"MSDAORA.1"提供程序

    1.在客户机器上部署数据库的时候老是报这个异常. 分析:因为用的是OleDB这个万能驱动, 连接字符串 Provider=MSDAORA.1;Password=CCIM;User ID=CCIM;Da ...

  2. HDOJ(HDU) 2401 Baskets of Gold Coins(数列、)

    Problem Description You are given N baskets of gold coins. The baskets are numbered from 1 to N. In ...

  3. CodeForces 587A

    题目链接: http://codeforces.com/problemset/problem/587/A 题意: 输入n个数,在这n个数中,寻找有多少个数不能消除掉 消除方法:两个相同的数消除后,生成 ...

  4. iOS状态栏颜色

    下面截图给出修改 iOS 状态栏颜色的 4 种方式 Target.png Info.plist.png Storyboard.png code.png 其中第四张图中的代码,直接写在你的任何一个 Vi ...

  5. CentOS6.5 mini开启网络

    1.编辑network配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 1 2 3 4 5 6 7 DEVICE=eth0 HWADDR=00:0C:2 ...

  6. iOS中@class #import #include 简介

    [转载自:http://blog.csdn.net/chengwuli125/article/details/9705315] 一.解析        很多刚开始学习iOS开发的同学可能在看别人的代码 ...

  7. java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap

    错误日志: java.lang.NoClassDefFoundError: com/ibatis/sqlmap/engine/mapping/result/BasicResultMap     at ...

  8. [2012山东省第三届ACM大学生程序设计竞赛]——n a^o7 !

    n a^o7 ! 题目:http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2413 Time Lim ...

  9. 传感器 Sensor 加速度【示例】

    简介 坐标系 x轴:从左到右 y轴:从下到上 z轴:从内到外 这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准. SENSOR_TYPE_ACCELEROMETER  ...

  10. redisbook笔记——redis内存映射数据结构

    虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费内存的工作,当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 为了解决 ...