-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
412 lines (213 loc) · 430 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Fnkk的个人博客</title>
<link href="http://example.com/atom.xml" rel="self"/>
<link href="http://example.com/"/>
<updated>2024-01-18T10:08:58.553Z</updated>
<id>http://example.com/</id>
<author>
<name>fnkk</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>NextJs-01</title>
<link href="http://example.com/2024/01/18/NextJs-01/"/>
<id>http://example.com/2024/01/18/NextJs-01/</id>
<published>2024-01-18T08:43:25.000Z</published>
<updated>2024-01-18T10:08:58.553Z</updated>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>之前学Next都是边用边学,现在打算重新系统的学习一遍,从读NextJs的官方文档开始</p><h2 id="CSS-styling"><a href="#CSS-styling" class="headerlink" title="CSS styling"></a>CSS styling</h2><h3 id="Global-styles"><a href="#Global-styles" class="headerlink" title="Global styles"></a>Global styles</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">import '@/app/ui/global.css';</span><br></pre></td></tr></table></figure><p>直接引入全局样式,一般应用于顶部组件。</p><h3 id="Tailwind"><a href="#Tailwind" class="headerlink" title="Tailwind"></a>Tailwind</h3><p>一种CSS框架,直接在className里用Tailwind的规则直接写样式,这样写出来的标签好长,可能是没怎么用过,感觉看着好累,不喜欢。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><h1 className="text-blue-500">I'm blue!</h1></span><br></pre></td></tr></table></figure><h3 id="CSS-Modules"><a href="#CSS-Modules" class="headerlink" title="CSS Modules"></a>CSS Modules</h3><p>将css文件命名为<strong>xxx.module.css</strong>的格式,在用如下方式引入使用。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">import styles from '@/app/ui/home.module.css';</span><br><span class="line"> </span><br><span class="line"><div className={styles.shape}></span><br></pre></td></tr></table></figure><h3 id="clsx"><a href="#clsx" class="headerlink" title="clsx"></a>clsx</h3><p>可以用于切换ClassName来条件渲染样式,平常直接用一些判断语句来做这样的条件渲染,似乎这个功能不是很必须。<br>下面是一个列子:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">import clsx from 'clsx';</span><br><span class="line"> </span><br><span class="line">export default function InvoiceStatus({ status }: { status: string }) {</span><br><span class="line"> return (</span><br><span class="line"> <span</span><br><span class="line"> className={clsx(</span><br><span class="line"> 'inline-flex items-center rounded-full px-2 py-1 text-sm',</span><br><span class="line"> {</span><br><span class="line"> 'bg-gray-100 text-gray-500': status === 'pending',</span><br><span class="line"> 'bg-green-500 text-white': status === 'paid',</span><br><span class="line"> },</span><br><span class="line"> )}</span><br><span class="line"> ></span><br><span class="line"> // ...</span><br><span class="line">)}</span><br></pre></td></tr></table></figure><h2 id="Optimizing-Fonts-and-Images"><a href="#Optimizing-Fonts-and-Images" class="headerlink" title="Optimizing Fonts and Images"></a>Optimizing Fonts and Images</h2><ul><li>next/font</li><li>next/image</li></ul>]]></content>
<summary type="html"><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>之前学Next都是边用边学,现在打算重新系统的学习一遍,从读NextJs的官方文档开始</p>
<h2 id="CSS-styling"><</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>Algorithm-02</title>
<link href="http://example.com/2024/01/17/Algorithm-02/"/>
<id>http://example.com/2024/01/17/Algorithm-02/</id>
<published>2024-01-17T01:45:30.000Z</published>
<updated>2024-01-17T02:30:56.032Z</updated>
<content type="html"><![CDATA[<h2 id="旋转链表"><a href="#旋转链表" class="headerlink" title="旋转链表"></a>旋转链表</h2><p><strong>题目:</strong> 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。</p><ul><li>示例 1<br> 输入:head = [1,2,3,4,5], k = 2<br> 输出:[4,5,1,2,3]</li><li>示例 2<br> 输入:head = [0,1,2], k = 4<br> 输出:[2,0,1]</li></ul><h2 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h2><pre><code>只要找到旋转后链表头位置记为J,把原来的链表头尾相连,在从J位置断开即可。</code></pre><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">var rotateRight = function(head, k) {</span><br><span class="line"> if (!head || k === 0) {</span><br><span class="line"> return head;</span><br><span class="line"> }</span><br><span class="line"> let length = 1;</span><br><span class="line"> let tail = head;</span><br><span class="line"> while (tail.next) {</span><br><span class="line"> tail = tail.next;</span><br><span class="line"> length++;</span><br><span class="line"> }</span><br><span class="line"> k = k % length;</span><br><span class="line"> if (k === 0) {</span><br><span class="line"> return head;</span><br><span class="line"> }</span><br><span class="line"> let newTail = head;</span><br><span class="line"> for (let i = 0; i < length - k - 1; i++) {</span><br><span class="line"> newTail = newTail.next;</span><br><span class="line"> }</span><br><span class="line"> let newHead = newTail.next;</span><br><span class="line"> newTail.next = null;</span><br><span class="line"> tail.next = head;</span><br><span class="line"></span><br><span class="line"> return newHead;</span><br><span class="line">};</span><br></pre></td></tr></table></figure><h2 id="感受"><a href="#感受" class="headerlink" title="感受"></a>感受</h2><p>中等难度的题目写起来还是比较顺手的,但是算不上得心应手,花费的时间挺多的,要再巩固多几题,再尝试困难的题目。</p>]]></content>
<summary type="html"><h2 id="旋转链表"><a href="#旋转链表" class="headerlink" title="旋转链表"></a>旋转链表</h2><p><strong>题目:</strong> 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。<</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>React-01</title>
<link href="http://example.com/2024/01/16/React-01/"/>
<id>http://example.com/2024/01/16/React-01/</id>
<published>2024-01-16T07:40:03.000Z</published>
<updated>2024-01-16T08:53:04.561Z</updated>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><h2 id="之前学React都是边用边学,要做什么功能学习怎么实现的野路子。现在打算重新系统的学习一遍,从读react的官方文档开始-UseState"><a href="#之前学React都是边用边学,要做什么功能学习怎么实现的野路子。现在打算重新系统的学习一遍,从读react的官方文档开始-UseState" class="headerlink" title="之前学React都是边用边学,要做什么功能学习怎么实现的野路子。现在打算重新系统的学习一遍,从读react的官方文档开始## UseState"></a>之前学React都是边用边学,要做什么功能学习怎么实现的野路子。现在打算重新系统的学习一遍,从读react的官方文档开始<br>## UseState</h2>]]></content>
<summary type="html"><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><h2 id="之前学React都是边用边学,要做什么功能学习怎么实现的野路子。现在打算重新系统的学习一遍,从读react的官方文档开始-UseS</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>Algorithm_01</title>
<link href="http://example.com/2024/01/16/Algorithm-01/"/>
<id>http://example.com/2024/01/16/Algorithm-01/</id>
<published>2024-01-16T02:17:46.000Z</published>
<updated>2024-01-16T06:47:36.595Z</updated>
<content type="html"><![CDATA[<h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>在数字时代,算法的重要性日益凸显。意识到这一点,我计划利用闲暇时间练习算法题目,以提高我的编程技巧和逻辑思维。这不仅是对个人技能的提升,也是对未来职业发展的投资。解决算法问题的过程既富有挑战性又充满乐趣,每次突破都让我获得巨大的成就感。</p><p>我将记录我的学习历程和解题思路,希望这些笔记不仅能帮助自己回顾和巩固知识,同时也能为同样对算法感兴趣的朋友提供参考和启发。面对算法的复杂性和多样性,我相信持续的练习和分享是理解和掌握它们的最佳途径。</p><h2 id="全排列"><a href="#全排列" class="headerlink" title="全排列"></a>全排列</h2><p><strong>题目:</strong>给定一个不含重复数字的数组 nums,返回其所有可能的全排列。你可以按任意顺序返回答案。</p><ul><li>示例 1:<br> 输入:nums = [1,2,3]<br> 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]</li><li>示例2:<br> 输入:nums = [0,1]<br> 输出:[[0,1],[1,0]]</li><li>示例3:<br> 输入:nums = [1]<br> 输出:[[1]]</li><li>提示:<br> 1 <= nums.length <= 6<br> -10 <= nums[i] <= 10<br> nums 中的所有整数 互不相同</li></ul><h3 id="思路"><a href="#思路" class="headerlink" title="思路"></a>思路</h3><ul><li>数组nums不含重复的数字,所以只要每个元素排列的顺序不同,就不会出现重复的结果。因此只需从前往后,把每种可能性遍历出来即可。</li><li>使用递归的方式,迭代出所有的可能性。</li></ul><h3 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h3><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line">var permute = function (nums) {</span><br><span class="line"> let res = []</span><br><span class="line"> dfs(nums,[])</span><br><span class="line"> function dfs(nums, arr) {</span><br><span class="line"> if (nums.length == 0) {</span><br><span class="line"> res.push(arr)</span><br><span class="line"> return</span><br><span class="line"> }</span><br><span class="line"> for (let i = 0; i < nums.length; i++) {</span><br><span class="line"> let temp = [...nums.slice(0, i), ...nums.slice(i + 1)]</span><br><span class="line"> let newArr = arr</span><br><span class="line"> newArr.push(nums[i])</span><br><span class="line"> dfs(temp, newArr)</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> return res</span><br><span class="line">};</span><br></pre></td></tr></table></figure><ul><li>我最开始是这样写的,但是输出的结果的长度有问题,检查后推测是newArr这里可能引用了同样的地址,导致后面的结果继续push到已经存入res的结果中,于是改为下面的写法,成功通过了测试。</li></ul><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">var permute = function (nums) {</span><br><span class="line"> let res = []</span><br><span class="line"> dfs(nums,[])</span><br><span class="line"> function dfs(nums, arr) {</span><br><span class="line"> if (nums.length == 0) {</span><br><span class="line"> res.push(arr)</span><br><span class="line"> return</span><br><span class="line"> }</span><br><span class="line"> for (let i = 0; i < nums.length; i++) {</span><br><span class="line"> let temp = [...nums.slice(0, i), ...nums.slice(i + 1)]</span><br><span class="line"> dfs(temp, [...arr,nums[i]])</span><br><span class="line"> }</span><br><span class="line"> }</span><br><span class="line"> return res</span><br><span class="line">};</span><br></pre></td></tr></table></figure><h2 id="最后"><a href="#最后" class="headerlink" title="最后"></a>最后</h2><p>全排列是众多递归题目的基础,许多回溯和剪枝的操作都是在这个基础上的,要好好掌握。</p>]]></content>
<summary type="html"><h1 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h1><p>在数字时代,算法的重要性日益凸显。意识到这一点,我计划利用闲暇时间练习算法题目,以提高我的编程技巧和逻辑思维。这不仅是对个人技能的提升,也是</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>杭州黑客松类friend.tech系统的搭建</title>
<link href="http://example.com/2023/10/14/hangzhouHackthon/"/>
<id>http://example.com/2023/10/14/hangzhouHackthon/</id>
<published>2023-10-14T06:26:01.000Z</published>
<updated>2024-01-15T08:33:11.115Z</updated>
<content type="html"><![CDATA[<h1 id="类friend-tech系统设计的思路"><a href="#类friend-tech系统设计的思路" class="headerlink" title="类friend.tech系统设计的思路"></a>类friend.tech系统设计的思路</h1><h2 id="铸造NFT-nft信息可能还需要铸造时间、作者等信息"><a href="#铸造NFT-nft信息可能还需要铸造时间、作者等信息" class="headerlink" title="铸造NFT(nft信息可能还需要铸造时间、作者等信息)"></a>铸造NFT(nft信息可能还需要铸造时间、作者等信息)</h2><ul><li>项目地址</li><li>简介</li></ul><h2 id="首页"><a href="#首页" class="headerlink" title="首页"></a>首页</h2><ul><li>所有项目的列表<ol><li>包括字段:项目地址、简介、长度(发行了多少个NFT)、资金池、项目方总收益</li></ol></li><li>购买相关的项目NFT</li><li>?相关的一些图表</li></ul><h2 id="个人中心"><a href="#个人中心" class="headerlink" title="个人中心"></a>个人中心</h2><ul><li>我购买的所有项目相关信息<ol><li>我的位次</li><li>我的收益(包括回本预期,还需要多少位人入场)</li><li>操作(怒退)</li></ol></li><li>怒退按钮(实现怒退功能)</li></ul><h2 id="发布项目"><a href="#发布项目" class="headerlink" title="发布项目"></a>发布项目</h2><ul><li>发布页面<ol><li>提交表单:需要项目地址、简介。</li></ol></li></ul><h1 id="开发细节"><a href="#开发细节" class="headerlink" title="开发细节"></a>开发细节</h1><h2 id="确定项目"><a href="#确定项目" class="headerlink" title="确定项目"></a>确定项目</h2><h3 id="前端"><a href="#前端" class="headerlink" title="前端"></a>前端</h3><ul><li>day0</li></ul><ol><li>确定使用的技术栈:react</li><li>搭建页面的layout和静态页面的编写</li><li>使用etherjs连接钱包</li></ol><ul><li>day1</li></ul><ol><li>使用etherjs连接部署至Scroll的合约</li><li>调用合约的接口(initToken,mint等)完成相应的功能</li><li>读取合约信息完善页面</li></ol><h3 id="后端"><a href="#后端" class="headerlink" title="后端"></a>后端</h3>]]></content>
<summary type="html">设计思路</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>WTF study notes</title>
<link href="http://example.com/2023/06/29/WTF-study-notes/"/>
<id>http://example.com/2023/06/29/WTF-study-notes/</id>
<published>2023-06-29T06:48:52.000Z</published>
<updated>2024-01-15T07:36:03.598Z</updated>
<content type="html"><![CDATA[<h2 id="Solidity-101"><a href="#Solidity-101" class="headerlink" title="Solidity 101"></a>Solidity 101</h2><h3 id="引用类型"><a href="#引用类型" class="headerlink" title="引用类型"></a>引用类型</h3><ul><li>以下关于数组的说法中,正确的是 c 误选 b<br> a. 固定长度数组 和 bytes拥有 push() 成员,可以在数组最后添加一个0元素。<br> b. 数组字面常数,例如 [uint(1),2,3],需要声明第一个元素的类型,不然默认用存储空间最大的类型。<br> c. 内存数组的长度在创建后是固定的。<br> d. 对于memory可变长度数组,可以用new操作符来创建,并且不用声明长度,例如uint[] memory array = new uint[];。<ul><li>解析:<br> a. 动态数组和bytes 拥有push()<br> b. 默认用存储空间最小的类型<br> d. new关键字创建需要声明长度</li></ul></li><li>有如下一段合约代码,执行 initStudent 方法后,student.id 和 student.score 的值分别为<br> contract StructTypes {<br> struct Student{<br> uint256 id;<br> uint256 score;<br> }<br> Student student;<br> function initStudent() external{<br> student.id = 100;<br> student.score = 200;<br> Student storage _student = student;<br> _student.id = 300;<br> _student.score = 400;<br> }<br> }<br> a. 300 400<br> b. 100 200<br> c. 300 200<br> d. 100 400<ul><li>解析:<br> 正确答案a,创建新的Student _student是引用类型,地址指向不变,会改变指向地址内部的值。</li></ul></li></ul><h3 id="映射类型"><a href="#映射类型" class="headerlink" title="映射类型"></a>映射类型</h3><ul><li>Mapping的存储位置可以是?<br> 只能是storage</li><li>给映射变量map新增键值对的方法?<br> map[_Key] = _Value;</li></ul><h3 id="变量初始化"><a href="#变量初始化" class="headerlink" title="变量初始化"></a>变量初始化</h3><ul><li>字节的默认值是 0x00</li></ul><h3 id="常数-constant和immutable"><a href="#常数-constant和immutable" class="headerlink" title="常数 constant和immutable"></a>常数 constant和immutable</h3><ul><li>constant(常量)和immutable(不变量)。状态变量声明这个两个关键字之后,不能在合约后更改数值;并且还可以节省gas。另外,只有数值变量可以声明constant和immutable;string和bytes可以声明为constant,但不能为immutable。</li></ul><h3 id="继承"><a href="#继承" class="headerlink" title="继承"></a>继承</h3><h4 id="多重继承"><a href="#多重继承" class="headerlink" title="多重继承"></a>多重继承</h4><p>solidity的合约可以继承多个合约。规则:</p><p>继承时要按辈分最高到最低的顺序排。比如我们写一个Erzi合约,继承Yeye合约和Baba合约,那么就要写成contract Erzi is Yeye, Baba,而不能写成contract Erzi is Baba, Yeye,不然就会报错。 如果某一个函数在多个继承的合约里都存在,比如例子中的hip()和pop(),在子合约里必须重写,不然会报错。 重写在多个父合约中都重名的函数时,override关键字后面要加上所有父合约名字,例如override(Yeye, Baba)。 例子:<br> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">contract Erzi is Yeye, Baba{</span><br><span class="line"> // 继承两个function: hip()和pop(),输出值为Erzi。</span><br><span class="line"> function hip() public virtual override(Yeye, Baba){</span><br><span class="line"> emit Log("Erzi");</span><br><span class="line"> }</span><br><span class="line"></span><br><span class="line"> function pop() public virtual override(Yeye, Baba) {</span><br><span class="line"> emit Log("Erzi");</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure><br>我们可以看到,Erzi合约里面重写了hip()和pop()两个函数,将输出改为”Erzi”,并且还分别从Yeye和Baba合约继承了yeye()和baba()两个函数。</p><h3 id="抽象合约和接口"><a href="#抽象合约和接口" class="headerlink" title="抽象合约和接口"></a>抽象合约和接口</h3><ul><li>接口的定义<ol><li>不能包含状态变量</li><li>不能包含构造函数</li><li>不能继承除接口外的其他合约</li><li>所有函数都必须是external且不能有函数体</li><li>继承接口的合约必须实现接口定义的所有功能</li></ol></li></ul><h3 id="接收ETH"><a href="#接收ETH" class="headerlink" title="接收ETH"></a>接收ETH</h3><h4 id="接收ETH函数receive"><a href="#接收ETH函数receive" class="headerlink" title="接收ETH函数receive"></a>接收ETH函数receive</h4><ul><li>receive()只用于处理接收ETH。一个合约最多有一个receive()函数,声明方式与一般函数不一样,不需要function关键字:receive() external payable { … }。receive()函数不能有任何的参数,不能返回任何值,<strong>必须</strong>包含external和payable。</li></ul><h4 id="回退函数fallback"><a href="#回退函数fallback" class="headerlink" title="回退函数fallback"></a>回退函数fallback</h4><ul><li>fallback()函数会在调用合约不存在的函数时被触发。可用于接收ETH,也可以用于代理合约proxy contract。fallback()声明时不需要function关键字,必须由external修饰,<strong>一般</strong>也会用payable修饰,用于接收ETH:fallback() external payable { … }。</li></ul><h3 id="发送ETH"><a href="#发送ETH" class="headerlink" title="发送ETH"></a>发送ETH</h3><ul><li>transfer<br> 目标地址.transfer(金额)<br> gas限制是2300<br> 转账失败会自动回滚<br> 没有返回值</li><li>send<br> 目标地址.send(金额)<br> gas限制2300<br> 转账失败不会revert<br> send()的返回值是一个bool,代表转账成功或失败</li><li>call<br> 目标地址.call(value:金额)<br> 没有gas限制<br> 转账失败不会revert<br> call()的返回值是(bool,data),bool代表转账成功或失败</li></ul>]]></content>
<summary type="html">学习solidity的错题集</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>ff数字藏品交易系统的搭建</title>
<link href="http://example.com/2023/03/31/ff-system/"/>
<id>http://example.com/2023/03/31/ff-system/</id>
<published>2023-03-31T07:51:01.000Z</published>
<updated>2024-01-15T07:36:03.602Z</updated>
<content type="html"><![CDATA[<h1 id="毕业设计系统设计的思路"><a href="#毕业设计系统设计的思路" class="headerlink" title="毕业设计系统设计的思路"></a>毕业设计系统设计的思路</h1><h2 id="铸造NFT-nft信息可能还需要铸造时间、作者等信息"><a href="#铸造NFT-nft信息可能还需要铸造时间、作者等信息" class="headerlink" title="铸造NFT(nft信息可能还需要铸造时间、作者等信息)"></a>铸造NFT(nft信息可能还需要铸造时间、作者等信息)</h2><ul><li>WTF的铸造NFT合约的铸造函数mint() 只需要两个参数,tokenId和生成后NFT的地址。这显然是不符合我的需求的,需要改造。</li></ul><ol><li>生成NFT的tokenId自动生成,自增,容量上限为10000个。</li><li>生成NFT后的默认地址为使用的用户的地址</li><li>生成NFT需要一些额外的参数:图片信息(最重要的信息,应该是一个IPFS的地址哈希值),一些描述(用于展示NFT时描述,如:作者、名称等,不作为生成的条件)。</li></ol><h4 id="修改ERC721-sol-思路-已完成"><a href="#修改ERC721-sol-思路-已完成" class="headerlink" title="修改ERC721.sol 思路(已完成)"></a>修改ERC721.sol 思路(已完成)</h4><ol><li>tokenId 数据类型从uint改为string,从_mint函数的入参获得变为 图片地址哈希+nft名称+简介(或者简介存入ipfs的哈希) 通过sha256生成的值,不在设最大token数量(或者添加一个tokenNumber记录当前nft数量,并定义最大数量)。</li><li>tokenId 的数据类型只能是uint 所以tokenId改为数字自增,</li><li>_mint函数入参改变为 用户地址+图片哈希+name+简介 通过computedTokenId()函数获取tokenId的值,后续逻辑不变</li><li>定义一个mapping(tokenId => tokenDetail),tokenDetail为一个struct,包含tokenId,picUrl,introduction,name四个字段。</li><li>定义一个getTokenDetail函数 输入tokenId获取tokenDetail的内容</li></ol><h2 id="追溯NFT"><a href="#追溯NFT" class="headerlink" title="追溯NFT"></a>追溯NFT</h2><ul><li>查询交易记录的功能</li></ul><ol><li>输入tokenID查询这个NFT的所有被交易信息。</li><li>输入一个账号地址,查询该账号的所有交易记录。</li><li>需要利用事件存储交易信息到数据库,再在数据库中操作查询交易记录(node.js和mongoDb的操作,数据库如何设计,是否有必要记录其他更多的数据,实现完整的链下生态)</li><li>planB: 前端直接通过事件拿到所有信息,然后在前端进行数据处理展示,这样可以跳过node和mongo,但是逻辑可能也很复杂。</li></ol><h2 id="首页"><a href="#首页" class="headerlink" title="首页"></a>首页</h2><ul><li>一个走马灯,一个背景图,然后其他几个页面跳跳算了。</li></ul><h2 id="个人中心"><a href="#个人中心" class="headerlink" title="个人中心"></a>个人中心</h2><ul><li>查看本人持有的所有NFT(已完成)</li><li>本人所有交易记录,功能上隶属于追溯(不一定做,大概率放弃)</li><li>每个nft有两个按钮,分别是转赠和拍卖,分别跳转至转赠和新增拍卖页面。</li></ul><h2 id="数字博物馆"><a href="#数字博物馆" class="headerlink" title="数字博物馆"></a>数字博物馆</h2><ul><li>展示所有NFT作品,无限滚动、懒加载</li><li>还是采用分页的方式,简单一点,重写分页的方法即可。</li><li>和个人列表一致,采用card的形式展示,点击查看NFT作品详情。多一个该nft所有的交易记录信息,作者,持有人,创建时间</li></ul><h2 id="数字藏品拍卖"><a href="#数字藏品拍卖" class="headerlink" title="数字藏品拍卖"></a>数字藏品拍卖</h2><ul><li>用户可以提交自己持有的NFT进行拍卖</li><li>拍卖所展示被拍卖的NFT 分类分列:待开始、进行中、已结束。</li><li>拍卖流程同e-bay</li></ul><h2 id="数据库设计"><a href="#数据库设计" class="headerlink" title="数据库设计"></a>数据库设计</h2><ul><li>nft表<br>tokenId name introduction picUrl createdTime author owner transferSum<br>查询owner获取个人所有nft<br>查询所有信息获取所有nft</li><li>交易记录表<br>tokenId from to transferTime<br>查询tokenId返回所有记录就是追溯的结果。</li><li>拍卖表<br>有点多晚点再说</li><li>合约事件设计<br>只要一个新增NFT的事件即可,transfer事件既新增交易记录表,又更新nft表</li></ul><h1 id="毕业论文大纲"><a href="#毕业论文大纲" class="headerlink" title="毕业论文大纲"></a>毕业论文大纲</h1><ul><li>目录</li></ul><ol start="0"><li>摘要<ul><li>第一句讲背景,第二局讲做了什么,怎么做了,结果是啥<br> 随着“元宇宙”概念的爆火,与“元宇宙”相关的产业如雨后春笋般涌现出来。最典型的代表就是 NFT,它是表示数字资产的货币令牌,可以在网络上进行买卖,具备一定的货币属性。NFT 传入国内后,经过一定时间的发展,衍生成为了现在的数字藏品。数字藏品作为一种新兴的收藏品,为满足广大数字藏品爱好者的需要,本文尝试通过区块链技术,设计并实现了基于区块链数字藏品交易系统,旨在让人们体验、感受数字藏品的魅力。<br> 需求分析用例。vision</li></ul></li><li>绪论<ul><li>研究背景及意义</li><li>国内外研究现状<ol><li>区块链现状</li><li>数字藏品现状</li></ol></li><li>本文主要工作</li></ul></li><li>相关理论技术介绍<ul><li>区块链技术概述</li><li>node.js和mongodb概述<br> Node.js是一个基于Chrome V8引擎的开源、跨平台的JavaScript运行时环境。它允许开发者使用JavaScript来编写服务器端代码,以及使用JavaScript语言处理数据和事件。Node.js的出现极大地推动了JavaScript在服务器端的应用,并且成为了现代Web开发中不可或缺的一部分。Node.js提供了一些核心模块和第三方模块,使得开发者可以方便地构建高性能、可扩展的Web应用、网络工具和命令行工具。同时,Node.js还有着丰富的社区和文档资源,为开发者提供了强大的支持。<br> MongoDB是一种NoSQL数据库,采用了分布式文件存储的方式,以键值对的形式存储数据。它是一个高性能、可扩展、易部署的开源数据库,特别适合大规模的数据存储。相比传统的关系型数据库,MongoDB具有更高的可扩展性和更好的性能,在大数据处理和高并发场景中表现优异。同时,它还提供了灵活的数据模型和查询方式,使得开发者可以更加自由地设计和操作数据。MongoDB广泛应用于Web应用程序、移动应用程序、大数据、物联网等领域。</li><li>IPFS概述</li><li>react和web3.js概述</li></ul></li><li>数字藏品交易系统的分析与设计<ul><li>引入区块链的必要性<br> 将数字藏品存储在区块链上,可以使用智能合约确保每个数字藏品的唯一性和不可更改性,避免了数字藏品被复制、篡改等问题,可以增强数字藏品的唯一性和可信度。其次,区块链技术使用密码学和分布式网络的去中心化存储可以保护数据安全,有效防止数字藏品被黑客攻击或中心化服务器故障导致数据丢失。再者,使用使用区块链技术进行数字藏品交易,可以节省传统的中介费用和交易成本,同时通过智能合约和分布式网络实现的去中心化交易,保证每个交易的公平和公正,提供更加透明和公正的数字藏品交易平台。</li><li>数字藏品交易系统需求分析<br> 用户能够创建自己的数字藏品,同时能够查看其它用户创建的数字藏品。数字藏品的拥有者可以对它进行转赠和出售两种操作,用户可以购买被出售的数字藏品。数字藏品的所有交易都是公开透明的,可以追溯历史交易记录。</li><li>数字藏品交易系统架构设计。<br> 区块链作为一种分布式存储系统,能确保数据永久保存无法篡改,但是图片等大体积数据上链成本高,数据量大时查询效率低,所以本系统分为链上、链下两部分。其中链上部分为区块链存储,将数字藏品的创建、交易等信息通过智能合约接口存储到区块链上,保证数据真实可靠。同时依靠智能合约的事件监听,同步一份数据到传统数据库中,后续对数据的查询可以访问数据库提高查询效率。由于区块链上的数据可以追溯,如果怀疑数据库中的数据被篡改,可以查询区块链的历史数据与数据库进行对比,确保数据的真实可靠。将高清图片存储至IPFS系统,仅把IPFS返回的哈希值存储至区块链中,减少存储成本。最后构建前端界面,与区块链和后端进行交互,实现核心功能,如下图:…。</li><li>数字藏品交易系统核心功能设计。<ol><li>数字藏品创建<br> 用户上传图片至IPFS,填写名称、简介等信息后,即可生成数字藏品。</li><li>数字藏品转赠<br> 用户选择要转赠的数字藏品,填写被转赠的用户地址,即可完成转赠。</li><li>数字藏品交易<br> 用户选择要出售的数字藏品,填写要出售的价格,即可创建交易单号,在交易完成之前,可以进行价格修改、撤单的操作。用户可以在数字藏品交易中心查看发起交易的数字藏品,并选择是否购买。</li><li>数字藏品溯源<br> 用户输入数字藏品的唯一标识tokenId后,可以查找到该数字藏品的历史交易记录。</li></ol></li></ul></li><li>数字藏品交易系统的实现<ul><li><p>区块链环境搭建<br> 区块链按照去中心化程度由高到低分为:公链,联盟链,私链。因为公共网络的区块数量太多,同步耗时太长,为了方便本地开发与合约测试,本文搭建以太坊私链作为区块链的环境,后续如有需要,可以将智能合约部署至公链。<br> 下载geth客户端windows版本,然后需要创建网络的“创世”(genesis)状态,这写在一个JSON文件里(将其命名为genesis.json):<br> {<br> “config”: {<br> “chainId”: 666<br> },<br> “difficulty”: “2000”,<br> “gasLimit”: “2100000”,<br> “alloc”: {<br> “7df9a875a174b3bc565e6424a0050ebc1b2d1d82”: { “balance”: “300000” },<br> “f41c74c9ae680c1aa78f42e5647a62f353b7bdde”: { “balance”: “400000” }<br> }<br> }<br> 其中chainId为区块链Id,需要和主流公链不一样,difficulty为挖矿难度,gasLimit为交易时最大gas限制,alloc为初始账号设置。<br> 在终端运行:geth –datadir init genesis.json命令创建一条id为666的私链。创建完成后运行:geth –datadir –networkid 666 就可以成功运行以太坊节点。至此区块链开发环境搭建完成。</p></li><li><p>智能合约编写及部署<br> 基于本系统主要功能,拆分成数字藏品铸造和数字藏品交易两个主合约实现相应功能。</p><ol><li>ERC721.sol(数字藏品铸造合约):继承IERC721合约。<br> IERC721是一个标准的智能合约接口,用于在以太坊区块链上定义非同质化代币(NFT)。这个接口规范了创建、转让和销毁NFT的方法,同时定义了一个标准的元数据(metadata)格式,使得不同的应用可以共享和处理这些NFT。<br> 表:IERC721的事件和函数 表:ERC721的事件和函数(这里新增了不少东西)</li><li>NFTSwap.sol(数字藏品交易合约):主要实现挂单、购买、修改价格和撤单<br> 编写完成合约代码后,运行truffle compile命令编译代码。<br> 编写迁移脚本<br> 运行truffle migration完成智能合约的部署。</li></ol></li><li><p>IPFS系统实现<br> 本文引入IPFS用于存储数字藏品的高清图片。首先从IPFS官网下载go语言实现版本,在安装、配置环境之后,运行ipfs daemon命令,启动IPFS服务并在5001端口监听。IPFS网络情况如图…所示,图中数据表示本机所处网络已经覆盖了…个节点。其中本机所运行的节点地址为…</p><p> 本系统与IPFS的交互主要在前端功能上,详情见前端实现部分。</p></li><li><p>链下功能实现<br> 安装express、mongoose、web3等依赖,分别用于构建后端服务、与mongo<br> 数据库交互、与geth客户端交互的功能。</p><ol><li>数据库设计<br> 根据系统的需求分析,设计了如下三张表:nfts、transfers、swaps分别用于记录数字藏品信息、交易记录信息和交易单信息。<br> 三张表具体信息。</li><li>创建实体Schema对象。通过Schema对象对数据库进行添加修改操作</li><li>获取合约对象<br> 引入合约编译好的json,通过web3.js获取合约对象。监听合约对象的事件,触发不同的事件后对数据库进行相应的操作。</li><li>根据需求,编写后端接口,返回需要的数据</li></ol></li><li><p>前端实现<br> 前端采用React框架+Antd组件库构建前端页面。<br> 介绍+贴图。</p></li></ul></li><li>数字藏品交易系统的测试<ul><li>数字藏品上传测试</li><li>数字藏品转赠测试</li><li>数字藏品交易测试</li><li>数字藏品溯源测试</li></ul></li><li>总结与展望</li></ol>]]></content>
<summary type="html">设计思路</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>what will I do when I quit e-game?</title>
<link href="http://example.com/2023/03/15/quit_e-game/"/>
<id>http://example.com/2023/03/15/quit_e-game/</id>
<published>2023-03-15T02:38:56.000Z</published>
<updated>2024-01-15T07:36:03.606Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look."> <script id="hbeData" type="hbeData" data-hmacdigest="51678a3782a98a8a73828719652dc5ebc74e6ea523d82693c97cba5bf4c54ef4">10d79030e8222445804370796b90fca1b3149e2c2a0f36d6b4ea04e548758c2169d135eadcc6782a113e952a0c7babd123e271b28e361a58e53456193db8b74f5a1cb65ec293d420edc08426d2539c19a3b01e81e9aa40e8631d1695e10010a9a4e1511cda73a4a6ee8bb324b1cfc08271479aeb525182c2690034d6ca94a35c7c10078f57d52ab4599e97f09771e4295950a89876265b7e6fc2cf411259d15df555baa6c50c7bb30180aad18181038cbb141adcce3fa67916a4e67bb2eb98629ee5447aab7f8bf09a389f5187ba8af48f9e7da13bfa9ed936849c4febbdb9b16b961962c4698338a2d6dd61e2b28ca28690f3c84039e12e8a59e316801821d4c8d7d73bd18dfb65494a7822aa8abbcc7d7d61d1a0993f18a94f7da7bd1df0abe8b4d20142d7108f9f9c966f96f733686f87e5fe22f925748be9805cef4ca2d1a0282c16dc225093ee878897c6d8b22b2bf9501d86f0e524a87c4426279576a444975152513583c87b0e3d22890b8ccecf8d860edf99bca5cf616eeff0a890c658ee27178bc6316323a7aab2882ca6c39099d49a7d88cb0b3d30f801dedc9ae353d58ffb08436678774b42d2b1e95b9ab3336831806a5f66db996f422763fc5f17fc4338e3018b4d8ac63044d067bf771a2dd4244a95bb17f3b71675f8305ad9ab0c414df7b83e38be19f2c54ab47cee5a97df6b79403f2e0a14de00b9ad68a91f835c33db65badc6d57c0da3f3c56e5c92bcbfddc985e7593432b8457d477d17d20cc679aa735c566056bcb7972c0d1a83599f793ba295da6e61d6bb364d4da31d7eac1bfacfcac0055541360229fe9b459c7ad5cd78231deb92e95c6722e234995e548dff14bdbe0827d0fa9c69d5d595933d57c1f3023943aab6b99588c6eba431e2bb301183fff83f78cb3f4ba1b4ecd26a70200c81a8f23e1d349a81662f1c3341c1351918355c3b882aae47ccb27383c054d3e27ff6c40c1edafd27aae711a84edafcd679f3ee0a43c120b7d4cdf3635dfd3ec829dfca41acf11a832fc93d7ab1fdfda15cf4cae7fcc46359fe6bd0aa5ca0e97f32cde1748f583ee3d2fb7966ec30780657acf017ff7ab4fb3895cdc5e1e38cfe2b7e5bc3691596a0dcc40c8e5b966ce65f0063b896410e4b25cb041dc6ca6f6c0f0f6aabb61e5731479b8f3511ba867c1b100e646c4217a2957b8e8c307526170b39b491aaebf18cca070199489101e17ce3b744434439fe709dee62b6f594a3eb76a431c0c7fa65306a49260a213a8bc43832781ce9b544a3c038097d4f078481befacff4900adb4893304a29cd94493d5c9447677b3242662df07540c2e9e539405f6b3d1438bf45b53d9f967b42baf4dd5f716a3de50aa62e84426a2d81f32b47d1f003929c1a6b10bd3ddfc16b8b17a3b7560cece764a2f532b1ffd63c35ca90f477b18cf8e466266c0c4eb189699ec2aef8fd0a36fd329d4dcfc63a02a7a7461c8f517f34faec45c85eb22086688de854d1bab184efe8bff57aac506dfdf106fade64420f54bdddfd4240ea3c35f427b2ff04b7142b9e40636e72e9b7b31c05e05e30f4d6aa2ca447be5015348fee0d6eb13c43c89c451848515fcc97dd79d84ab553b66dfd2acdd083d115821af769b1281e8093d06615d99c58d26922183c12487c8115abfb94826af530a91f3784de36a5e5ac6c0ea9d51eab80057ecab1ddb1a6d2935a3c5bdb448fcda860c4bd692dda640c5f046d297b8aa52fdcb3dd3f017633698a47a8028ae3a66486fcb7ba2a601a3500cdab61610399a78e32cc1e68c36fef6f78a3064d70eb9d90ec23f05eda5fded5a15348897d1a950af0d3748d8cdba22c026f267e3daf9f339917ea91dd67e454e9e4ae2042c8627a4fe18bee2d87b185433294a43b4ccff557e03ac7ebfa2a0a91a6c0758f2faac9b6448fac0c51757bbc064f0fce2f87cb547f6be95ff247f0d5ff5e0ce20429f702649672487390d382ebc34a5c293201a2120f45a21d6f502c674f8ed91b9a1b6ee47a0116598722fe91666ea537644b5b3ab302925889767fb2adf20da9fe686a88fe3a09e8352816698ddfb81d7f9127a121438c1be19e4fa7cd82845c2f6a9a6e066f82b46dcc39996294452c3e1614be92a26c2a3c55debd42ba281400b5f20bc9cfe7d329b8a5a1ed186698587ff6c92779b9bba6dbe96e226de8dba44e12999b4a8518d4dc0b8832ddd947c5658f9b7f5f64d44c14041461c2539accc58a188f9547555134ee36ff396971fb50f3ad5bc49c9fe26f4668b59c7eced74feed28d036061421bb0f0d98db3fbc3e13f26ed1832d44aeba59eea642871705b0b2f810b082ba4594e3f863218d2ca115449c2d48c123dbd1cb74f741587d4c67ad1cc5fd6f922c2970156b2f095f7f0e1b52eef01c669b71db13bb55472918b16f41a54593228912cdc7bb11cc23838f6d09d6b3301bc4804327e8145964aa5ec366e5460a424da0d7506a709914843bdca7cdb74680dd8d8051462a22ebc7793f2dd23d8b6db572af309c19e0f506677b59985e46567e0e9b2fd7c6cf88ad038d8e0ee667a20d670b42a18242357105c0ec6a1fc5af32be5c1a0b620b91915f295c43eb0c3be51355c8e6f3631ec5e5560b01c27333ba86ab97237069614c5ffd40c01e9f74dcd05b18584d2ade6e575a5a21e632b2914b059519f5aedc693fecb381da1490cda307462299539705949bbd144e17a8cd9b8280afa4a789452354a94e1f3b473168254f029853581f2f8933fe8e1d57107e0d516280ab0c2e705cc1746a7e5a66a0bf0340b1fde56a28e5f4da4831bd41d3e20415a33f7fdf2a2bdbcc7e13c841d383bb2f718c5030e7dd36240edfaf12afa3f132c85ff116fecdff99eafc840433e4493f29a2380e770b3f5e350f9cb8fb0c407f8ab192157c34d243b89fb88e522af019db10422b62b3ff4a1653dd4ab136a5b20a3792717c4c86011d382f44996ef32e1c84380c148fee1b64e8054daeab0e9c8d2fa9a0797aca206bd6dfd5294822ac68f9eef096ad4aa5dd1edc2e4183573891b5238f19576e6ee3ee92dbf084829dd72e1adbe641f64401a84af6d12f83363bcbfa50e7911e829ca1605b96949dbe85ed2c3dcdb4160f1889041e09e4799633c0eee25dee691e833eb7d41c53342a1c6ca56b7b46ef4144b44a74a1519d17afac71e658220edcc4ea2bbad56788a1eb101149f8ed7bb0b1bcc1808256fa1da16cf6f14a3bb1bf2002044e597ddbbc2915c652bc9c6dfa0e924fa0bf81e73c327197ec81b92d0d4dcf1ee20fce996a17586dbdc3a399cd7e27081a5f57424ae747055161928d25acf371cf73d76c9caae90abfea27c0b7f048ca39c8fa382393cd2352c16ebe7ef93158a3f941172a50b9fa1d13db56af4aad0afcbc13fa27a84ccc65ac3f9550ac6a398e78971618da1ec9a75ae9c14a6e71fa457e2195a4193be11e68c3c620ffe8dd9956c3dbf125b5968b26ab816dc52e42cf72e7f7024bdd3fd326456326b9d00f5c51e926609d476ede0f55f486dc3d1f964b6dd113763e8730f4dd34a6c2524beab9aa5fe0e0b1ab4f99e9e029830a76457e7863c95804a514b0d72ee418bf8da02cab855d9e252551c217cb92d9cef488a3dcd715d518a324820d518e72d005f210b1c38fc0a140549fb0830d57d131df4a2f91fc9bce7d782c3d865f7ae146156e40f1298e1c70d2c9ae0cad2834fef0e459acea2cdbaf4622029f6629ec3efefa09393ec12bd5e5741ea25402e72b01d6de234f236ca24e8bd650dc2b855dd8ba277a3eaec192af695b5bcc0de88f8c66a88e2a5d7258534590ad8a75d467f1087121d9c525f1e80f9249324064a53e8fd9d965873e67f9822ca0510b9f455f2b21d858a244eb11ac7112d6d93a2f3e40f503617df8e017fa8977be7ccb28b04e2b17a850d57f6bef1248a9ae927497061e82e810d5a355bb9f5cbe81e18602af82ba361440c50dbf5adabfa1b7b5a41ddf82efe183ffe597b372d6c7e2344ce030d88d05b596cf983f7580854aaf20f67e252bdc4d4e167eac232c03cdf1e66efb2c306879f606ea6b31ed255e1c87431822577605bbf664e7aaa5253702a0b874effed7df9553a56aa71b81baa557bbd76b5c424d6ea7bc1a991ca7aefef2953b28d241d8edb75d750b47cb552aca86d488c66534ca2fa7668ff0c607ffc80af7ddbb497c67725e52beb0fa5575164f69e9ae113c9c66f903c46efbaf954dd7f4f0a2f5f6d26bd7f7c65446dec6a3c78ec086913adc100c0ae12315320fc5169bf01ec08749682184445a73d848b87a5ec7b27a6c348e73a1a0aad20f7157974a554592f2cd99afe9876d94abc9f3507275a64f9c8f08bd01b1950c91365a5a6136dbb8415be63c685f60eab4a0655cb6a96e5fc0bc5cb8290b3700dfe1d9204f742fa7246826b76743b7e600b2657989a9b10a68f70100e4700a6dc34e653b1c0aedc4016a84a7cb15a00817e7f9e06671b78cd32be1beb791e512479847725bdfcc572ab75355aa60e44dd9ef29656beb0f13b89c695177debecd4795a7b5ecd0e7c31935078456b85b241cf989553db7899d7b36db7e24134e97afd0de7e6eda2bebd9af75c9cb0086c8fce67d4acd17bd6bb497ab90641a0120ef3d26ca437436ad7aaa4b31e2e9037d0c7680f92df775a5cbf4e93fb08672de8e3087b4fdf353cd04c1df58b85af1ba2c835769c9053ddf8880aceb55995248d525325ae211d3f951e9b976dccea3c2fe6f52b6b4389cbf2060a29d6481f1615e7d9560ff8f67fe9513ebb913bf19eeb533e96109d6cb57dc6a5672d5cef2ce4e46932ab2d7f50d943cfb2719637693b93eb3b6afac8e276b9bb17025bfb45660ca644fd5205a31dd69149b29769a7c74df4a98abcf63eaa7e1eba06b86a0175a39ece84dc7c20b86af7049b5c1b3cd488638a823168724dd5721c64b4b91669b1493d4459c72267fd209aa4412dfd1ad56c55efa81b9bcd940ada5aead40e59d568913ca5689a5c6f245101eb41a8dca41da2f3db17d149f09194b6dcac64127dd5622d3e0ed5a15393b711b771ee311fea003e0b67da768aa08cad2a18843267536c34f8f98616047ce4050072a0acd33e1dc103bc7ebd07d2df1c9421d344f913489db2f3b5ecad6d54f6d4ed9a3a0607cfe67bf97d0f5ee37cc2059546b9df7dd85ff152264abd30547f68b8939febae61e108219a23ccc13f703d6cd886135f32153a8001ded16abe605eb7578b00639d4ee3897e11acd76eb337d7765068de938cfcf061a0fef3a59a6687c4f2fcc9fb5c6094b48315f1e3d4bdd57e4528ae52be7e7bdbea19e0c436c060e1162a4c1b2bda28bee4f7d2eb9dd2aaf5a63c2dcf1301b982a4a03f46e5a47e1b6c95173a0af79b87b825953ddad86a6de6041a29b4157aa73e38ddcb980a66357c14f96c8b4ff7d5110877e7486176e32055ad018902c5e27b8997973805e1eb486b75bc416b376408a40baf1c5ab3fceba38a06adcaa1eba48b26b6168ac63b382cc5723dc59b4d3d4bbd6efb58208c4038a79f57a7e056a9e16a57aeed7d2173e01ec8f390869caa5dcf0763ea9ca2729c7dfe36487ce12a76ac225924ea2526159f4d6b5aa3162c236236b1a57e0fa3916c574ee39ecf02a86a3f3299ff3127b673623750edbf62948b733e63de8374039fffc0ac0b548d64442d56f6acb7ad1beb138655682e7bb25c9dd11fd48f8b19a24d55103c20b0884d5cb7e1cd7e3e05ed70110cdbf535c7ed86d2d663226cb85ce36a5b147c599ff503a0c4f5cbc73d0c99ea4525342621291487e28177ff5999608ea0d7c1ae56e20cf7b4632fdfba9e8a66f0fec2e58131a35522cf7cf601f47747d195c78b7c9e5063d07e38af6ae18ed905841495d5ce2f4df2cf03e0eaee921b59024f8d6ccb9ff0149e2899dd8b9304febc7ab5695d5a5f887eda751fe06b62235c04ef3bc6085e7ffeafb05a6a0ecd1a4db0fd72fd98bddcb5629ee4d76fbd95bad48f79f90bfea54f79fe3f359c1c68f40b77d6922ced2ebd4320d8df96f2959ad31f1dd5c4e0d4f96c805dde446c5cbb15c8a8f8cffed92b2a8c5650a51c8bc69bb796af5bc073241e151edfb0073b7c9edb0882dac059e0f4785af3d6cf302e4bb0e8e2805a01cb50b3ce90eab35a3b78b2ea20dd888d1f3290f8520f4f8366d657cac3de3d4ee06df0048d1f201c43023181cfc0c62077d74982fe2aa769f6523cac4f21b3a0088cfe2c5eb1ccaf8b1504615187f092612dcdd0a3884e5ac7e98da772b7f1126952d5d6c9399d232192cdb09b187fd8c162988b411b871dbf53359a3114cb9030bbe9a4d6caad18154c8b64bca93ff6ec62e63284ba82f1ca232e242d516dde4bbdc7dbde64197ff2bed339142e5f58ee06563214f3bdd5d4950a451d56fd6c1e43c9bd47ca58ff318461e3df2bbd784b679a92133b4c731e96f226ead40f8d39051d86e0b82bad75c124444813af67aa83e9803c6abbb68d96c63e36705092514017fafb8651767c5c19efab17ea9954fba51f795168d77137d79e6d82d4e597fdc654fb5928323c7afb36d819c5ab0a7059be9e5abb4b75a3e3861cb6ba2dc5f1ec51ed7bddeb60c39e3fab7cba08989da601bdf85d6db1dc5db22786360021eb2bdb19f7fb4b940d797fa654c6a2600cedcb30598abac005b3397a48742f49336bb0bfc5ea921add1e37749dd3504de4685da62fd19f6e4da10cef11174249a15da5058e2f088dfdcd43d0cca2722c34e77b6745e4b344a5fcbb8541236b1bc7c73db23e667c805ea060190d0413041607b55516d299bd098adece9d47bd5bacce1adb06e981a3e786168f6d6ab1ea05e5fda5afb63145e025780c898b71ce936e9df48b94898d31eeedf1373129b232dd5f55587df7a1b21dc5017526d2dda6e16c19d095b066e420fc2a48e41975b9c1abe89f4f52cea07a8ef76364d0ccd55dcd42adf4833034dccb87a4cd14ada76c866a6afdc2f954cb6a81408bb89d4fbfe6838320deb8071b5928eb5794cbb3b24a31f353790805cf401f2662612c0f2e0224f460c43c9855f944a4900be3f9b86cf313fe46d7df8a051ae8b51f9d0257ace84211b57bf9cd7e7547635c16d89bbb19b5e5d22396d41735a3fcde25df4905c4b309d97faf210d519217d48624e691f51dad1d1ca544825c4f8fcde4f3c7711f59be779adfddca58ec030b9cfff50d522e49ea675710679263719d6fdb18a91a58488c863a11682f8cb4a6f9ec88592cab49f117efe6bcb3882ec8e4b651736e4e6bff674e71746f389882333d5ec7e6527d316e8f3c2e9a3800a0d4a6784480b7c6c5fbe3a6316ddaa85e2c31fa9208d6b8e5f91854a86603da46e2b4967cbf97249f0e927d6964c4b8c8d011e90f2228bd4e5276e4d4c36cda4ae57278acace9775ea7ebab4af0198be798448c05a5d7289282a878ce87a5d90916ffdbfb03f2fcb138b0d91fd93444eb17798a5a1d411dd80e8450a3c20f62b4a5db5a45faabc473057ed94d26156dff33d6bef679caa6b9e72bdf5d92ae260dcc3851088bf1beef24f0fafaaec71ec9ce91b09bfddb825a2f37909b8838c1112191866b2a3b663c4c137e383a6c44c10da880f1c755e9c3bd994801e4ef4bf3339ee4d279d2a53c915f715cde697f31a2a8eb0b535d2339c37cc579dee73e1ddfa7fa47da0e14289cf379767a0c6f0bd6dfaf2411dfd3f627ea12fe9694b526fb387288db1eaef796a7838d719448ea57ec34f3ac4667d6f0313d1111290421d0a41bd2193a6cc74a412d039e6d165fa973265046d51ff7a5a6a8a1fdb9100f160a4ac017aca836a35b2ce28962bb22a11cbaec06836f48f3eb0acfe6c14bce51d4d547db51578193aebf63dab5392567c7505ae78f11b3474fe0b9a4caf6a2f4586b3d18f37bb2cfe1a9570b3d4500c87c6590f21b7b7da97e3aea281c3d357d052a5a5dccbc7aeeae6a94c0a200e5064f22cc3d33ecb8ac6c4959b357b4fcaa576a3ea8489e5acab164f5f029c93f50caf9548e46f815479fc5aa9aced0dcea47b7a9835944494ccff4a58d664df78d41cec4c9b2c0087c2e4518dbb754982f59ebe75e260e12674503452029902ced06940710badbce5dd23d77769ad869351a44e0dafb407001b6ca0c96f6b1e283f03912393879ffe4b902f48dc6303ad8469076c760faed7d1d9d77f55af5a3c89842538a15e5ca3fc6a79367fae0464a37777e67c0acd1bb390985d729191bb6989fe140112b0ce9b7bf4e214a8172a20b40642a9e78cacdee2a8fe22c4fa480d15133869e1a4622ce5df70f434eaf5c28f1507119d25bd33013629b87a985a75def5ad3e0b8a0703adda019d7cf145f207c481fb80e3c6a5ebf04e7bf37bc9ac313454fae8fac26d57085b6d49a64537d47a72a55a2aa555c342518e4301164fde78bfb4ec0338a662aba5a0bb6e394e180bdcce73a1d288babbae8e004897e514db792981c2fbb1cbefabbef621ad9825a770acbead6fac349840c3616ff4519858250f56c8091d1597f403cb8a230288a29d6feeb762d8268df4e5071a90a5caaa55382d680678590577c9eea7841568a650fee2a7729da5c4a73a4913afe9215f0c771541bf76875f2b80e3cb9bf97ed0e5ec5d7c8d8620fe140489b191eb27c44a7ae326de67b8c8ff950d4999854a38aa84ec1eb7e7cff71cd533c4f79367b5696a99c6c6a54d1d239260572b85c0c0040da0a3420cd926da2031558f4f6b6d28f964b858ee01072358b45f7e9bd3a56c447b4e0d20c3268b9cc37f955e7fa9a7437f95bc1b9cdafdd2197d830256981fec3140cf0f5c5dbc8868d98135a1a2e89a91450b96f56ea28354c45abf46981ce8c9ee05fa0a4a0d30cb76ec77e55b8800e75e990faa5c44a5bd0950a6221c2a33b86a9f430274e70607ac6e86b5bf3bfc399f63cf43ec03cafce39118889f21501b53af407f855f0505c1f66b72161c10879cfae3b57da36990136f55b8129a6586999acdb2d0ab8da7de89ff3975f10a76574ee34585994b8606e555b89a5d7bd903bb4a9e7f1bd75953737ac8856ca82a0800f0f06bdf16d916449662c2ff07728a4203c7401b1b7361fc331d16a3d914eeec02efebb7dec8e0e0dda1a436984d7f8cd43ad368d85a9442ead5c929ebfc1238b79fb35f7599a47b276742e4f3e483c0de070bc7e0a614da7683e1494192252e3901b6daf368ac58f346fa6c7f7fd489e06b7b78ffb94715272e97222dc460cfb55244fdae4bc6c5482f63e5c11bca808abca589740d314d722264255bd5ff8b16a85a80e6e1b9ace220deec2d04529bd81ebdd471fa198427be912ef698ae66e85f8f5561c1c0657a14648dbc89b228cfa6d85c08d4f4b18e527e2594df8aeed81663481fed7a1c46b18bd7eb5449dc92ef8ed55ff7c22b48b023d33f10d41057aec2067e78b09bf42d388530d38cd8a8b231f5addbb8fe8d63b38d14c23fd7ee5e7ce8787ecbdfd99ba09e5649cb84e635a2c44cd83c83f4c02f4aa2857fd78097a294afa52763f068f60b72012a65e60e0417a85cf294d964422e87e44010cfbed5b9573b0a718840f830ecce0890ecd33660f4e3160912eb2ed3bbbce7e0d49cb47b6f05b03284de53302a944071c673609e39c32bf0022dbab3d80460d9cce45ac9dc20349fb6bb1e71a42000f67ff4616c1fdd675297d2884427a3a8ffba55b232ff117545f495d7fce67bcf94d4ef6fef42ed84647749d8884a29f8d2b4494020eee429cede39a90bb9f77d4485e894a2c097c1ac3fab6af09567d48af7509f81e65e63c764644d5fbb933d91b1d9017f9c1ff0b409820e4206977e41605cbd6a1a46333e0545933e572fb861e1b03684cec1c1206a1d5691507301d65e292daf8685292709c1138f9b8da541ac1c741511091c1b31efb3dc1715272d9d5fc7a0d34448a5834aa71105e14ff125d3e26d250e25c32489025d5eadfb58fff2a95b14ce1c5f521938eabe67acb4b8449e352743154c041df8f5f50dc38ba405dc53c4d951574cdc3f4a4a35b976fbeaf29ce8f678ee3b7b243bd9376f4adbbe0cd390c423bc673ddc80a10aa93c60d1ea7a94b8a4bef6c9ca6c907ebcaf12cd21c20046098feb439eb17dfabaf87e8211d30ce981bdeba78019cad2e3a71d3dfdef60e3542dde637ab4813c71a3773bb07cb4eaa40e7d576673cbc7617e2d2e5dc86d9b37281f822cd5dc2e8ef842af73f197f0c65a2020acd88390004486b7ede67e7c8853871ee915de0c54a82fe70115b9a6ab1e64079ecae17fe75f790b832adf143d5c9d48f7edf16b78c602c5e487a7ad55612ce41f9b19c0aea22b35bd3bc419949c9e445e6a83b2abce9cf96ab837bf9df96b2d94d87ea931487f5893f50d5951f04835975d694f499f2d3c9258bd5728cfc08c5e92b3b2e66583fca6936b211e8916119a853e2019d6b3c0acfdb45bd0bbb76efe9620d459d0616a6f233393e8ed0c6cd7576b26f4d9a2402c1f4b1c79cd33798218ef9ebe21d6b74cce6afa25a86a0b6b9c432a2289d941677b4b795d7b9d48f5c2c858118e7d4e6c30a7c29607efd24a802bd50294ea1289c961c21cb7de115ef487d29cce74c2dd184fda92760bb4f6bab50f1297b6523f85653b0b1e80bd864b3bbaf4306b06c6a2d53813b1dec609774d286dd82433be0ec499e432225caf213470bef2d11e0b2e9f5d6a0a22d836d7bfe93a5d572e74e9261a908a866dc3b3a2e76979b4e187c527836422459bf2855baf6ce3d4d398491d6e9b19005e3a14e065dffbc8bbce56e8fa8fa8440e12895c5ad6f188a1cf91d536bf0b498e0dc7891e283e71b197a5c3cba1c3d60cd4c270cde47f7ddbe56c567ef1dbf17329cb2aa84a1da143988e2086a3d22f97081bec526f07d7f09506738164cddded987613eaca1f2d76f4ee4044e94a343bf0f3ecb6390d82f56c1c74ff9da2d6a4677bde87aaa21bc4c2b8f7fecddd9b6cc0f13c327acde91a8938642bb5e8f6d1a82b5e6ce9c78fc9efab47cf4fe710f69c84da0ad45884b82e39aa84bc6cf2f0dcda7dbf77483dce7da856a964a5d19d9d276a97baedb63471bcecfc2c40ef502794ef6efd26d872517e0ee0b573cb283e00d693b4a204ad4b91d274a22d7f6e043dda7c915dae19ac37b11eaebe78a11f770b54cf3c48aeec6f5a4a1afc80c45c75adc2fdf16517c7d4ea5c3974171b36e13e014df96e81b57d5b9f7a799387853bacf3c3065df835b99e17aa92f358418b5ad63916eec5bdb4bd0e5fbbaf33af2378f12c0f6fa70baff34c847b91c5355cdb7d9b49d610f7105817a55e31eab917241866e5c087ad0957ae44fc12eddf732ffe0a8d6b66c8b8511c34d8c88903228ba3b7ec90bc77b6c968d0dc52785daef1df2418e92147354f43b73deae29569e73ae6d113d4fac77ff899c270f3d024e1c5fffb05f35ed6a65eeb680dfe5eb821f2e3c44556515bcd39784fcdae83843eca68d0f022e788827bf813501a7e9fd03e5b7882810f9c4aaeaa15078af330d15d069622def4a2a15e893f9333f5098661b5d9681fc0e0e08ef8d4dfe7f0d93ad8c2a2a50cb418bab266adba42b4855aa787da0f445f022ddbb686f03a412e80889c803ea14fdf4581727c37c3605cbe6b1ffe63c354c38ed2b79061d08fc830efba6142ab4cb2e7d086ab83aaee4a83e99988470749e38963084977e15f64add4eb1e6ac43104802eba6319090e41ee100ad60040891d2a1560bf1f286804a9131329401ed85f46d71d80c0304f8d18a2bd8b4c610d7c8a38e22ff2acc050fa992806102cba1f40991ef993ba0c139ca19c45085d7b27937bca2ac0f0c37f261a1099556e7cabc67649ead6ffd0d17f883a5176880e92a11cabe512945cf04820b5f462a88d80d9ed6c7e4ad1f5476583034999a1d94dbf5eea147dd9173e34684af913fd8554db301c97fc8fc5875552440b9763eb13fab32f5f2114e5ce4b7c0ebcb8612949105fa12b23d3bcc98c1613062c2410ed8be4748979d6c8d216ca5043ade96b30e4d5b0cdbf498afe29a627162b62716312f740e4f3d89dfb116548a9856d9e353c59997a9b2c59b905a4226a27c0e3521079bc98f186956438e34f362cfa6b95a14649bd5fcdb993edc70586c0dd974db09572d4fec9da75ebbfd1dbfdeabd7c4cee8e0ebff956f6b9a2cd8a321f217e11bddf239b55c772d679f0169e4acf0056f66f71e088621a0cb6ecbe3a962b7bb330f82350fb7bcf472f919e24f241df2491225ad1d65a91a5b1fff9b940bdaaf689fdfe9c06dc069c9cd0434b68dcd568df898843a0afa5e1d959dd4d86f929fcdde897850759397c4f8e688213f4f8538036450f88f0b6c008b5d912cc165fb480354a4710984bc47d49705ce823c0b579cca1e95d721e32694a2f4b523491d5923afc6d89e5953f59b9b6bdbfa34306b3ec7e6fd9eba03bacb9bc682a7cde9e561a9f9784b258475dcf769fbee67752e054d02548b7603dc84307d57ac4a27ae2e1f196770c960e3cc8a0cf461084deb16c6cd976a6870cd39a59243fbe4884711e821830e1c25919766e7807aa8786112141bda67d02fe7fff2298037f893589fe1602c32a7a878f6255fc7543e6cb9c4164d2abb67d8184a2810a4f71b6855cf42b79c205b82567d4f6f15d05136db170d06acd40a6638d55223d3821c495025a49a80854872cabc20a82f79bfc938daeadee4f3b00b37c3c60a03aa95a9b4a31aada467b437089b25039bbdd08559419b07e10416cf6f9a29beee84bcf44982936ba383c9e6d7f0325ebf0decd6039ac482c6b9a72aa8bfa9c8b18c9c7050dfaa81d319874d27efc69aafd297a759d9269c3fd90d0a07d2545c11df5c93142bec579823dfa064ebfe85a6d50c71d85a8251f45be710d77deaa38055a9572544a601d4d19c2688825e59a5cb6e40067655a8fc3c8e0eff9b5e8a3fb11d51953f67fc5c327b77cb68f359377fe48db35ac0374f03225e864d88a686c14d61eac42b69eab56386050dd11da559ea3e8619526a41455684af5a14020454a9de27b13f29554279c38337faf5d09b9523653ee1dea74c6e02c1025594704bf6f38fafba831c030c21b5fa132a58346c8a00ec6c279fc2e3908d9cdf07c9aba2505c16775a55f02b31da57f5518b40bac6717142c93d9691995e819cb93af6593f6b3b495d4fcdcfcc524aa64f744c7edd1d94ef8487907bd919a069a522ec4106d05b82a99d630603be9ccd90006e6bc881d3837c59f6cf2e1391ffd7feba3bd65d270bccbfb14e657ca93e74c48a3b0f03efed8b8cb8809bb3c37bfa9f636e66392870797cc6ef2c4d2372e5c44d78c2a8ca0ceaceb11c752a8a5e63440b8dd3a599f261a2baf80d24ceb093f95ca325da0385fc8b7028234c312913d3448cf1273b46397fc1e84e8042016f133611bc411981500678321099dc372fd32e8757bf3edf0afcedb603356ffb912585252abba3c81e11f27ee0eeef8a550b1bb268dd4660d3f4f8c6b035ace33b293f7cf5e957675befb8c68ef1d42be3c0cebdd7f925692547c93f13155c7e751858469c1f4418a9e8610eb3277ca7df0617b6e1310a7ba7e3edafb8507f606a841435e05420f765552a188ea4cb4</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">what will I do when I quit e-game?</summary>
<category term="情感" scheme="http://example.com/categories/%E6%83%85%E6%84%9F/"/>
</entry>
<entry>
<title>Implementation-of-ERC721</title>
<link href="http://example.com/2023/03/07/Implementation-of-ERC721/"/>
<id>http://example.com/2023/03/07/Implementation-of-ERC721/</id>
<published>2023-03-07T06:48:52.000Z</published>
<updated>2024-01-15T07:36:03.597Z</updated>
<content type="html"><![CDATA[<h2 id="学习ERC721标准,实现一个能发布NFT的的合约"><a href="#学习ERC721标准,实现一个能发布NFT的的合约" class="headerlink" title="学习ERC721标准,实现一个能发布NFT的的合约"></a>学习ERC721标准,实现一个能发布NFT的的合约</h2><h3 id="EIP与ERC"><a href="#EIP与ERC" class="headerlink" title="EIP与ERC"></a>EIP与ERC</h3><p>- 这里有一个点需要理解,本节标题是ERC721,这里又提到了EIP721,这两个是什么关系呢?</p><p>EIP全称 Ethereum Imporvement Proposals(以太坊改进建议), 是以太坊开发者社区提出的改进建议, 是一系列以编号排定的文件, 类似互联网上IETF的RFC。</p><p>EIP可以是 Ethereum 生态中任意领域的改进, 比如新特性、ERC、协议改进、编程工具等等。</p><p>ERC全称 Ethereum Request For Comment (以太坊意见征求稿), 用以记录以太坊上应用级的各种开发标准和协议。如典型的Token标准(ERC20, ERC721)、名字注册(ERC26, ERC13), URI范式(ERC67), Library/Package格式(EIP82), 钱包格式(EIP75,EIP85)。</p><p>ERC协议标准是影响以太坊发展的重要因素, 像ERC20, ERC223, ERC721, ERC777等, 都是对以太坊生态产生了很大影响。</p><p>所以最终结论:EIP包含ERC。</p><h3 id="ERC165"><a href="#ERC165" class="headerlink" title="ERC165"></a>ERC165</h3><ul><li>通过ERC165标准,智能合约可以声明它支持的接口,供其他合约检查。简单的说,ERC165就是检查一个智能合约是不是支持了ERC721,ERC1155的接口。</li></ul><p>IERC165接口合约只声明了一个supportsInterface函数,输入要查询的interfaceId接口id,若合约实现了该接口id,则返回true:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">interface IERC165 {</span><br><span class="line"> /**</span><br><span class="line"> * @dev 如果合约实现了查询的`interfaceId`,则返回true</span><br><span class="line"> * 规则详见:https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]</span><br><span class="line"> *</span><br><span class="line"> */</span><br><span class="line"> function supportsInterface(bytes4 interfaceId) external view returns (bool);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>我们可以看下ERC721是如何实现supportsInterface()函数的:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">function supportsInterface(bytes4 interfaceId) external pure override returns (bool)</span><br><span class="line">{</span><br><span class="line"> return</span><br><span class="line"> interfaceId == type(IERC721).interfaceId ||</span><br><span class="line"> interfaceId == type(IERC165).interfaceId;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>当查询的是IERC721或IERC165的接口id时,返回true;反之返回false。</p><h3 id="IERC721"><a href="#IERC721" class="headerlink" title="IERC721"></a>IERC721</h3><ul><li>IERC721是ERC721标准的接口合约,规定了ERC721要实现的基本函数。它利用tokenId来表示特定的非同质化代币,授权或转账都要明确tokenId;而ERC20只需要明确转账的数额即可。<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line">/**</span><br><span class="line"> * @dev ERC721标准接口.</span><br><span class="line"> */</span><br><span class="line">interface IERC721 is IERC165 {</span><br><span class="line"> event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);</span><br><span class="line"> event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);</span><br><span class="line"> event ApprovalForAll(address indexed owner, address indexed operator, bool approved);</span><br><span class="line"></span><br><span class="line"> function balanceOf(address owner) external view returns (uint256 balance);</span><br><span class="line"></span><br><span class="line"> function ownerOf(uint256 tokenId) external view returns (address owner);</span><br><span class="line"></span><br><span class="line"> function safeTransferFrom(</span><br><span class="line"> address from,</span><br><span class="line"> address to,</span><br><span class="line"> uint256 tokenId,</span><br><span class="line"> bytes calldata data</span><br><span class="line"> ) external;</span><br><span class="line"></span><br><span class="line"> function safeTransferFrom(</span><br><span class="line"> address from,</span><br><span class="line"> address to,</span><br><span class="line"> uint256 tokenId</span><br><span class="line"> ) external;</span><br><span class="line"></span><br><span class="line"> function transferFrom(</span><br><span class="line"> address from,</span><br><span class="line"> address to,</span><br><span class="line"> uint256 tokenId</span><br><span class="line"> ) external;</span><br><span class="line"></span><br><span class="line"> function approve(address to, uint256 tokenId) external;</span><br><span class="line"></span><br><span class="line"> function setApprovalForAll(address operator, bool _approved) external;</span><br><span class="line"></span><br><span class="line"> function getApproved(uint256 tokenId) external view returns (address operator);</span><br><span class="line"></span><br><span class="line"> function isApprovedForAll(address owner, address operator) external view returns (bool);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h3 id="IERC721Receiver"><a href="#IERC721Receiver" class="headerlink" title="IERC721Receiver"></a>IERC721Receiver</h3><p>如果一个合约没有实现ERC721的相关函数,转入的NFT就进了黑洞,永远转不出来了。为了防止误转账,ERC721实现了safeTransferFrom()安全转账函数,目标合约必须实现了IERC721Receiver接口才能接收ERC721代币,不然会revert。IERC721Receiver接口只包含一个onERC721Received()函数。</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">// ERC721接收者接口:合约必须实现这个接口来通过安全转账接收ERC721</span><br><span class="line">interface IERC721Receiver {</span><br><span class="line"> function onERC721Received(</span><br><span class="line"> address operator,</span><br><span class="line"> address from,</span><br><span class="line"> uint tokenId,</span><br><span class="line"> bytes calldata data</span><br><span class="line"> ) external returns (bytes4);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>我们看下ERC721利用_checkOnERC721Received来确保目标合约实现了onERC721Received()函数(返回onERC721Received的selector):</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">function _checkOnERC721Received(</span><br><span class="line"> address from,</span><br><span class="line"> address to,</span><br><span class="line"> uint tokenId,</span><br><span class="line"> bytes memory _data</span><br><span class="line">) private returns (bool) {</span><br><span class="line"> if (to.isContract()) {</span><br><span class="line"> return</span><br><span class="line"> IERC721Receiver(to).onERC721Received(</span><br><span class="line"> msg.sender,</span><br><span class="line"> from,</span><br><span class="line"> tokenId,</span><br><span class="line"> _data</span><br><span class="line"> ) == IERC721Receiver.onERC721Received.selector;</span><br><span class="line"> } else {</span><br><span class="line"> return true;</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure>]]></content>
<summary type="html">ERC721 发行NFT</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>secondary evolution</title>
<link href="http://example.com/2023/02/16/secondary-evolution/"/>
<id>http://example.com/2023/02/16/secondary-evolution/</id>
<published>2023-02-16T09:30:25.000Z</published>
<updated>2024-01-15T07:36:03.609Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look."> <script id="hbeData" type="hbeData" data-hmacdigest="22022767016336c7b14e4c86964e2575163e35925601ce9669f8eb17a2449c2c">10d79030e8222445804370796b90fca1b3149e2c2a0f36d6b4ea04e548758c21064fe90177d434f619b44a923623b1c3f273314dd3e4f9a67f78dc6172abe9707f50bcfa76f64b7f872baad9fa2f0ad58f443c646c92efc71cd382c56ca6faa2613d4d5ec32c83e97b246eb2d92316871577b44ef48ddaaa7ca819b57f8f36acb0d5a887d2ede09205e1a13273ad5913632689d6a878280e5f5422ae5d8b21d4c6de9693ac9d928cd99c4290182dc0ea7b112034d5049fa4ca220d7eb7bafac4da69dd059c56c71b6c515b0f6cf5039a59596839ea62afa4be63ce6a45aa7dadc03312632e5d07bdc7774013ab86931aea4d02bf85bd0089dea262cbbf71c56fe6c5e834f93da1aabf456bc8e7f5a9730793e5af5ec863624610349bb7074ff57617e9e8a39b7a8b7b683affa56cea9e4ff181439ae3a9640cfd56e9a1dd8790242e9897ffa771a8c6690cb19575a094b69c847d53086fd920af5a364fc495137810e7442f08db04b9d49cf51d51eb865a196c3990370a06d017dd4b0ed83de56e9ea3bfc702090ba0e28d7972ac7454f31eb86b32c9365685564e424d7dc934de887ab953b05f22d7560a2d7303cc3107ceba246029faeb7c65d3d7e7c4a65a8afc472347dc4edf6627983c595fd7d435aa99ed9ccc7adbc8a44dab3b35f979eb8f50ef26762d09ccd90ff042fdcd4e1d9d3c5e23327e47e8240eb5a018abd6450c4bc191e26670c2176486a494a727036ba4240d2a5c592d069b3f3ad633b00340f1564819e02a2a7ddd615df4b572dd782cdf15a866116638fcf2c885e5b2d9a82989a22486f8f7c8d6990b0dd16beb7b20f793554cd81c94e5bcb17340d242ba3a9ccb7c6389cacc19520754d68f2fd521001bd7fb635a851947f605b929a46b5b562fcf86499322fd8097c19cc08111265c27a1d17f7b6637697cc28342465f89b5da7fb898ae3505f0eebf3a180fe07712333bc753f98eae4aff3a88dc1ee90bc6529663c7658b325e3922a83c67ef7c798f537eabd562243212aa8ee6fe58ac6898f6e7b57896b3f01431b71600d1325ddc08673f6d1f18cfab4a40b69147eadbd97bbec771fb19ff9e8805631984b2fe9190449586ab4986311ba62089ff6a412ef9d6ad9ba2028b250eeca63c6745134d167dcc9cbc44a7210a14860b01f0c98dad3409bc1832a07ab09e1cadaccf1640ae404b51a4fe2b82ba3f79afff64674c715bebc7c9c068372664e0e454c61f86711d9ae9e17a877111666b121329809f30fd5aca8881a92aa06e04e6c88b26e406f580d2b8a71b33705b5dd3b7c0380b2316a6240c4e952c352a729dc401d92d76b7c6181acf628ed643a7d5930797c29f277897175cd7db562fe5b6c72e7412af0ad2d3b5cfd19d79e19e4da940ee9cc091416634185cafccde98b15bc71da80b32259980775591e7bb5268fafe922f5613ef701fc0ad9d4c0529b41f02e59d62547d2f52984d52f3189d8624e890ca425b19b522179d875558d9bd15185e55bde9bf1e8176de000190ed0c864e2c74578b8766b4a3cda1cdf26e8115c2dc22c4bf68fc666d76aa06210b017ec6001a5ab8a4f15614eafac4b70fbd4898fe1bf5572249e55af5a7d8ce2f59b3fda9e326bc81c5a0e34a033df4fe31cfb5f1cbb5d4d6b996be2cc5446bdc64dd1d88638c0d229a0b3edc75926325bcac5bc7fb8e5c3f66edc5c59993c1b4f4ae2949ea3fb03aabccef6a947db640e6409c913b3f7a5678e0202c050bb820bac4c2591f4afbfc3dbba97171f8c38d3db344cfdc800fbca13fac65cd19dbbbe2dc3895bc89fb40e423737f80b9d60e5e7808752f080d6b2cbc04f587b6811b5db85424ae11ab209c945562e4755c26ec85bd63462813b5f90a40c04f1e901179030d7dcae37c3c2112cf48275db8049d3efd0fd5f7f640699ebd3205be294653a351e1e15f21ac1122469e7f7a7d4675d07830a7de057dac92952226f08736d8f80c0aeac85c55e1a2e8d5c4c04846f3f2795562fe854c93f46d507803c0ade9be536ea176c35ca656a0ed1f51fc62ca2d07c4b4ff280f2ba9776be47eb55052d368870e5d3046984115a8f652ba4395b2974510e7c5a2c55b9c1c271dc5866b802315b896bc3269f539af1bbc9415f8dc6a96e7cac9e3d2d2a82513e017417efa57fc3c23bb0e007786f7ceb5c273b8209294bc5e04a8995886486a052a251d40355a53dce78cdee7ee4ac42d738016b5fc6d94e7c80a8e4ea80191e11b0b04bdb27966ef248b8a528a7c5f95f88ed9d9fa2143013631f3881f5c668296a2d923109402bcc2462c54908ccf2e98b2e0c116bb1e3e1785aa2aedc13cabe5f0355b92ab69ad07cd38bcca9cd4ede8f7e053e3f073a1c058615c88589293964295c35cc7fa18c3fe49f2365ca17e68418207f1aacda3457874689cf2aad4df0da2562f8aee67cadf5578eecb25561ccb36d188fa5ad462f4f97c10daf7262ecbe38adcfe195f7d22595b9494c48e0a559b991f51c6b431ea07f62d984f472fdc92f8f494115b3150aa228fc1efef7df2f8be9711b02bfd9c76512d92bb8140a287a030a98308258b1e1ba7c632dbb4ff65d34adf734ab6e60a6d82df0897fe204e71274c6968e63d7c1e3e7b0b4838e55dc3edc0945ec88682a6ab22df2debf0820a973fd761cb9d76b2f7f70936665e802726b47d2f2e06c92463acd4dabeb8b66bd9b45d3159d56eac0bcd2a76f10fd251c38727f3596250880ff38583a97cd5a55f219e6dee9f4e3260d2c8cfc04c4bfa5f6519cdd965435c3504e35b3b1da3e2c64ed54138f22fd876ab2787e679648961122755b96b08f3d831dc052e885a0518bd35ba8f9615255b985d22a84bb08c98ee38b94ecbb48828c24c2be6b1ff185200058d3f4605f63dd179661c9342fd056294542780df0054d29a81949c9cfcc2416be70235c2d918f4e8548b13f9c1db0c991971d9ac0829ea2927b41a2be8431e8dd5fecec48bb1101e48d37b05bde07d10109cc75e094b2068e7fc1edb65154133745fbc6b0dac5a3a063b9f284ef398969a2446d36cfcd7d89303cbd7659422ec43334a68ad4e00f71f69a43be4d10afabde9ed9078b8feba53bd25fad1517ed447fce9c2adee3ca1c3ee1d63f766fabfcf3fe47d35ea064bc46aa605ff7a33bafd5d1cdb05427aed8257f78ee3acaf604b8db32a14c04a91ee948bb1f69ae7f0c8c8752c57c0b6c58892bbc682ceffaa3161a02f47f4a253c59f7ca50db0b7b00405cb1e3fb3387ce477b328b550d6ac3fd2fcc784afca6ef6abb14167a51bd14a3de5a93839d76009a31e0a678e29a3c5376b50948580dde9ec5d82755a1bb1e1e8b22332701f1490a6b8b8d17aa9789a7f3e4f2373bcbd444cb06c12b8b55860e3ed267dc166c1faf86761f75578d948b9eb82bc8527091645ad48cc836ba9b133bcc02e188643d9907d3b5d723092ae28176b5b8df5252a9728e374f42e47155e197e5f5c21f3591ed6e6a3777e896f1038b97dcbf657163fbb78a81b4211a84709fc0f65fd3462fba71a40233ac4950581bd84a84f4c5935d2487200a16253537fd9569e885a4436a4fcee377f4a609bd2ff4e5088fedd151bbef8a4ca9c29a119ca2ee42aabc40d8f4e8bfd0fbf5c1a66d5f05296e85fc60393b81f86a0cafdd52065831a4c32fbe0ef0cea6edb40ad4200dced443104093230c2bc237c7387fac0e1bb4272a69f2604dff98aa506ad9b7b220018ceefec3e0ff974352a94961f7228cb55704d14c7ca0cdca9cf0b5faf144a4b44fafe79460651eb83a1748ddcb8342a74d7294ea95a6f691360de9526e4713123c8bc75fd0717f4c802770ebea8cc2e45ab7d59f6de9bfb425b55233e34e330da02f50f215d1f733f58d549a1db6d70603666e49226d4755451030845b8402c68a13b765919ecce52fb9afb1ce6fb6786806622bcc73d67da86110e99db1883d4de016ed467a13fa4d3e8852cf2498dd0ff615a72353e83f6d7d752920d8cb1558c5a2c076c135cc60607306ec064238026c6975b243996de006014cefa0d4629db355a0fcdef4f3f77df5df7965f8506a479cbe44b5cbd68fe9f5f4035ff9be7e76e628d0a64f946ecb8b051c53b01c6a93049bfbcf8ed598f4a3d73db8f2ac8060ad1483c079a8277a8dd5de05744587de1b13c997315daf7173ef3feb6c9cd8ba018a00da96ba4e2ac29d0f082b85322c3e870b6e0cd1b39edf944deb55e6e92fe016fccc1406f2210bcb1e8923a507b65a06204d885ecb2ceb59951f140cd4b6d251ea632a2413e49c896ad5729a848d2d3d07bab102ded0d9febba92e661b407601c49783b1367818287ec1e52d16d50929b62ba28fc9f8937cc448abe4836b2c5572a8847761476b60eea52fd818ae18064866a3078f00f4cce96688f0f8d52422f4b6bc5c7201981d040cd760e80c7c00b37d269545e886df1be00086c3a90aff832747470dbb0cca38d2c91386331063265424a5710a2cd2b2d25348dd82559405da35cd7275ce11decded7d502bc88b2c71a86c31cf4dede188bb1a4dd321cc4b5301337b5e27f25950e50f4c580c83255ba9bd0cb09555b44ecb084e49868ef18595ff6f49b1fad352826d3ac41d02411ecfc91db74a5edd21905d765f9e0fa1de65e0cced2071ba59cb418a46ee2cdc041f4296005c2322e0984c4b4da846d7dcfa190575fa4103ad2216e94589dc57fc72f7388994aba10ccbdb06e12bc7aed7290ecb0e2508c8f9625141adcaf8d3c33c35cc6f82995b6d962f9d52ec243c54dffb2c6a35a5a38f0afcea772c16c7dc3b9b4cc6f0c27b907ec127db950827c678479c358234635176765baf5113177867225b1d44ff5d0e9839f4f17473d178498233f79adbe3c88bb5ef1efd07126da8d8e9ff0b81860591427afebcbef64bf4e2bc465125aa440f726328960f92e57b4bffb857669bb8175728c896c64aa00fa69309e0a0406b8bff31399ecdbf18153e675b958831e8acab58bf1e6cb4d17b44a3df570d30ff30d1c5484e61a238f0474f046f5b4b659507a021bf341de6416f654a1d516a9087ae88935bad806e73b9152abb2d3b575734408844a98b65d9b4c71f3d2c3594eae2f5fcc398e3281687afcb93efb0befe07ea16bc83891640fad5a6bef0b65fb81a220d26bb8e56ff2f15eeb6c01201d37d987baa113a2211a0670cddf3b4c2267e196f38e17dfa1a25a028649135cf437537e692a9ec5ed579efb7b847ae46eecf111fe4ae5a3fa9be06e767b9bbf38098076fcabb7fc9541d9eda7fe4d4243e437c20d26e34a0af2399183d95df6491f701657e8db51802d313726506685fb1ad3fa308e9e80ff94a06cacc529e676007e1edfaeb4d7db228c52e4b27c8cacca15b6f5e146c3821e43b6508234744b2c7b3cb81d074e3fea2cec10ea4689e84bdb901f5fe722622cf402e2af654ffadc1da11bb42835b4e7cbe5da2893673fd8758fd535dee74be033defe8916cbbf4283528f622c02b16cff488440c84a393c691a78464b6887cad422b122a3906210c09973c204755720d50e6156624fe898643f2f792654e9b7a4918ebadc0b17b3009abf7b8ee01f834267285bda2058e9fe352e141332d5de7e29965422e54a648944dc20b83ca2e4a1ee3263ca2046a3f57d68d9b56f37153d1a3d88d6adeba23393e8ce06182ba3d8f20d18f13a0280a64abda19b68e8fdd7847c12fdc3307dd7f78a3c0e084001855546d3fec32b685f2d953e1717a32e12878eb6864696a5fe66d5ead151912a4e1326657e3a504ae67d81585bab17a30ff8919463417c87d4e57c85630d28c18405fb5e8d50fb134f21eb3bedc31a4fa60e4efdbc9e278b2abc8d457d4033c01e3e3b286d58822944e06c1d2c1c54dc1508933794f585835400f4ba114c17ac2afc37a6815c43d0b9c5af035872a2243048a37f2c946e7f5c86de6f39fb66def04fdd8993b5e012d493e4cf1e18424ab8a5d06641e879c05a2e7ab694ae06fdb1ce333068138eff9f48f352bb0c854d9ca5e8b300ccc9f2d1080cf31f85d2471205739364295a16361436c51a9a872d7a02ce04fecb4afae10c904be9b977590d79cd75a28906389fedd66c7eefaafa08afdd52411ec9b952be9bf1e693e2d89ca7a5099d416d5c81d4e494d95028fd141122c555ed46dce1d825026279fbb14aa3ce8b0291187827c63b171c70123c224feca008b421aa6ebd6c9f0fdf0176962ba0c5ea3791c30c080eab1fc88d312a3eee55027e2ad3da51cd90f2b7ac6691a1535b15e450febca454e87ebce17f4e9a813d5319a74e344e0ece9ba6b0e9c5383a8244833a0bcd21c1f589fe57f78b8e9bb28b7e5c702db4701de7d3d21ca32dcc6f0ae6e02759ca294571e83a338d1595aec9790fd12027063b2500de794bf6c3659cab0fc1418dff72289bfd8137a62dd6c577c214721d11b0d04c8b67c3dfa7a8e7813af8009086593f10b62d5150ef0b9c7ab2829c128cfb0adb22fad76789ac8b6bc6263d7ebe35835c8b999bf8e0446284e88943bc8d4d485a9067c96923efb96661a6b1711a54266f0217a755c0961c41ed008e68e9c13991d3c84553b5a0c6b43001a8e10cb88c635612dbe66cbc69f60c44d3fec796cbba6d61272c6f14f5a04e18d17515066294ff590f950f074d16417c2829992acd67ffbe430f572fe1d49c9f5a7a557d88e55081720a29be17a14008fcc309ed8fe09a0d7763d6536ec7b47ef12d4d6fbb9312afd38ef46272badfe7f12154f8e5662903944b5e396b7eedaaeeef3453529929da7e553ab967351d473ccfe5560cf4d10b93de235bb29f212edb68ff2bec29f0e3170748a04230dc7f2284f60e91e96d5534fbc39a47c20850c63420f7c10a3de30d349c27c5ffdbd29ff523707254fda0c9e60472d79625de92a1adc0678b5b843c5e3dd160652b30f82c221368f3231b3583d9cb6ae33ec6f3d0c2918005d8cc0635370d65a1e971d5b7b63b2192070d2edfa31af6160ec386ff996a6f76e89c41d4ca143af18535181eb3c8d37d49dec9fd3d830ded2d28325e0cc313385f5fcd0ad7eb78ae374ffbfbc6e9d1d633e51ff9db5d6c574c643e5f1f8bac28faf98d091955197eafac77d21ad217e543b3d48806d72406433fb4e1418151b5913cb4e3cac149639485dd780cc5b18f6ed087ce9c16eb3eb92939a666e14cf47e2edfb852b9d0c02344ee93e31fec91bd985e7ac36122e7a92e2ee91349f2ada5a63e777ee748a91f556adcfcaa4c7be61f2aae5e2d5d9b48db0d5e9b08a9053002b52041a01a77bcc8c529bbc1fb9c08d2f00b2f9f2e04d9019c91fb3201001a4e89662fcddf63fbf90d1dbb9f03ebe74cf35c7457ddc052211e9fdf8eaa5d31e8cd42f2bedefd60cd0b861ef898c9d7a159a8ddf717fb8fc1630beec38bd775c4a8bbea267ad1c164e6ea3e7ae985e6566dc5249a99e7c75b4d6121a1e5e7c46133972c2b867eb10c99e93725ed1449a144ed18e3f13e692749f4d96edd7f8f98f13fd0e6949bbce39d51c9d559b38cd5c99bc2812d370d0b3df539e5333b182388c8f9e91f23680ae8bdd8e9aede4750793eb9229afa12296c7f11ddffe5ba27954d36da9f4959b84ccc78f6a0e5ce5dfbc4de16222a3e09c853302e7c8ef598417f5bb3970a87b5069d0711f3f76c72621b1143e38919ecac9ec2619d0bcd3fb7b241910c211cfbc33ff2d6110430e8a1a57b205905cb53fd3602d748af967678ee7c20070110f96c13754e8dcc0d6f7837c65b9f5db29c7df6eb692af7c4aa85c66ad97457a8c99c5576c76f66ae6fceb762e3c44872e871b6045bae2d789edc5614a785a89d856f5cc3a24402709bbdaed8b6fd4f0cc79b7a5708a5bbd20a6c4228985520f496b06715beb433ad4845b61cad0422a39f7bc9927f5c1ac72626d21e99c062df3290fb0dee1492f05fc7ba0d9ee69e32cfee2ccb8a49241546c8ebf2634c1d9af4f9fcdb1fd1fed017f8c5db3da8998b1c18a50383f63c5b8780393ce43f54204c008db6ed066787aa26c8b6e852e77df37eff5a3764ef45774cd185b2ce421ceeccadaa7307dc246e5e153459604db5673796a902592636d2c287222906c7a5c4dd9c2bfa718508427fa1be9085083b1f64a5d3a48db390f5478bb96f1b7c00802284c8229d71e08eabcc645c84a7e7ca4b6e3c74f0e7abed58bf412b28c5683c50111a46a8974f5ef14507cd4eea588bad4eb0e771205f2fe5ff0fbdae90934944b845a5dc99c81e2f22fb9327f10ce542a34290a4a7364ac81d9de5e21bb5e848f8132123d37f8a5bcb2e7d18dfdedb7a21166f74a699f10d55955ee955625c964b6721dcc52d4bba0ea9f067cc64ac6c0799b2602e64563fbd28b23f35bd275023fdc5c1102efff48e04860119cd38ea36983ff257aba68d3e76ec60b7ee771e5a28a9826748a9901a291685a98177a824d011e7d6c82db4833205791be8a70ea8c06f97d5afd7e57577c51a46dc53021629c4fe6ca445ede7384d5bc6040ef86ffd069598e4abe578311f53d585b89afb18450f44b89ed23752f54fc1ec5b9eb90c0cb9b98a681fc9306d758c9c0f8c3daa923088332b0025f78b6c874721730b3522cea17cc3605be1066c2de226f5c27d4525c59b84f9bb02ef164eabc76cc38a80140d0bc6e9c18d863f2f0ca2c7a306961bc9de3173d865f91f38b70e7112f16f9c839ecfbd125242f4eec20da262c83926cb04d7125e4f0eaf69f9e4370f2ab3b937609e0a9b54285b56eb6d2f6e7b183d1a73276fe52d7e4aa9750970a700da023e002cc52b0881f63b6cd1fa129cc43e537d7ae5742f8fbe3198ee83b7fed5d96f6754feae41c2ddb840a662a3408e5ff4a585cb65e8997ba724e04905ac4efb868b066ae7e53105408c20faaa246ddada2c0902788af7bcf25867522aa779af8b300dbafc23f16379bb56c8d52de01b270da6e5837e83ac5b9947c68a5f4866f3bd3509fd371eb24a3ffe3a13f47d8ea0504b066e9555a1df136952bc622a21358e1c50089f6ff1cb2e3409dae1c616b4e2a6f581014a8530b09ca3fd82361c06e61b05bc8989af91fec8261e793157cbaa81ee0a3c05a3a671731c0f1afe1cf32db10af124d95f51ec22826f1e0049bb33df85566803a13a1bd3bdd4dc14bec30ba7f7db4b7332c3c408c189a0b3d5fa346102cbed12d0d62df31d3b349c0b8d82e555992dd394794bd8c51ee5d4934bc0cb945cacef2f1fc866154cc90fb51d4b7ba01cf25975f3836872b40fade7656ae7b6e592487ee2c8058b92d142a2a874c1ee81bbd07cbff675d29ef4e97b2a4979284b3ad5f8ce63e45e290ee93342371fb9e413479825f1dc286accaa67c4d642dd19e10a43eba9175137c39d493adb2cf87e1da27a4d90f542c4d130507769ff98bfc3fbca014862d2929d3968029eeb3e3bee466b1517cd8e48416a109a05dc73a54545168358f8f7b9340fff8168a337cf94defa0593e297265abf34f0b346947e5a8a5db12d1298f711a6fc1f08bbb675fa67eab133b9adb87a9f601d3747da256baa611bc3f5ce3e1c625eed9223f0af9a4f75323a6fb9fbeb98dab958a525ae91f752ed543eff2b7ed7ecbaf7f44583f7f9cb27f4b8d6403d24d35a6cd31ede4166f5532111660124cd23739a9fa086e0832f805b830717a039fa457f48d9064d805b6ee894847aaa16c0fe33b3d54162d78d8c529ebe1704d1ca9798c534324c13aa6602c72de8c82f8f117a9983c17f29cc238db482de2b387a86e38d78aa1bd6509d74626eaccecbb2afb98bd8e93a61cf63151893e7b5b5343c84b788dffcab660fefdd1e43a00a6ec8b869142455397f72113e83278176f2e48425814809275d1bff1df0b9fdb5874103a654fc3f7501b550f852d9105b7fd313b6a667cf85dd85101a77f84203f5c3af75d846f2d393f23e25776d438be0a5aec6cb3736358345eb7057bfe9e435cdb40b1de2e2f20614234978bfa0b8241f74cd3ec71d6e757ad7e61e0bdbd24dce820fe06fdfd1335a3a82343194b1ebc03644ace16243d0c972f9de98c4bb9ee44d3488ef0210e98dae60d292324b284aac9144c0f6947932c53e72680bf41be96d7bb57b89aa3bca3077b1276fd8a7d35577821d878d62d20f75115d1c1f5bcd721ee7f0af2834d782229134f54343276d33bd6302b41e295e6a300250c0edcd6cb7bb5ee12d1bd2139a984d7f7d1010a17a7119b82889f75d0009e361291375b1add4457b6a4a4832a0d189216c5236d84a42a65cf7d4bd9a72edc478d367fec9d967f0dc7aad47ea606bb72d0013a11a0169c54421cf23fa3a6dabd91c10d858a9c667964adc9a09ab21e36612719aa5d7ff193a5b7b488615b8394913c1fdb0b26ab537c4d111dc585f096d4cad07ef6643358e87c1382aa62c7be22f7bc3266ad778394b9a411902df132bf22fe6c8d9eb99b7ed2a58d0a768cb7d27a689139429b68040d78c86056f207f0c95d5b282297d057e3e6d527d132747d60f8fcedcf2f25def58e505b3d6c71a925b0de2703e27c42cd745da2548996c7f71c71b7f7149da66de984e2d9a95cacd38ec9dab3ed6cd275226ed7f1d233541b13c99d9803f5ddee09c01812a66b457776eba87a9f87971b42cb205da383918ba2e0622d79e02f2522008b900fb075016419e7b7f025166e24a5704910e54b094c687856cf9eeb707e51a278da90604173a6b825096bf11a3fa6da00d66ec240bf488944c38232719dcee2cff8cc6256cbd0d9a7f30d2a4f542e01968fc26fe07135b3176379763e627e82383064f07107d8beb6440893d5e6a9041fd0afd19b9550587895e061dfbf22e94850ff77e5be0a26b77fe3e18c3f3bfbbdef130373fce025adfb5ff89bc55e17acf87973797a9ffe8a16cdc27e44f110e45540772af8bc7565a250b81f8ff4cd9bd99164b4fcd95ca575c672224baf2e5e59750bad10db9eaa095b9581574580d5524ac6cde5140ffbbcba0ba1817e11475c1d10460caadc18e175158f417f74bd2b7d0752cf51e75123e18d14fbd41ce4812a53927fdde6e5c2ec6cd4cb4de7ba61114c24fdb0fe8bb57b2d22d4c6a180a4df6280b6f23bad4426f8b75c7fd6e02cd26614674c2caab6f7682a7b2517f015c50374c2584c2e3f64617deb8ab69f3ae9e46b6505d55c1c2a0b5a8f96cb3d840127ca9f952c4b9c914e547af478f61b545d07126c0ef3e8c43dbb9209d5463eb8b7779bf106405e4c48e94562ee5982406da57bdf04c78cd629e312be340b9ea6baa5bd74fd458fca81630abbd9ff3b14971363e3b342f6549e2f50c666052ce470cc0f9d2c8461470b931d7e5c6a4fea499a1710b57b52c7e94575d7f8d9c03ffb16b787af2c3125f67015e84b618c2c07077b5d2fe3561f7c457baef3e1331debc3c4c314f73e568153aa6d4f1cc288ee860129af4f04444a7838bfde230a6263c3e196c8c9601880df32cbd314cdb3437733b8f55daf6c719a77ec4875a2fadd2f92d7295b01ed3e3ffdda760af4299458ad00dfe51309f5a00f776f6abe5af971cc76d492e08c2ecd836b94b4b130271c434f807e9f879d52ff54d09a6c97bab983a46b9d7a6e393f2f128b50249d10c07c936cc9ccf9e51342c84a993c66dc60da4055862fc69bfdc751f5408a2a0cc19a78348155c9d432befaa0edf6aa8caa8af1e9b3e7ff90269fcefd29d87453806c6832d42abb13cf62e47db82686c4abe8097d59a1b86c90168c8fa5bf6496fc56a88c4283db267272d7390a9982f6028b157928fd6f14f892df37ad9a83d35f86dab37e2f5fe7505c8e0addb37e4fa9386ba6650bce22e332392152fd8b17910ad3bdf2cc11901ab5c6bf2aa721d98edda38aa0eb86a139f540afcc82000f5685245b0003779be6ff285198124de50b41b5c8f6ffe4ac7b38cd60aca1ca2b65efc120b0f3279b8db9d6c2145394c21c833550330c55c9cc24fa0402f33c74d0e271a95deceb1d3b4a8bf5bc20061e2cba7b5b19729040ac59e8efdc791bc4393fd3f20de2db0b8baa10bc3f0f785849fec2ca72926cd1f8800b95c325c8cb3a8b9b46fe5f2d793778ef6ee8f87f2a5c46edeee43bb71f9005e1a362a2c92c2f6ca0e64c3379bee7b886ba7d006aa109f6c717f032c8dd07cc03d346708817eb144adb843d36a0221f8c1e3b2c2c1549ccd7d4da11e675ed16c0274e5eec6687a878e00dcf7f938461fd90eb45e502d0a464e68b202efe2701baf57b258269894c63b36c259a42847384daf96794b4d2bacd88973cf0c0284855153ead30b2c37d8655ce5cf6f87ee1e7872c972bddce7834fb8cf2b16c39873720704f4c993ffa5641f43a833b037e6782fb13320d76348135ab316030f9d053e844137047f2a343bc52e7f49347189c7d056d94112b99b95a9b006e2e69faeb046849af9e6a9fab77066ded790acfc8c7f6d47b63d78b37d7c8999c2b9b39242acf78843d3edd485e16b1a1c3704d8134c710d1fd66e4fc6fbbc746db7e83a0c886483f8c2a9410c416cdb49009b235cd963ebcf91a9d0ae67dde1739edc80be7b5c62d7150d8a48ad40b53ebddc77ed8cef8e171369e067d3ceb0a1351f44c278f3dc123de91ef93deaea63397715d8ccad789eb4a371588cc13b32f45484257ecc48d1b127b6d7fac086e314ecce625ee31ad3c26c2073ee1b7d70d0e1da6b089afda8af2a7321e7b5cca3c9d381037c8d7106762708fda3bc203a5f67a9fa5b2c156b835d5d8658a3716ae30963f1b4acaae13cfa886f9bcf9ac8beb296addcf6a1b66b964588e29eb225a05cf9323397738d7dce131dc3ed8e1a82bb587224a553292c1d45dd9a06b912394409ca6632bf9c72206a6391aa6dc1e553bf1d5a49943b9550c013cf86e90ec7c4c8765857143df638d67fc43fce28cc74704a1797c7db25563930fcc729227c0360e26e5130703b978acc8b658a6e5928696b8d1d33c541554a284f74d618dd7cb7898375dafe66f76db19a8e1efeece400b5f1468bde853700e6c06f61b12e9bc0f0bd9d322d515a39dfc865a2e098cd3f078b84c7456d79fa193d15e9e046730aa2e482cf8246aaed03d4612da08faf235636f4941727e957b0416c83d7a209f432b629b5b643bbd9b15cd5d3e88242eb9e6f9c3d256b5f36d0f42fc6e4f2ada7ee8d47e74bdb52b73892624c4be66d2611075873271979bd5816cc8a7a9f73aad191bdb78a38ad879e869c6c8153fc9830dc3bebcafecb49a88dda22000d5a2067c7f4508725f7e523a0bc2c5d55676120785ba68e4d1625bd342ead9d6c3ec25242f003c60d25e8e5f1cf4d005333585af6e0fa625da082220f49480220bf74aebda5507f7bedf9b99ec6963341da1e8a1db89d980e4140fc3864fac7d25f9d4f08fa5fc442bc469030e4a9d0aff49634ef601ec25a04e3a198ce050d20b3102e2228b28de057000383ce892171fd837495d95bc6634445c8d0f9790cf02b15dc9a0c3c5198b60a14b3d80a33aeb7868b45ab74e93dac18b1d83dd01fb937afaccda74c326a887a43441201cd02c948c948683c1eee0eea8247d78e994f87e92e4f145390d6aeb9074f184c3a459b803c282700f5734e5e46a18d7d71b70dd2e2035fc65226245b3be85dfdc7bfb20845498b34905f88a693dec76b53faef5f9a66ae3ba6ac5a64cd4374a1f0964f0f0550fd1a5744b141597cab4569cd5c6d72035a7b01307938158634139916319e7bc27cc4d368b1b6c38c90abed58a59397a4c580b38c39f820ed6a3448bd466b0ec3ebec7f733a37b577f43fdea81df2a1ae91fd4d4f01e30b7ce7b905eb7cba9d8038be865942a663ef582e920aa317e717bb9b090bb3060ff12b49b76b098668eb55d3a1a81356b2af1adff106db7395954b78ca696951a07787a10e15d572717ab53c16605eb386a3e76a385f7a4aaaa50803d97452963ae248d8bd1485882e1aef3eddfccd594d666cf75e46589de26e98b96f4ca08d6273097b9643a339fcd9ad05c916acf09ebe0b3df731e32b1d21bb1276c06d8ad989678bc4fd680354daf7eb61ad72a9410a06b0617dab5415df3c87b6f8a165a0bf31a19e7c51aa269b54051679ca183451918d91d5021812d1372c8d3c319ccd727c0ae4e0bfb3bad6386f3af1f28dcb4f37e6578291cfec1c91864674ef1ae1c87ae1464811bb1892b2c2892a177283a879464071b197f7590414ac1de7e4560c302242d169b8da57513a766cdb10f263501d7dc19e0c2906081b9efca059248b020bd362eb16c57f533e2f81769fdd7c0a30b7a68129ecc5ac62856aa2a16e6e00d049aacf5447b0264a6a40dc40f92d5bc2066140e7c7a5892605d8b0b632badf9c1fddc16d18e27b2ffb9f23a263a37d3997e7bcd4c0a9ebd319eb06deac94ebbef46f6dd6d504a4fcdd510c9fc22b785c65b482ee346fd7ac6d4a1742166d9587b8d3c73a1af2d4e2bc03a706abdf7b87eb5fd14a03b0e1ea29e446150efef1a86e341455dbf6782bd0f64bf64ea29be4337b172435a2fcd603fd85f24f82a958346ff8742aafb7800d9b0d36c1b5d75eca62fd908341b315679fd177d4206bcb4ebaa178b030ecec31f0396a08b4ea5898f00b76d7809765458b21e1def77ac90d46e7519c1d2f4165bc539833b96507a95ee0be892e2c232a619c097f6efd6666191b05e953864ea8654d6ed23b0475e699888e4aa3f29f8afa5cf38200ce5e5e5efbf2f8e7f46d65cb92f4ca477023a5de111afb21c40f8bce46619af636cc7052e16b561d56a2c98dc05037a16fe99e54ff87eaaec853e98c6652e0ce50f71e774b02db6858a4abbb1d9d843df3ff47eaaa7ede213dd9417622c06e7a71d6bf8408d9744feed22f2f14067eb7dbf7dc2a5aaac39453462d2408dd53f0d743dca0657529cd9424bd7e7ba655037606eb3229a111c32456099343051c3d68375ad270236fe58c946b4583e95284946de005487ccf9d0cbf06e34c0ae552cc0bac4220f14b4f1b6af7173307990f7a50399a5da776e7646e187b26f21fc7c7f43b42fbc5ea1c20fd4f85542bb672d0bfbdbc602a406dba3bf2c7a071b212ab1ac2e026ee85414b92cbc0eff154b206b234960038a5fbe1212143caed67d82d9af9a77a71ee03e933441216800137bb6b5f3b6ce2785a20c2f32474004679311ae1aa0e79c9f5cdee76721da72c742b1abc27e5873fbae9673cc1bf044dad3c0e8b4983dcbda79acca8a3abbb9ffb96147deade4b6b1a5e1f5d40a71efb91fffe7638327c53e9929b2bfaa5af64ae9a085a198b3d9d6e1ace6c3f26f22626a3035619351fc750ff5b0661eb1baaf8c78adf17a707e8199b67c30cd5b6f2dfb2e8ee56858b620e57ee51e13a2666edaef0cfcd5fc7c44e4dc3b8bd99857c89d50275b0b364540f3a1a65f4a1cb196048b6ebb24750876087839963f2b43f945d6f16d8bea583d16d08b343de7eafb76024bf81832fecae9542fcb165a13104294f320aebca98256353f76f99e71915e2b281780830f9840b84ee2aec57ce24dedd9ebfc00f5ecf8edf09a6f73e96de6ca936721dc31ed07b57cd84634b1d80c6cccf9cf146eb19e9ed296925f361795e8da2ccd9e8c3d42dbeb79e153e2284b3c219c463e387dda25eff0f08b5eb05ddc84d19521daf7f33c6c5e42921a79ff244e340fc4d616c0e2e29e1f757d328506b79d75817823a5b1455c5793d5651eee85069b20a8fd5029d46bbb6bb7f8e17f71ecd7ba10808eaed32112d8b361e0cf3f3faa83e7eb87c93fb85c99ba68fdc658e2dff991ac51adc127d72e7b4eaff6c16b1a337096785560d725679b0f6b82e9c9c408f53016775e894baa14ab9a44440d1579e88bc2777440cea85410268f404ce577362a44b980551e5cc1adaa96f51ede152a81b2518b1720be5fc0009bb40e4b024dc678fb7cb3aac9ed8390d794daa5fa218e9f0c3e98ee4787d91f09de0eb497b18cff1c5904914a1e598b5ebcc2037352777f767015f7eae20c763eaa408841c1a3df5389f74b3eedd505e172bde281da526e300aac051f6b687c6f5969baa34730273349ce1e29f7c54d1e911613dd0ecee43b10528a4305a56f6d285c4426dd86c32065c61f4d64ce5e1cf6599fd4d28f712bd2a609dfd54771b593bd124f3a3ae74680cf0ccd6eb8a380ffff51d3986ce4a1a5a1a5f03723a54f6664601a9d1d137567c966fb2852cce3bd905c4fb8840ebe11dfc607b8dafb9b3f0724dddb1ab7ebcdbdb3cd18e6adc54c12357cc6dacc8b37b9f86ffb4fab35e7628cde3a94aa46927639ec82a9540d8e439dce55e6663809c3ffde8147780bd6ba4d5400a660c42c3bbf2665b3a4cb893a66c78c6e8d50512ab80c2ea9d223db970d1ae6023659fc522ecd70280b7ea26421df4b389638d0c395518dd2057f0369a6000b16cbca544375ea3afcefd7eabb9ddfb88e89379433013cbee29a9fbcdee65ac5f8dbb69eb4d50056713ba1d733981617deb1d4e88271e8bae57e6d7c23bef374f6fc990b7b54d1f2c7f795a6ea3e01a06e17fd2be9f795a06d20bed4f921d414d4ae4de46aafd057e55c6820b6cfb818ada8ca7f7a6939cf5c38b8af37981567f9501a42d961df2d6d9771dc0741a83e3d9bc8b7d65c6d2e7d38eeeb918fdab6ca75f7384e710c10ebe39c039f1894629823dcafd2d1f37027e1c11105c2838d0e8d76d4015426cc0aba17250afdbe7aa57b79ef7ad08e2ddd987b2ef78544c3c1f622ca5bd458408be555381cd4aa4b130d60297b2c65cd7116fb3cf76c5849529c90c0dd2f10056a354c8d95809bfa31a91a62b80fb8a3fa109f52a369f651eab578eb29af102b866e2d279e181a97ed34f221eace80815f22ef913bd9f4068816f53e56e5c628ebc7b4d7716821f7bbc803b99df6019335ec3e87f0019f1d853de67b8612eae9cf380a011137ea07f44b58202800bbee7db19879bfb9643a12aacb1cbbe9f1fa036bb7d31bc122d9f7fffdeafa6c7680ec29e6ddbffc75e0d9aa20aa1c6e0790030fa19968c21e7a1f84b8193d1ed7ec9e5df85f970513cabb69d4caeffecc400c7aa613987debed1d0b4f87e44d843abc6a153a73532c9b8fa770fb17a4ab081349f73589e7fedb4dcbbad63d3144a8adc884edd8fefb97824908617c45ce5bbae29a073c67fba38467781088ddc8f3c5194899e5387ef4037d66379eec13c04dbad711b2379d465a267c2b1ebc2e5e6f9df720139030659074ff3c260280a9afd427169da09dc4ef0d970adca424b96f4f64089c945aa2adf14b53d9007e3d3f5f732a1c4ffe5b426eb1176145bcd84af8db27095d9ee7a1f264370241e8a9663ee1b7fcdb5cde9e4b5c39a93279d53ef1b58d5c7d73bd088280f704897fa28c8eabde348433670de80d4be9f46946d6593c7fad4cd7d4aa0003a29cd1f808aa5c66bda5f7f3b010cece8c4d7b34c16405c9c8cff267fe000d34f925aa502442e939e66dc0e8c6b3d683e7422bbdf3a094d85b5dbf3a3779949f62533a1ff1303ad85a5a5f3ea53c3eba3abfefe0eea3396e6b3216316d4d0b597d6b699a7f3038f4a6a992496b66eb738ba7a9e2b62b3a03dc8e88f49f93ded40892a7b8c4ff1bcd5cabeb61101bc04fff4311de95cd79c6d352b0884e0854477bf9cdf9a52d6b36b7562563c4b14b02abf366a918892d58888d6ad0901077b3ed9b4cb9edead8047a9b304dcbee938386d4fc8fcf4741848d2ad02dbc476e92c06e3880f5b5caf6bd725ad701c39746e333bb0cf78b24e0aef7a149e22bafe468a5789fb7fd71f76be96fc1da81cbb035ac03625ade979b3d0350d09a6402f30d521d65ec1b248b0623c307763f2365c0269c7128432f596162ad635f731bf8511552d22811c73e9826fba6893bab00fe287a2c8686647a92fe4850d6d12959fca646fb3d57847986c43be1b9f8f296621025e8afda1f038cda61e1a59b84f4eae2c6e51e0bedca1c8a60fde8f1b432d960963df2e06fdaafeccafd59fae2342510b275724acad09eb379e14ea882c3a6b0709698500e035971409b2a00e856b7c14283332958c4ecfa8c0a1ae1b7b93aeb2a46c70cc9970a9fe38aa7593f227e457404ae31a13ad42f1aaa2b7f10ee09a1dea47b0a86f012e806922e20d0cc7a28cec54ff0718ee751f7dfc016cf41f3f5f12e42e3ce9787abedc00a3074e0eee8395176032998ad64106f913324fd8962ded1160b940b139540e47d824fa5c666c9c5fff32e74ea223b53c1d72b30187ec0ca3189db847029ae6f2e6ddd622ea42606d98f32ae16394f6d71f5181c9608c72874c0b871d061d95ead6d3ab96cca79f6caee2e9243e01b4dea6e715c2ae7e6664ad7f235a8b1abc417889201b33f6edbfc1507bcdf7d1bd3ef379a1ebc3bacbd57bc941613d36434f85597fc691c08f6ea77ecc0a8b288309dd1aa6ba5c1e9f680a9d4a444a59d4a2ef8fef1097fce4b686f8ac428359fbe33e5713b323cfd069158343df77b3cb0d779f2070eefe0e5d4fa10201aee61e15d9fd5c1fa435ed9aa1e69827f5c420a09ecb69e82a76666493489ab0ed35c4ae456e1cace652b153d44bf3c449c7ec085f55f7c5fddb49ffc279918b96ecb5c6c0321becfa51b2c3df00b07ac225742f5a6eea198dc39f9b5cf8c5cb2fd5e9e8f6f14e054a189f23388d34e61d8e12f40e4787120beaa8c6022800a04373ec15a8fc1592cacd8363e96714afef49a8aed908a60e89b7d89ad37bf9ef70518179cc87831aa12c23f98a0b4f28dd71b5b5b97ce7cc88b72f058ffe7dd3949a8fe953beaa13e3857a675bac0f29ab73927491c1d8e004daf57f85254307c18132324e0cbdf8a930e0e25d32187de8a32a97b6f00bd317e05f45d58633c6306f9bfd344ccef7de57321d7f36cb59e1d5d4ae867c56b7d37fa7fb8cb8c479cfb8d3869338bd88911e62173a58a943518a8da504b2d54a305f17c258c17bd1cba63f85c339af3e2cba41969e6444fbe8b888f1ce42b4c21b23af6a9165c0f198750412e7d6cef29fbd9e50b45e9ff138510d67d2a3bf1a2b225bdc6b510eb507c36e950bd9ab55a2990c951111d93a37abcd50c7bd765b1eb4c0f970c7def01032e4eae5dfd26755f5ab8a87bbb72ed37fc7f8306c249d634bac13c4ef6a0991d7b55453eb807ebcee19b244df8a6970eecb76578b46c23f5de1ca9533d6b9be00cfb5737c8b35a1e9dbc8d8339ce415cbd643bda7b1a8a328cfd26448affa9cdfaf4302b9cce865139fc83957cb0d58fb96d8ba9a8c31a0aa89bdea69aa24457684904f03258e00471c82be685cd2f1afd681665e22e5ecb6c5842446fce777d7269de12ff76c530bfd2b84086417e811dff0580388908894c9b8e1c8674d71ea11149d2a98abe4d9b451fd123a6248f6099eb77b57e1a2a1872b828421c3293908c81e05d6e8c8426691934ab17450f0092a5f58a7df7231166a7446ddfbd1cd05215c2fb2abf9a9af009a73b16411a48a0c75b0b5a74708797b2c37cb5ecd8a9af41a0d3916a906c52e77a40449e938dc4044f0ac9c3d1dcde7aae52a808a3abf76d31eeeee5d10b71fee7e03f7e3d3067f98af56f3540f55129d88a706ebdd604a540f3882b061b70bbdb04e28f29ae272b7908c8bb9ceed49690122df8990d8b84750106dad23f45a0b801c55d17bf44bed0f61d0db4c32c9e708df8d1bf0e0601897f5a21bed6ef423c916f7690eb5da51b15b090c876e1b1134fd43e20999f7935934927115777204ddb5b7d437221a8daa31083a86235174b264c5e19b2a010abc59dcafb5e78d1620ad86d37123d9d23a307d6ee0d05af0fab8b4bc8c033ea5a4dbdeedc0e5e053c35b86f7e3a7b71c76bffb613d5cd8e79e88f390987847b670ccb25fc18a22252903b2c7d57c74afe416c1fe5e92ac4c99fa89e076c7532faa958bd6258916188295de35b1a355fed136028b7fe8477d6b6ac0b88a7ad217ecd87f466d0a3daa5b926382ffb030daef6fc292802d12579ab6266fb5be8e826c9e19bb8fc80f5b1010915d14421f970c93e3ad1f8a5d990345776fbe55b486740d75ab81cb32505fac124f284709190f8bef61e574ddc7b7a15ce452005a0de0962c3ba80b227260e6b168d8b4a9ae9d47122dbb5893fd9b4f6e91f1a83d68e5a99b0ec9df7b4cc8ede525095cfd01f6160023d0104df021829c8cfeb2fe37e9ee5c6f051758212f26816e6c8aa69493feaefdd2f2b5e8a893ec8e1a9e675fae9c1336286f3f8217706178963ba63d6f567187f203bee644afcc21d42eca0c6079c8cdce33c9592c493b6d7a908592f1ff42646978788a7e545c62e5717fc5a68cfaae592f3b68f300ee8ee3d3d88741fdfe4795f311bbfb397cb73b48535318de9bc291b47f43c9e49270c5d3af3ed68e022d69ecfe387c043fbebf250ebd020205fc950883fad7530746c0e98096401c81eda66d6b9022e68da67e239ffafc6be9b88fe81bbb90a3137041082b1d5869be98718815c8cb57190426dbd6d6cecfdd28a899cc327c4c216cc5bfe3c6e62f0b195bef92fdde7c1419796431a1c6613e3a06d9e5135631b70fc63b12fc7df23f2104ce049ae26d901e49769769d21f0e00150c2d3bdda9dfd35ce1acbc041501b8815f00e8b56c71e9f4015968f1a7642d176bd17b798152c90db4f139d3f36667aa68f8199dc4f4c00bc43e206f9bfdc70a4bc9ee99ab7753e89259381a69bf78455dc2629d76b9f6203199c61157f606ceae9809346dd849085b4f4cf35f15f612de413dbab2d7fb0f69b0216eab2889004817ea1193f0f070ab2a6e68c3730095a97fb44ae8a4f4d8dc4a68babf8755518eae78f4d207ebefca172ae092e807b1fe85de1be6ae10dfa33e8e3f71714f2c8e6bbb2d4351610d989ddf992585a9fb27756fca79a66011a1cc0ade7554309bd96733fcb87f28ef4fc73796dda1fd94100c2529eff896de276cfd96dc701afc570d0fd4a49239d525dc7656182b3c308ba7af65621306362d01d7ac3fbf577ad1df65cace9b020bd1ef13fe81aa0ee1eeaa1dd06e79288b2ddc7c24ad4128bfd3c6badaaf0d3a7158444363484a6eb655e3cf15f748d6ec3e91ab8975753f1c027a6477619c3ed82bdcc2d79866db8acfb774e36cdaa4ad491e54d3caf9e28d158ea66f6587b99a8a110bfd38afc4864909562bb46e09d0587d3bacc5ee8850a98a81f13e80a875d594c079a32bced219e31c3f414bdddf1e2b14ca00879429e127997a331f783972e13793b674aff7a8</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">study notes of Secondary Evolution</summary>
<category term="情感" scheme="http://example.com/categories/%E6%83%85%E6%84%9F/"/>
</entry>
<entry>
<title>learning gaming and emotion</title>
<link href="http://example.com/2023/02/15/emotion/"/>
<id>http://example.com/2023/02/15/emotion/</id>
<published>2023-02-15T06:07:10.000Z</published>
<updated>2024-01-22T02:25:56.457Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look."> <script id="hbeData" type="hbeData" data-hmacdigest="1a92d6ed6682fcbd333538c1e566a44b44d9f35b5ada449d6857ae385ce172d7">10d79030e8222445804370796b90fca1b3149e2c2a0f36d6b4ea04e548758c21409e8d65d78f7c803d85a02598439a87230dc7e7b7b58776b1f114883d9ca86f9bfa13b1e3fc3703c1e0a2a00d342a9fd23f6358d56391b363c25cb31914079d68bda8cb51a92c129cd2d10f61c2e8f614c4eb68f2db639a7bee5523aac40ad4e9bfeac03943dbf38a2e6e192db7eb188454faf7e3ffa8d4d37fa2a2982bc530c9025bf19fe67dbc3d9d4174db7d7db3539cebb55af8da1c4186600fa901921b7859327a268a8a90479e0e554768de89c8ec269b416bf8ccdfb688dd56d5c4ac20fa9dfab172e4bbe59327ca2aebae2b0f964c357741fbda2e8c365145ee83bf5b1b6fc550ae392bc05ca89e2af2c2bcbcac4af7991746e245bf883e2e91ba797fafd6f622e73e930397511d7ffcb35aa1f07590677e66d28b85f1727d5625b6769119eec7220f42e0c921a77148a6dfdc78ac62b321b6a69349249932928824ea15181517bd03f76f7c0fccb3d103738fad5ea6e2b96ec8dea1890a4046b6defb1d220fee7fae0c162775f11e0ced0d5121c1923c0ee5b8ce9cac27ea97fca30ee8f8c38c805edd795c4646fe00e303bc237fb6829439ca4d61257f1c9ea2acd6631842926167b15db16fc881b0b4ebe7736f9d378d8cd683f1b47f6ad89d9584afb50b3b5955e067786ad0fae73dac0a693e79cdb1877baecafe0dddf2d268b7c63fe118df1d5ec003fc31cf55efa8292e22f065d41ccd96134330518a89b4edabdb6eb4e71a9811f1aff5dd1fd5bec763fe63c7e1b82ddfb9ab40b690b36d15bc7a27cbba720c965d6f47871b1eaec235f043ab0e63c13e22f6e29bf743ebec5d28d1c09b577627cb4df7af2218038681a4567c48d7930490201f115c64bd4cf0dd0ea33c9dff9d3fbf7cbb12666e207967a3545570caff3a6d3316f61cc106143e782c498a94177e1efce08138d1a69b34349f2763613f0ead29cb10d33eb941320e7e17947b8679856ca618bf47b4cb69bcf891e047bfd39a8d629f23d21d4ac7f583d4240cb5a6545791cbdbf6eca024dbb047630c253b82f31c997429c8d2fa893dfc7da8c951da2211c4409a8d947fbd005dc333bd95be0adbc31513ea455fc0518323b6a89cffc2f2b2ac3d20f202150aed4f70770aa9bd7f92ba353b6e69d0014c2640de1975b6b8adef4ea4912d5b0536533ceed1e873607bee053ca14ef102c58bfb993abb8d624377acf5f809057d32c316dba02126bc39f65b9e46f1f3f4f9c439bcc1e7da42955015ec0375121c1436f122b654bf640d719673b2e188dda089d6f30e4349a023a2f346c1ea0b87ccf80990f309aef975f5e4738923a517d7e2a24cbf41d22f22822d85ee49559ac81bfd0deeb83e90607adc742f9ac9b2d40a218c7b363213a45a74300519440700f2fdab4a9a36433e6417da0c340f9c6d1261026484e6999f2e3c3f89c5f3f48c9094623cfaa6124990fd663194f74f586ebde5f0159b2b4a3e9203b8267e2b2f9413d3ce561d22f7f6dc2d20f1d93700be8fa13302849cd6a38124c393b994d91423fd9c60e8f188d178f6704724a6e1d7a8c3b4048c4791784f54bed815926c9dd83cb694017f0c609db50e2e7345a2a115078418f1a3b04296fb0f696948f98da0110856ec76a13789c469213ba60e989183aad3a26256b731991b445f6545f920d25a48fa00e7529b19e7b14b21d068bcbd7217de5a9cfdb36788cf30f1fe3a2ac7df32dd9e27618dfc94d60338ede69815776b45c80ca54de6edb8db265e7e92e7c1f93e2dfeaf255d45434ea91504132a2091808939838643a3cfc0b4c55722108a938143510c837ad40cb2cdf68c3fadb26bc2e254127b93d1f2481518e118dbdd8183c8b3662f10e7baa3f977c33839a00fa7e2018b1afd596308ad5c2fa0527047f4fc4d260110e6672ecec7abf7b8fcc4b44cc6a1962c850cff7cecea236ca06daf99f59dcb97e1a6da03859526f9987708eb8f4b054ba46ff0d02ea6f48191d5f7f15bc810c151ed711530c9313d688b8871b816d1b7568f6bcdbfb9a774e12cf23145a849383aad684c373bc6701baa71cc771ab9ae58ec3292c697f129ed9d42ab4b3575cc984b8173a8ce2abb91bd8b2da23b68477e49dd27f76edf08bd2dbb1c5f99a19aadeda9e0972eb99063084bddfce7f8214fc046dbe85cf4de3db5914b861133e05a2f4d3c436b275bfec087121e50ab75d4ac884994bf1d73d62939275e3ba6e55c6f37bc76ab5321c5b5eacaba66ca7ce1422adde39ae5ce34b78cc6bae1a0b6dd71bd78c1e513e534754fc80a9237d1e925bd4ea526615fe6ba36c59a22af22e313e2343deedab6f9cc637a09283e041b9b6059649e43de48715d26b4a49f397f0baa186e3489231303928490c4ed98d2090c937e6c79576ec631a086f041592b302cd27e9b44eb37b60a431faba3c791cff10d5aa856934e7b399eb0d72cbc4381dc63a6c293bd26318c196bbf95f3c77a4f0e44f491cc962969da998e90d32be7bc381315da3158314ac59131077d03f09a9d5a7fd3c18f9163b6b23371ae1c406543ee6c6b9fb6a8c7e8e66d9fab4e23282e79d5f8fca60c3dd99ffa52f72d7a4c388eb6645e64db4960ff932ed4d6a82507a19bfa7b73c08218e284b52bdb816b445a4b54461562192520fe94bbdab8dd4a71aaa1dc59a8d419e17af36924c9036c008f80d888dbfef1e27c9fdef90a3b51a32325a00cd9ea9c220297bdb675bb0bcbfca4522d7c80b12ced7110126fb06322551a91152e3e63f33a61c3c45f270e5d0263bd9dbd18f4e8ed080a36474fb4646dd3840f8732992223dc76d7766e3463192327b5a72e76f831839bd061755cba496c7ad97b72fe1575ebc31d8cd696a000e9184b0c0dc54a19995a0f09533c3097e7767b0b1c9e28fa1f9e21bd5a114abfc5d61d54ce734b0c76113a1f449b614fc5e24ec4c7ad42c224cd83a3375e8e3f17703388fb5bde1de06abbebbc28736797f468ba1c2ac7283d409bb9a016439a7554be00ee361a1d174ecdf38303e8ffbbc0e590bd30160be0cbfa32377b6a2a1cb99098363137d80c1c796856405b4408d884a1c8ac18233593af845eaa3ae661985e21b400a2a8e73cf9fb40e304d56152b90efb86ae408bbf2ea09f257cfb002c263e29c27c5a710749af0035984dde24d0241844b324f5dc85e8d49b9df6638d446f54d3ebe08edc0c344e40f116f2739538f918d29c43f1fd429e9ce5d43d2115252fe07bce10a6d0e9c401238c81036af81c3c1e3cda48bdbb81a05ffa74e14080e3afecd8b5dba1d97ee4ba3e7adc9e138f705a8f22b3f56831e539c5828c00bcbfb5fe7e3f21c63bde6b4de71670d7c4e71860f31eb0e2323f5c2f5c854b2469205c2438656a70d5ff285cc5bd7d12b797f718f10bf25341aa3e7d9eeedab7209dfab74549df5af7bb8477d8f404523b5239a655636c809e476482e774fac370ad0b07a940d4e64929576b7858b24c0e9b349c5a72fddf417d101934fecbd92c5c6fb1ef39f21c82ed6f5df5b7fcd6d282000bd98ec9eaf6ed1aeff8f5d4facde8c696d4a2a27bd62276540420aaa57e54198c1e058bd5905ba054f21b65b88c5c90d3546851ffe4a56cbde0d508ab085ad4ec72bfb90a126e95dc5b885a212d83410e7fb3f2b52bda302d4960af9bad7f37ec877604896aafca7881e9c4cfb155dc57849904e821570ea84dd5010e8b2a8ab5643789fea930a8423fca6b35150cc1a2277a622d72f7a5edf0dc98efc1dea8a7109aacc9b6f891dcd8bdb939c3ad5c2ab87cc4c1609f8af2cf2a296bb46ada02d918c651c1bb95136ef233663636acdcc4936758c85e5d3d7207498f02599f2472880bb93807d38a1a7532e506c84736da387d01ce3f48ff364001dd8bcefaea8ddfd3833280deb88d0b756b62713f925e282998a306ce6f1abee06b75b8c7b75a1dac3341f2dfc6d254e79e38b1f5c02b6a52bfb7e97c0db57aea417212857532ee2af1dd4805a2415123dbc217a3ae684465b979c6391bae5ce7c55ba2312b90b150e1ee640b1c998310d5737ffa6cd06759789e29820ad2ea7d672f81b2805e17f8ff7bf1bacaf12941c902ee08914bb72652ecf1003e57f990ad7c33f316c4b294792da623859b9e3472c7c9850d917cafaee935d43b93b741cc8f494a4241a0ab3aec1266886bf122c466e761e6ae79563e379425d3664c577aaafcc3e8ca19de48c062f6ddc958f41f0d29b10e2d30fb769d213172d422aa528d6b8fa8742340f34f482b0e25e83b057d2be93faf1d3db44edfcac7fc66123af5e1810e1a017e0910c94c9306f042bf97d0bdca69428a30710fa0154809e46873d9cdf0011d2e71295437bb793fc147779d88fff928f2219b5551387c3b4dd0cfdcf0d8890ad52cfd1187fcfd3c5a2979afc562525ca97236278eee9df5843292ff45cb0c212908845f589a148ccfce298e6f063ffae7fa2ac6d21499ee57d93dcfca335c2293665815018b997c8460e94d9e66f399a605d830d06f73755d7e50380e6754d6383c1944ad28f38e839c00603a4edc3158ef79b016246944de9af6734eda159188037bc9af417db1932c1e37c6c9e50205bffd22f6ff9b85076c646c947292ee24966e443968270e382694fcc3c7f59e7a6da4c4023abce29733be355038dcc9ee532abd6fc043da497b9304b5cc8f5d2a63c20b9aaceb8e9bdb75ed900166f0a4cec96ed8f2c7b131d104d30c240002983457a7b2a366b44526e79f49fa086f5fd0fa42e94664f1e589a125327ecba776032344b581f07ad5561f248a7f175e41be67a3984cb1e8412c340522b1e66dad09bab4d6ff86eb0ebbecbb4a5079d302fbd26841f858fe27fe740f264de4cef03337fdbb44e593036f531731aee7ed55ca11bbab0d15d6b1da36505f02521a48752a149706a70c1ab29eb224e6c6ad0f3526f13eaee89c2ffe3d44c8acf04ffb82b5eb343ca0750e1054f8182083ecd06772bc8af1d45424df8aa50f9b773a40e05311ede0d4175d73b28090044157c7f1b71d8b4bc12a21b34e255bd6c5b1eae80b303008ada4f902925b769600f316935aac8546fac549671e0e963559f324328a1ae293055b1c618acd61ae1d650a7d0553d872394eb4bdfee405b5128a95971dc810a008d9a6fc06834d76201ecffed8c0d46df05c853f26644e295de41c90ab3da061e9f6c6be186050b40a07a89558158ad62fe7c90e47cf26f46ef000cefd6fda2fed762d89de4c35b186bdb5ab7454239d2ff8ff305d8ca9088c5e7297ed80bb333c3baed159fa7df644548cfc144b11fbcc69d08e6e6c70ceff8cf802387d6fdc8c2f24c468cbd3a3003777a21f0ad6cda8a6cf65a892f4775562f971a43a1b9801e9bbfc4b08c2846a1af7dadddc4fb782030dd9d77fa573253dd3f7d7bca563f1cc91583e0dbde7432b4128c347ff13e8a7fb697ed1333fc0c152ff216d1b5eb92a23995bf0bef055ea27f02b6caebf82f820d6bdaba0e1b9662a2032050317f923e5c3a19d3022dac2ea75d2f8c8e57c4c96623bace75904d5d6305e08671f04ab628cb5c2d775ff55ff01148ff038e39b86f757b762bb6cc847916474339ec03c85b1ee48ad37b62f605af56eddd45018b8e901d4a10ff575966af0c89f471d4925c8282e24c60e3be3d4cb77e2d25968c0f9d1444e9c5de094c7179a702b2cf1fd594af1c7318db2b418c6a5d0b1bf45b126acfb3662004530f1c19625b694a943afb4492f0bc9e75d3f799f72e1127427a73fe289b097f12ff3c20ae644176fec90ccf085eae21a39fd0ec53f321dce53a51bdbdc11a7e5bfc5f357ab7f5ce421fe3a6dd842566dd429474f8b70813635ffd1157c7f04b6891c24269a0e5c551dee243ddf3aec2238ac67cbeab7bd6b2bda2124b37973df506f9ba17bde87e25b4d41b01a59eeaf4e708959e3111bc6fe3495e6d2844864463b1bb15319f58e8fc17ac418a3814403f7608573e68fc0b9cf6c347c12126073ac25046ee7a9a7464d2de1a9d3831e1b8ac9fabb5de9f4d41b88640dd5dff4a54d5b83e01d6273b7fe7b5f24d1779e1c0638d963154b098633cbc62a4c9a88f9298d5dfc378d8183e3b3f59974cd8ed598592d0a5e6d78aea761b348861502de9484953243d3bd689d6ca2db6ae0b6469d41305c122646996c91dac212ef83f1da8d17fc0b0a173096a3aebaa353fa763f4695a06268d7f4bc0d59adb608fc0cc3814b4945656d183fe6ea7ea85a721c8c2ef9e7d090e341979de3454f25d3cbe5bc7d216132ca70e2fdc4bf6f6518f9c3604ca45bfee6390f23524e8a74a697f13c385c3a2771a8b0992d6eb6279c63897706018446f192c22def5902349ee3d3b156806e2360cd54a1011d37fc263826a847a6b2d585dd2b87d7a142ccc5003ca3a1ca710f58614d54ae1d5345c4baf508c19e06a2339da54b43517fc8db6c609a907f50b24fdbcf80094d43ed296b7a9fae8171429941c1967cb852708a295169c3f0bc6b5a36bb49c63f1ae0d89e29a3a761c181713c78ebb4bccbd2f4b4525572ca010e259e4d134542dbcc12e09a037aeac6eae47d40791526d60f399e9c5835a380e4e08742ad6fc4e31b7bf4debb879f0e7702a9d825df363ec51045c924af880c8205a0f48a923dcb1c2ec6f2e9162fb1c34e8d8aa54b0e618eca074699f8ac3e9b95c2eeb6de497c81fb327a6d485bb1d92264587f97ddab47964080831ccc7614a32c6c6385ad355bbe0d493b4941436b41198f7128fb929481238ee17d8f33691dd00367e4f4322e359c4e37518cbc75543808d789b9fe75476754365ffc5a63cb1943c68533e9fc6fd80d28de68f34dd5522b5518d1ce58a23a7a31ab32a8c9c46ae4f8d05f7c1a72b3de8f573e46021428f8b65a719e98e7cf1d4d9103cf969bf65d10301ecf89d5c81b1f445bdc1f4aaba20c9570d19b7f291b3cf3af33aaa1f2d65f0b97292598a5c4baa8e321a8e1aaca8df28091c2e76b7a4c0bb3e7308699063c77142bbe2e18699bb53c14fe66b54b2c16e096d75460555b49ccf7d66ea59fae7ee9cae8343b6c0382d8d21b20ffc3a7263ac479b342f434f80cdfe83c23ae1137c533350caeb4a20fd56bb24bf5271014a7579ac4e3007452152c3cc02d37f915dcb38c760185bd3dbd3f2f46ebdf57c90f1e587dcf7d73968741599fe7bf6abf60e46fbcaa76084c4bf2e909cdfbc09c8d6ea44b8e36127dde2c2505adfa71615a8c9cd8c1e7f2415c33c1c3b42f1b53e39e5636f26bbdeff6a8930340fa1b28e90feeee1f3594a600e6bfc61118855f4e96d7e9000309fa5ccbc643cadbd54a6116ed815a4aadb3691f2b277538f99d1553f3aa3b39628223721150c47ff767db8d7076d0bd89dab4e8fd4e789b84611494b58ffbc90c245605a50038524eda5db3ec9189b227f2ab6b63e2eb546f1b5ef355bfd1b4da6c864ddbbdaa28a25ddb09326fb1153a2fabcbe65997025afa3a640db92f40c156fd290f8f99b0fb9a6b26abc4773b889ca9d32d73ffadd7d24cccaa547bd5df8d0318f0dbf74710cdbe0d21a6ca6eb03a999aee80dc19b8d6863d6777ec33ac056dce32fd5b279846febf31a2d095dffcb7d9dde6264e019cbb6203ce232f4d078de0e5b9594d49e3e44f671c74119d537c5396807e3bd1189b36ddf3cf4534fe5cf194863349f0fcea059a4254789d92670203eb03d26f3d7da3ebb61aa929a054f27c8f77645afe94734dd4b18658567e51f8a6c81db2cb2c840d7275d8151b41374f7a008db43d56ac34422e0ce94ace63bf0589efb6bc4fc4211b023d1acb93a43e444f244d56125b9eb154810e2dd549caa106816310250b2bdea93a2a38cb29ec83015fdb9cf2fe2713be2ddd0cbb0c7e83bb6fbb56644757fe14bf865fce55e4dfb23010f6b58768c1379a4430daa1bfe097ebbda57b0cdbc163715627286fe80a17e86e37de519b64f69451b85b0333d18f743fe2b3075e7bed1c0ebba27f10c5b5f43b9d6c09d2ebbe408fb2926b97bb2b3c8e4c70597ebd62e71153f7e1e3372bcb63ed8eb9f05a5ea6cdc29a2419c3a7fd7fea860f9c9c884b82bd23b2f1cffbd85704bbd224032ca76aaaaa1b384dd56fc1c0e552acbb019cd327a8f6c3db7dd0b8165c41f4f3da356d7bcb18c057ca4604fea2491fc0e130621647b64a7b309809dc3c57795061c32f9adccd4dacdef9dd56c0b9da551c4b867d78ebec51810fa078715e100fade5db3d98e1682817fa6b794202cb98b52c01a6ac6aca79cfd5c488b6559b77db640b06f16f160a39486444fad3a6185473f394646e20f11a4c22d2600f1c652a6ae9a92665612fab8ada0a10163a640dbfc6db00481df1bf9ed655e13e7058d32062b616428d54fb7d44ea09f92f0c871fa79bc4ed2535d0de3e306b73f2d931fc2de3e0aabe16829d0fcddacddb1bd3a375f46ca3b9f6eba1484e82492d14db8eafa1d450ded814655fcfc43a0fef11cc8bacf402c1c689f5e0530c0da581f42e625ef874a6ce9bef760c09102379b63948e962dc50d819b3a34e989b3f71f1678a3ad7ac965784d128ac2e2f8e30197af6f37192467d5f577a8f0ea7515e3bfb296f7da31a0717ded7e781f8d3b69f25d45c7fd511bc614878922d440d2ee68892db53b13d8d4145a047e7f569f768280ea3b9a0975632bf0b026b321dfb778d1ba011f24ba63de0ed0e36f6499b7338e223a1f730099291d61b76383b391ba24a4a405bc071f239b317140b93d343d4153ef8c174a099c43eca7f3bbc39c55f222eb959f5ef3f339fa34d89ac763f6d0c2833a22fd05a504d34c430d8f950269d5c655c73d2da34a0b10e611761f6195bc202a5b79922cc04739467e8ecb8e103ac3cfbcc94b03ba94fafb5ddddd9cf1e981b3cf23f54cafcd88276a8ee25d4312a746c0eea3b72938a671512f5de678bb8e020bd57d71da8e02165c939fa8f657e13e88ac03c305a5b8b7996a83d1c52ca3dc783e285872a8548641c2d826492af64c51aa971d78de0ac3cccea16fa73a24e182fafea3b48aa2d3e4ab79d75562a629699adda090ad22e3114641c10dd61a62398971b02ca9a305a2e9818e20442a476a71f55e6b7f08dbd436a673466b7dfad075e6609b5b6150dc0659f93d180459e93ac4572136fa1932e7b3181450c3bf0150538a54b8ee874600be46de085661d2159ffe0cbe00f0810742212afd5223a548c31b59e7f44dafcf967fed5897c43e529c65d304bd98f5d3a67e5534652ba91633748b8a3445c958c1b7e6cd952a9e6387e336c59c2047417e9ba9602d52cafa1af6efe5bdeb02beb272719287b0b225206ad8e82befdd10c75b3a09e359e492676dfaae01845a17ec149fb6f5f367315e9e7930aa0032dea8e526ab1fa74f67e1baa2986d3c503787c81a1c1649d91e751d07e80cb55a7b9e8f7667976679198d773672b6a333c65eb9ae023754759927709e1f94a623e448a12e175cbb3fa19d329415846ed6b9c16c12be087f699f8c5aa8f5d699b7239aa174c96e5cbf73c751db86e7021bee3f48c36b32d94160a2a3fd73576dbe85db1758e56335f22f3d62c1262a3b79710605c87ef81a23955f81da70f30e86c8d6a4af4440a0979e5d1a3cfbcfd5ab28fb0cece49a83e0efdb7813294c735b07d4b58eb86e6a27d55025f49965c99d45ff87fddd60bc052949e8fe2b9f9ac2d44c4433601faa012487b1409e648f0d9d3a96c2c699be20cb856da5433350428f2f5caba2b34064761444bdb9237d8adeef728e39031cf42d2f24c473fb953fc967aa50067fcc261ac441d12caf4dac49df729d54ed7897cd29a752f92587c329bee991952407a790af680b812439e0ef85dcca71c28edd12b68737ac564c8f0f76a62b172339c99d75d391f88f3b5e48585571b8eea059304154e8c6af76d5e17db8ac4699dab862ced988c41c180bac1e64b0e214c5ea9b7e1c60aee4c129dd187c934315f1133dd376151936f1eba5fdf48c0a6c13a5498d57d1247e5452fde803fa9568ecc784325a2ba73ccf99105c32b61b2230238b83c404d7fe91a4ea748b9287bc28d7ee597bd07b4714ded75a9ed62ae35a55ebbed067ec01f2785711441c96165a700bc85df735e156ab11d54f4bd8f12806af9d097f898f32a06f14ddbc627deb05bcae70f7cb4de1ef9ccb74b4d674bd7aa0a093da95cff566590d871b6f54813f715cd580c4c4ea2b59728ea154bc278d6febe0aa9899ccea3beb05ff446c7fa7df3f9fb5e18982101a8d9a9a8a4425a5230289c498f2b6aa7b76a824ad0788013edc04f855011c032e24337ca084af45f8b87962bf135d71914c9c9ca0e29591e23df00a9a2f0ba4cae4fa8599c5302cf03934ec00a72bff8c736e5c2d79eb2dad09bf3e1506f982c6d642e1d18aa6fe4050a7b1c29b01a15052c468012cb0d2b91ac31670319b6566115441acf010e14e0994a60f34b973997a0a3f811221650d018acaf6468d7ab2d1bc9e3829514a93fa3b3f0628eda4ebe4cfdd535c99e5176050717fa91b7beacabdd5aa68766247909fc5b3b154514076f5640b76a02268fd33322e8496f9759f46ddd7cf3503589c5e9416b301b050be39b7fa3e627f0eb8ec467fc3957709cfec6de5c2e3a2321f49896f1a7b4072b3f2e2838428826dc9fa10ac67a368b7e41b92b20d0f562225f343992add1292a4dca042cc04f3aa6a7e67a2e77db0f9fba94b603b554a6b13563c090cf4d95cb5fb429fad73e2e54455d31f5040e44445778a3de2016069f5fa20595a26f0a4632336b3680148da1655ff9eb92d05350bc2bd2dfab817a58847f005c0cfbcbfb5b597a6ff060d6a14968f691f2dfbd05f2f8d92d1f70d40f7105eb5530ef3b8bec5ea17dcd42b06c9217fe26fcdc61e8231750997cfcd680855a80c44a5d8738be4caed7a8ed9d6867ee6546352887fb6e7e434ff160961d665c5b69dd97cfdd0fd4c79eca7e3812d16438338ad50930d7ed7bcc14ef484587ec7a1bc074a6371cd0b15081e26838741cce25bf483f0eea4c217a5691ea53ffdbfeba3123f45d98cc08ba12140dffa2a33a4ee5a5e6e907fda6181c9f1ec7e9b91c3bab371970a34b16a06058933eb31992b965a23aa0ef0bbac6374409161199f8781ec2b445a08a6dd1a79f0c0b61960e867c9ae2fdd358932d602dcef7f1e2d8d465de29dbe313778adf04ad9b7585ef75d9f4f5445eb08b97b2c14c0fa7e0792100791490b500bad58295c58462b5ee5a3f26f20ab8b8ea721ef1039cf1400738f025249908ee2834760de0894c39d98de529f2907ddd29d22fb4c82ab09edc2aa9feed6a0834d56ae6f58fd14d713c398da642ad8abbe696e12fbb0d7a204521ddc2282c807b70c3f50b46289ec2eb49de678f47d555035e1fdf23abbbd90ba3b869383e5540b764508b3f1e9fd6fc42b47d42449f969164e1218af66d895f65ba7bf3fcf4b24eb9a304310b6fd1844e5525ee69ed385e699b7599694aad52227872d3550384faf55cf2447ca1c8559fc59621320e62cec84eb07c971106b28da80ae3a150d02be34efe538db161c949d01b2fdfeffa799499f738c8b37eb27d580a4a678dcf8bc06696b0f2bba85bfcd38c507869f7151f10ef2aa2726e7a356425cd10b252d1ea63c19077819fcfd269d6ef35c4666e5da1981a4f651c2cc50143465b1004d2698553a89d8bbcbf4bba647b6c2d22b64e1dcfabdc22dcc0cd52cf39cbff690261527a9da0f80a9be98915f0d34079aa9c1b0699e7ba93138dabfd35010f909af6adeb405e79999a094c9453f0ef4caa33690e5f7aa13bf498ec4024378e93e6d2a5a5ec3c241b3fb9de46b9c36d0dbe58aea61b97bf8c14f4530ae5465f0edefece59eb523bd361227f802d86083bba60ed0b7d6a42598d1a5c23e5a61bfc2674268082084e4dc2eb9fc4e576d6a456f0fe573bca1f27939305364402233d667d73699dc4e9b06b9e4fd482649a2369edf60047641e264daee591425c30e0e68374db04fe82f0badf7c90d16b2cc85004d0caaf9c65fe91e422b49a992cca233b55c05dd265b7e0bf2b7453be89a2bc11433af868d08a4142aa81785f37d205520d9bd48994f2e06ef17de270f763461853bdfd0bd257857320768a0438565aa96d16d98246c2b2a07e7f9755e0cb1da5c3dc1dc1fba441d22229c00fba6d6e8a7867a5d55cd79fa7f7c9f23dbd4f7b520cac05ec7b565fbbfb8cb83ea1e299f068e645656005d68553cd4ff69b29cb48e563d751ebe811cf6fe78a22db7182d0e7fdd7fba780f07886da0efba5604791ba84437624fe1489ef34fd3d5b7c244fdd3b478df927fca222cd5ddb936c7cb2a929dbbcca90e78c388ee3df7f4bbbbfed40bfe9c553923e00267cddf5362262c0bd219f8470bf8d63ae0fe0c203a5a0983b5929d07914fea563bd349a1f9501dd8b8997cf6872ac99a2ccd9e824ddf2fa874896b69bd711be85b8234b3c254d1e8715a4cbecbef9e1f4d8f4ca7bab1d24053344cf19e2aa766419b5e4a0275a1b9773b66a68be45bffe7d6d3c0497a9ec63b2f835d482b9e3f507b2e60a1c4d6b30458f51fe3609c26fa5de7bf0c06d476ade0c546705a5426c56876151ae9941d32772010963939f00bd3a310d0cc3db4382fc6cc478e4bcf00757a123d8877b9161bbf0608f48ac2ea062f4ad20c0f30e583c1fbaa860a026e785d0d14a479dff12c651daada51123344ce4892bd11b9f9344b5eb6fbf777c92762df2935d55de2daeaa2099f96fd94e35a8d5bd524d565b705825aecd9eaa9518959534d7bc15751372a837b606fd07d9d30be32a94635dfef73fec4996b00f6a83e9fcb19d4488db09f559ef3469308d416f346d6d953584f0aa7ce1a3f719ca53c4672430bdacafdbad58aea511c9fb06a0da22236a38b58cb9a01696f7a77732b15f0df11721b3c91c7419409f3b9f63376511f7ce18438ceaae31faeaa655e6489240aee1c3743512948dd05111ca707c10e810b98183968d3fa0f20d6db6abcd2b0362d6d6084a54f71b2ed46dfc32bfd8f3b175eb2e61c02894f0fdee2ba393b6a70d8ec429743e656b8d50ca9eba94b13dd2b7c4e930779f81d1f6445fab909b6e6191ff153887a845403d7196a53d983bdd5f7c04c997d2476a7f7e980ecf38dcc263531f1ed6a575c154af4b724d1f0037193a010397deb5c471a880cf4c2895fcfce5e5071fae5c7999e1dc0a56fdd476a0c1e463c195ec89084d60209bed5da950bc40e842c1ef27a68cd295d6eacbc8bde5fcd01b5b3754f0eec789cd6e24248742b7a52c3a3cce52f61f11649fe45bdfe9044dc6fac37c08de0a98ee709ecfa2147019a970ae09855ba661bd2e4650d68b2663f49550a494cd20591f62867d9e713149527e1e29decb77c0e26fb55187bc8658b389a4d136403e08f1105cda83b9b6a017f5e1906e47d1bdfe8da6eefb45d5fb89e2ca00e59a1a4ef6585103008714a7f3632b887587c185e02a39cc296d5e322e0b36fb41f514b532b26fe859c92ec2bb75d731b1c7e56dc4dbaabad4f6b486d49edb5aef71b8ee3ae59728d1d44457793326dd3862ecedba0ed266e186df9dc7d6bc5ca8133d8a106d00e518eea5d217b0f01f9e304d4674a1c9ba2ebf2c0054dcda8b1ade9e4ce30be262211b8e9c618c678bc80e5164acf44fd2857ee8d812c91d01a05fb5fb541f3d1626d989a5015cebcf9a37df0b899cf670b8f2da953f37eed4ecef3b4b5f0da897426fbbcb577f40f5b0a9cf1718b26864b9273996b7262ec0049246cf75dfeac18e7ab11fbc841d4e64835c11479121bd09ab0b06d03c878db1d7258ccf8f0ab5534568e6b4b6fbf5af0727203af3a4da4559940f949f97e8a86811b8ab19cc9fc5a97a094ecd618bc00124b886ece359178cf3dedb788f2fcc58822af018d07bd7dc4e78001b2c22799e5f61d2dca85853abf651dd854beeb0dcd0f7e0fdb52fe2e4b8bdcdb9438a86a5b0226eddabcde7c29e91a4ab0c7fd8ec09d7630e0590f9ef944f11c63d60e7bf9752998dc1b4bff35d6720c9995a7a2f5ebdb9862bd38f098ff8e8a51fdf08ed0602c1806cf259bbd872247a04dc83039661237b8f2d292f9a1aba78e9acdbc666204d6c2e919c78e4aeb023d3d27f6f8228efe05a6196452109e46f68dd8789fa377cdc4d1b5e0e8049284d2ecbd8ed8a8c6f274cff8efb618c8864a72df5312769b4a167f0864e0912632e2bace670e00b9cb4c7f391b7385548e6847fa992c73269b03e1d34bfce8bafc6e0fa775394d64fb43b0515f67bf004dea075e1b2133d077945cd51d8dcc962cff6542fc881f04f99cb08e87ff54bafd1cc04580a996ff53ddd57951b7a60eea4a9eedf2f32f93d0ed3863252e130c637ffc8bb5ec145b0be5156e43c8fc78df6a64aaadae3682ae86651f366a1399767a3fc31b17b8ab329c3cf33fbd481551e74750803a67367c78abd2f312776fe19f4a4b00d1119c3df33ed41f13786b35f7dd9f6f8c8deff8876770d4078914ffdb6f27685785a4b9f6b44f4c171bbffbc781ecfc04797dc0302e3e90c07c74dd952a3411606004b85f720ccf0939d271c096cec002fbb330e8eec1dfab4b278ade8418ec2e0ec57ad2d3db8d7ede6f9be8f791e5a76d49a46e7d90e2597abbe7c078a6f4416fea6ef715aa1b0a1875fb4287dfb6fa966df0b62730658dfc2e8ade548b4af6893d181a72dc4215511c1925745a90ecd2c40a807be69286b142d85af7a0d3ca48235fca1fd0258fdd27f32ae7efaa2f7fea9c7d2f04c0dd64c9d3d8e9c257ece4b8b5655657ecbf2c371b3f16d206a530201e00137d907bf245e05c65a466e1b90167b3243ae0604571b06ab65e9f5febe31b97240ad7e6f3ec3102394584070ba0d7cbb5909326701d4398c0960d17b98a23de0cbac42b0937fb8da7140075ed24625537da0428f43b89116eb26898332753a384ce2786434f694773ce688f0ae257d06010b5c7936dafcbce0886a7eda48fcd053e7a021dc7eef07f869a3be6c44684ce1112b145d701751362e062d56f988c27d8f1d04e860f09b63a21a9d75336a3b3dfe35d7e8d85add54e29f96c1ed046e7fd5d01fe4e5d042ceb2ec0de666c43868306ef120d56bf117fe4614a8b406f59b8d49392dca7925d3b6c04f782bb43b6a7f6790aa44bb0dd5d373c9c394e3f4c54f6e7287ebff67ae0c764102ebbf8afe419310c2ac238fa269212ee3b19ba703bbf3a8678981b348bd3325c73cacbe69123c8d410a9799c1a752e29e80a5cc239b272f972bbc96988449c6a0790a610a181653808bd6b6194915d7a6fc56425c7860b1d1de36c788e889770b1c92d5f682c74d729a4715b06c345d030ff7c6c2ad38cc0f41532e26142b85d3ec66f3942735e1302e7a5428c2c4c110ecf9eb25dbd003535d405810e8b3548b1144c6475caa50650ecfaa25da4a3c8e3fbc1d198c777fdae16740cd0de12b22c87ef713ff58550307e067348d6dfc622132ca6c55c45c82ee4c3c6cbb55225ed0b3eb4c53f63ac290bea07abec557aba574e8e96b274d93f64a01ae2f3b617caf8ff4cc27d13ee5011fcf722fbf9ef15db3c1accb1dfe949e6b8b5a98a24ee46b488dfff0e0377f3c69bb828850ccfa548c046ccbd8651a5f540ac2ac03ac7fb14a2655082819e1828ad859832ee7b97786e7136cb402307c153b6bf8229ee8dcc12280d0a25c081072418e32a88d948f5605ef98229968360f117a49f8762f419fefe9bad08fd5459d6e47e9812080f2a605964b1ad7aa384abc99547acea3749477e41ba3b6384ef0f79f7bcee013ba9a017cfd329595412dd5c5229fa77aa39571abf6e4bb478c3a363d53b6a53204ffdaaae67f38c6a5fd628571d6d81e21bd2a89cd47d78e2efa5faf712a8325f41c9adcbaebc516aa294c7f4fdbf18fda0e38940228320cf6afb7ede54ad7f4d1f335b2f557f3323d328101b61a971ae9ace4809f253561bc0de5e2a48ee4df8f160667364e79549ddfd209a4a32282825a26d0f37a82d1548f565088522267b7d38afe88e3ce7a1f4549b4fc42b4b21ad57bac9750c05732216f55f5074e0b2266d55d4f6639e2ffe47f2b51da9adf5ada158181b8e101e01c43d2c046098e45d64f6b54845db37002a253e8e6fddc07f6f1d08a0b4b41c1d579233389bda4e95b9ce1ce376c84cac4da6b602dfe343529514b8cde87bbbc8a389ee45fb3fd586d6009353668767bdfaadb4c07e9d44e9beab2efbb1fac34e2cca9808db13ed292e825ee4b62e21c776a216845f25f3e5c36455f17902e6283f777c793e62706d402b2df9055ff76846602051edb6350e251e538a1d38044a2bb607448dbac44085bf2bf661377e6249226ac48117419d45d979aa62effa8b223d44905a3d19973f608d3cd64cbbb3d94f83931186eed2b56f1740b1dab118d8ab0541da32eb91b81384b06f87f805e879c4d6adf48cb67e83211f3e2b646ed506364ad15745b9ebc0f8f7bf4c8d97e69b0da8458c99af0181ac13b8b3b58653406950835c5d65734c8a06e944075f9b0dca9313fbee45c606cb0a749f2628bd0c886b1857494aeec7ca577bbc595ae2cd72c0aac09504e8db5f78fc14cf487f43937c1000ab51980ab6f6ce03350070199dc574fbb9c0c779320c5672f0f16c7b9865582d24ea207bc0dca5dc32d9cded7353c80dd5173126c06973087ef8a8235fc9000648d4e287ec3461c1f34f25cfcbcdcc9c0f1c7cf9f125f5ea710c7cc7c168330f931e8d497a81f73b2aa9431fc00a54b445649d84c89fa71346c8d62e80083d10c74ac43588027be5756f2f1d481c03d1d1dad58cecdc96e9f59327d45527c0a79d79f6d960d29ff1ab7bd0f68fa6815d1bb163d54d0903082ea5febb4b167f053e25ee407ce221a00626e3be93fc976edf8b2dd82c89a856b2cf2103194f8acc6ee07ec0405cb4d7ea6900e44b3b0b105b9c0cace4c1500ef2a571dd733b84bc86ab7ccb638bcce9793934d17051a5e85594c1843d7b4d7b2eb225efe915dc9ee4cb743f9e3192a125f6a998673900b7de3df58910185ba048248880b5e6bd0b16811486e91584371146849e120421c893786e868d964e75cad4b67f4be7a152ac764a8e42c61e0b30d101435e77d0b42fda07b5170c382c87348bea2b86810ad0258ad61b85ac5310300283379b64a0edd8dc2823acc66a836201fe66be022029473c87ed2bdc966db021b3b8e5facd20e0d1084dba82daf9c27ac3d224f81928923f4bf3ada8807f495a7b0bb4bce6b4485164b6516cbc08ec2f8fe9d246a2b047bff8371fdac21956d0fe5d362b771b330f0f010220c8ba993599c85b3b8df6ab25dc64f980c6f77e829a0a02fac78a248886bac172ee6441819cb277352aa976a578d966f0c9bf76cfcd2ef343214664344050fcb81922504e3f4b38fb4d5d574cb9422a5e56334135597e3e686a4093a1bb442a341dfe4f4c124e521ddc238cfc87ff5d474d48693330097e857f2ff4c6067fd04061f4f8b1cc33746a804345600a1f362bcac38739d8044061624e340c907653a1995463c8087bb8e32d5bbe5d3add7632493d31d48e6f1a9be94b55dfb47420e6bcce06cbecb6ac1fba51c225d7fe0590d1a408e28a918adfbc0df3d209d4d9228f6670a811e660de145be5a9b281f0216466da9b2bbd65ef07cc40f0f544ba92ab491a6ec83a7b7809b7d2ed5bbf984d00751606f6c83f53d7ed2253eb865233bb3a115513553a86725e983c678f6292eb9996c67f96f68f0054598ae3ca266c85d25a4e82636379ca968c33ec1e98bf1e76e90d11f85fdf9498d157b7130e11f4acf88d6956d7b62d0406153620aafda25089463330b45a25d783a2da6111c599bc3232a615dea43eda742eab4b91cc82e130a5988ec371e10616e2fd803026834ada049985dcf19ae77ddc44cc61217f772b543e53199b6749a3161d035891aa33c0569500f715c844ae94053595a0de8c7a637c3a16fc469d7c68f75d9abfe8dff573f42e19e94d11b04032eb435cf93d9237d021474d09151af893e453fa3d32f5553ee35576a964472300f67649f4d58640350b20f85bf80b2cdcf40180e3db9e1c1a3a6f8bbca784ed500ce1abad6531a2aae419964257e5a46b6c7a22cb5c9a881c4f56935e78431e2b0f299d29c68b69ddf3939cd94cff75dc253df832dfccbdfce227ad3983651c4cf34aec31e94e04b83ffa5154abbe50b1ff119af42368ba08d0b8315103cdcba55ef43828321e7905fa1b9bf43edd1718e203f6e4e016a46dd902d5bf20f13c3c15f044cf9178e82d73ef48db0045942a120c7fb8f6763f3648d06043e3d1528a1bbdd01680cda06b1e124ff33bc5ed21e620cf08c566172eb4148900e0e9dcdedb925fc60b509eef7321a7ead092810476146b24ef6bb59a3fd5996426a66d9dff69b3122aa599d9b3780112ddfe9d0cb182eb44dac987053d874c6de51354a235568b575e2ab77b16e1a47e5a6eea2210ba7d2585b32c7d1b5b784b98311016e942465ccb34f5cbf5f04c7d6f72ab25e38609d7edfac021a10a6ff7e799f73e9168e95322fc0410c1321d0c82bc4e1d96f96ea8c2b1a8b91e9873a8ffa57091bedd68715c321614656c861f3d94201c5ff5268e6a03c92a26954e1db7f228c21af20ff4393e7124b27e494758692f0ab3bc97b5709e610b8705a9af3ebabcfea8d720d7cbb3c53d9ec91ce32e2abc47d9cd140ed274bf24b298622baa30d5269975ae181b10a9c350441f1711a451605883e8584e880a3d8de126204e8a526a36bd0db9aba461a974fa20fc8123424de4d13f5307e48828fc87a569e1f6435a9f387050255b76a4ec871c45feb0180ddc09ca20d7b333f9d2b9a8230616ab0185d53920c8b271d8a4c08823f8597ca24f149ffdaf71441eb2a9e4a059065963b560e4d7612ae22eaa34afbe0341fb63d1fbe1bd81701857ee1d7b21e000aecfc974bbd8bf797585bd01eae5322d411855ff5b66e75fa96c9842a424a6007b61d7231a5cc9cd427d6165a69756d592c7ba3ac49c1431f284e2d6469b10e176e35466fa3f71bc21a5a65bbc07012035196c1e26e3af9d5fbf984915f85c79128f3cce652d03f41b8ec79bbfcf20be11f48990b78b073a5ae5d3af68018f990202006f0ae6d625fdbaa112c0da276ed5b77412959ef44f4cc2984eb6949b1a0096b1af1111a956d84917f671ed2e709f0e7fb62391bf4481106e44e6bebc118c61649a26dc7fe2fbcac2cd509516abac27787c8b3012edec4247ce7e0db8454c3cbc7db618832d9fbcb0e6f2d05b21777f6a5f3015276c52a7c90155cde28d100c9fa78261ec8c1d67aa40b5c08b2cbe4885eb1d704d217b1397dac4af76e09424829b03dc50749d86af5c526400f5fe9c4bc5593cc1c3b85a5df2f457fdeabc82ee3591d7e189d8026d69ee9b23b4aac842d88c1d0147075ec6a9f8e8c0c0e1e4692b1f47f0eb9887942d196a9b2d3b3076e8e3b24c5fc1abe452e3da5e75ac00dd5cb39c640a284c70d37f01bff58e388c790eb26429b720384bc983c635a9aefeefa766a656177bee6b3d6f77ddb2b63aa0beb3e6b2ef3ec585ae2a3b4ba67f1bc5d3bc454774be6f8743eff0d532bece0832aa8ba9d1965a1edad02ebf97c9d1451543c73c28ddee69b9f0100f45de005845f3b916980ce204735ccc315604ce3f2f9fdb63d8ecea42d06def745eae98767672a0146cb9683e1393a5175031590291b49d6e3231cfcd7f4888895c345b6371ac75191fa9e8f68a86c3ae97e2243f587303a8e5d47821f987824923360efd5a15e570524dc449dbebf558f90b48a214739e7d62a7d368c8237cd6d871c56332c2dc3f62adeddab776500223edc871317aa0b04466b2d4ede3a8933275d7797aff57752ed4ead70e9739dfdffe02e852874315b99ac99fd2c46d584569c411a09a9e26a11fbaadffd13a6e2673e67f9ff35223bb88d9d13857b311a720370e3ab7ac0d78f1b8394f333483c24940f080babab87ad118d586ba108efd818d1c808ac7abd10dcc3921fff9c095e3790d97e7d5da74c8c570a00d41ec0e9054379f9be3bd40538be862fb473d9d1112f98088fca86a5b95f0af6a70dadc34662e1d43c7f74c1bf721315e19d6dffcfa2a59f57b30f23f2507318ac6c7280e964b167257ccf3a251b9486d398500928ffa2e962f61e19d0f28ea3ceacf409c2d023e8a9c4ee4084bac1261df4520949205b18a23c25d028bede83fc80f6dfe897f72e2c5056f566cd6712c336e3d28eef4a1ccd385a2b346ccc1889ba501a62124c695e7ee245bd6c74fee1126a90fa28637c3bbf124f2e2721c07988dc4269fe376bbd3ee4166f76714ce0183c8d0700e19efc37575e7644d042887f5a7d6324da10b5d731b045dd6d640a7703c660d38cae4dec7e5dce361fbbb24c923078de1e284bba938efd77e505c02c41bd33205fe2d9f9231fda794b1ae19071fef7a73f671e2fa09eeeee766c40d5d4906abcbe175491056ade54d90d2dad465761aac1c36c2aed7a109e3465370289e47b5f3f3a2150cf572b9cfadcf4266c398d8cff0f03f470f4b9fb468e220b23e91afe2cf068f227ec546644caa8d4f49130d4ef6b8ebbd93c2ee90b6949bb24030d308875a9f65ea3ec0e313c024093bdfbafade5e32c1e15b973edf6bd4756bd043a2ce638816878cfcb43c0f1ac179165b028b8f415678e4b64e03a2e3d2d213d7fa0f66e848373a8b342202dd9d68105254b76c361db460174450c52f5cd88561661b27f0adf60c10adcd6c2296f6c24d18c1f5b5cadc3d9d3f5d85b5dc32e8de25c5a1e4d10122f7afa19ded6fbd8ed8cdac46ff8a398aafa9e8b43e61e52bc8ec09e81f2833a434782d28e5af568a7fdb4382a60a4eb36b4f6cfbc04e9ab1e5e5daf6ce195c39602b07897561bc019f4083a19abe5c813a3017649f2a6520143c151033813c876a7e017a411c6563e3cba7668a009b1ffa08ba72fd29394b7fdf91e9316e11d720b944357c55a66db1afb8edeb6516398cd3a937ffececba09da926b8d9b397a38e4467ffea01b82dbccde015581671f7aeda06050261070db49e55e85bf0a16584e35e25f506455738d9fdbb97787b98a34965af5fbe0d402aab0794ee502ee254105b89159c69b0fbdd95e5dffff43d4f6fcf43f30e5d2229e4db17f6115ec67b04c2c3594432bc992f3906cdf37744d346f45ce9cf03cba25228af5592a409ff83344eacf36be058372c0772ceaf3f2b6a8a789c6fb2153eac4a53a96e944a36dbe839a1755ee8853c12183247f6c38e7d9316771e5f2fb672543e7db19f5e8b0bfe75bd9d40137e485c73bd5ce3b051b3e15acf0ece392a0fcbbe5b47adb3cca84877c4c13ce1e6fa6b317726d15af149dd4f8775128ac48875ff429d8d48b4bd104c8f681070e568d229931862e2a9806e02e7754c54d5bfcde852fbb5e88009cddc7c6db816f04e144aded807a60f004983c5121dc09db3bb43920523bc808fca55bb57b4bdec2b22336841686f0f06067cdd13eca9f0173e0fe94f014068643b02de96bf075079641a19678840887ce0a8991e15d46757ec19e5de69277803e969e6d7f4136d7035b97494c4b5f21730c87fa23764a81a401519e28153cc321b164ed4a6df78eaa6ba81fa9773fdfe44b9c6a85463b80e70f6e1ced902d372ed0edffbf2c90dbad3ea9f92ddb399c0dc1ea0cec5b1ba92f212525bc4b361415e4ffbeb23b7c5e4a01b07d5756265be8e96a48a8359074b73bb951593f0041b79caaa1ad2ee131c6285fbbea6d9a8375d0964dbe7f283eb63c908a82abc75ff5d33389d784ef232ff883fafa11d96888e9cb9961ef13c77ffb6eaaeb989665dadab996a7382e93497def1f4f392cfaddf8e10f57dc70ed239ad7f26ebe105173c1a9d1a14a4ee0890370f099b4d9ca024d61aa6c5421eaa044724194b4746ceacbfe53d8b2b18f7f899ebf1511afb1888c1fdeba2f6dd4bf8356d29fe7301e2c90da4cd97cf2e4d56564964e2e4bb515c8b270e9f5e8fee210087d4dd567cb0caa818c4450f8b2fe9ea082b70996a7a7755560761fe37ad3ae497a1f7ffc3b9c8ffc5ebf93dbd9a470c2bebe23419294618d8daee7012c4364e0a66d5d922fc603572cf120e251069022720be726ccdb0c8982d8c02a6aa5109db783f4ef5c3a5e083bcaae629b611623cedad013db16979297a6669661e5cc6843ae76af280bd96930d071fb9f1b69471fed7c3361b4ae1f014f98cb7267394306734d2a399525b3c7354d99b81556eafa60f6c18657d982a0129b62d4b52d4cdd538b05fd9e5e1e186581b95b22e87dc7d51ffa04931e2a4cf90e3f51e25fe458e078bc9e647adae18d5d574d69024f02aef812b8009c605833fbe4ee2afc1759e18e68efd78be0d2719a1dc7683748d639f82e3ac72543e4774e8c19aaaaac9c9c3439e4650d2f88091e5372792da177bb0b026b6bc8dc9390166820af91e5d7eb9abea693ee068319aba6f7b670aad77e8c348953186162f64941faf69d4868386a777a2fb4d17b2ad8440dc7c5e212e11a75ecb0b15e599d1755cb6ad7d3d77ef48db0a469dfd792238c24d334749110d62115063522900a2aca835c3d15de6483429dc278804ccb4ea71fb6b9bf4525c76a0d93d60e419e7e64e696867ddaae5c1dd2e28d77c454124603745da436445631d132b34a6c14787e85bd0c166118da3a67ad0e282d853af8166f9f452a6131c502238e794478331250e832b002a55af4bf95ec2f7ca976bb787c4cbe0b424cc6afde885e1d82c07e1fc9e1f2e8cb2918937f68e82a7d806d99eefba4e8f9eded9a4d0d134bb9b9d355ea01470a6f40579342bd0f4eac5c6212b827baf9757ea216524c7d79c648f63f234bb9b3ca64bd27d26fad2d3230d531282ccd0c23c6e9f79f9e6f40b1cb8a692513fd33077b03d8c3ab5164664e6298a4ca06554fc44c4073e6690d87e647c60bbb659c0ec6cdae9d2823ea262e5267687a5f7a73220a877d16e7e40459a6a355c1faed7859085c7563a87656637bd21f981807e3c27386a8cdd24fd6515ed8f7828eb4e6df395b8b368a8c231a19501dffdf9584629a780024b49ca61b21fb0b2d96f43cb72a2fed416034c0cc59b6d3eb7c57ee32b07c1ce282990aaab0d089f375a0d9d7d250f6aaac322aafcf21cf7a5bf0d2b8acaa6a59ce4adb5dafb3af6f00ca1c3dca719cbd7d7c97ba0b3191b03046276499850aa6b93d226cef24b398de6d05f5cf0dc84a6d8224a7f157f7a8ac5c64a2288517cf74b8c9717510f0a16499874636cc09ae1caeb29abd3c02df006572b4582669ecb1e2c6181d1bf2c05b2e24667f215a5c37e8ae7a6bf1249c7574378f9a9d3a3e95fd213cc13e24e0257f4d97d0bffb3629c5c433408bde57bef6f427504952695b01c7287a81ba5f5ab0161618a621e6ed7835ad2437cb5809ae0aa1ad75d5b623437e7347587e456606da6757bff7e979ef0a1e088cdb5361202346e5e458ec6373dbe6ecba9a04822c1326b8cd5d381efb7b08f97ac6e5e223d22fc0015b3c4781fb91bf391c2d36d286960ee586f728633b071edd07c670179201f20ddd988af9a7b23dab7ae3ad83ec07919e924da8d8022d4245dc953523a3dde932e02a84892bd26400f5ebd46bc654e2b010ab52f1f0ac148d44fd7c27a0d06d6ae567e4f064504e693dfcfae52a3a6e134a27f023b531fd088b8d29a978efa42bcc1d8821394e32e3bcf4c616af3adc63f1521eb9081666a1561de6cb9b2bbacbae8cf78bf8d63cc7ba07d83739b3a82e6e99722f6719a4c3841999cf9cc47e6874d29a423da86c20f21bc95b61bbb87d6e2330829feaefedde21e42f2a18dcb1d08f9e1f5be2830b451b4cd88e32a08d58d9cf46ee2481b4dcc6a2b089846532d61cbb1e90f35ccdd7e856c700a0efc54fbcc561901ff1f95c79aa43e668941f1a39431c41d31dd14fe3286f565f2319aa07ef288a9842f713c351ea8007881b039e8d4ae9396c97ee1e1d536b97ae49b88a3e5d0cb8c20a6831aa07132179ea923e9dd5819070ab44d89a0b3ded36052ea26d43e332ad9fbe1de1373d0506bd12e704d101acb07c189c290c10bb9e290a609933d890254da6498f2f3f0110e905ecf8d82347a90720c851f4b8096e7447a102192f721e5a73d2afafd31615525a10c599578fd2e2295e8cd4fd646b1c7546a8c0c11211f2b9f0952da8b68e73991863d744f06b5f4dce569c1b55d839421f596c97efaa40f883d896e381a45dd034c302e9d9793a767e17a4f3d888323ac89cc4224cbf032a8f3e17f4091f5a5526f6dffb3b778206aa92eaa2190b7403dad9fa0c0f19d1405ca4fcddf1fd03ae43b7c7928d1d3ac28f2b38993e19d6b5be7b7b850a88a34553127d56386a88f81bb2772e71bf5ba30b6c7b5358c231d5c78ef81760505c333ec6a71edf3b849ca664bbe022fee0e2fa540cd20aaa0945e46570099c0c9ade9a41eb182edd8ba4772fe35c7d719f7c95be89719e2fdfb51f7317eab4c9d43a747b3ca4fb098fd0036f2f788b23812932cf7febf4cbf8facdc3480b98cb7ddd7715caabadbdbe6a83d0cebaf9fcc24e1b4dc75f499c3a84a15d0df1c33f1d08e94e77f720fe1f2b3f8e5cfe10aa13176554997c75a94723688650c52f8b9d1b076c99b7b4db6eb12335bbd7c4a5857c5327e5cad2088892db2384db5c2c75579ef3a75bbb99e0730d994a3005b2dbb95e789be29d246f665760a9b2321ca84be9b5d3d2c78b13e364d02c5121ff9bf61b636667f3acdd02fe6b5d1c5daea3171aeaa8c4a63496ee5d6dc54101bbc6eb3703d07561237ab8eba8afbc2fb749b5419790e8b0ada1c4b2657a20ff9dc5bc9fb7e2c71a1a8a9828eddec3d2a338f8168d805cdf7bfce7ceeaf9d51fc72aab67b827d853d35521dfa919feda96a59ccf641baf750677bb79512419ef225508805e3fff765e805f274fa5cf13f96ab5d90745d389d71c76b41928370787d10a14499566e1e47837d2c9695f5879295ead6bdd265f2fb0c4f7e2f6ba4d93efdbe6696c476873426390bdfe5ac9f8a436b8de5d62ed97d543d8c785fc2048c91a13c3f63b35e642dfc93f704cebc558d121a4744a275749d8e2b0b2d9330bff3549b38eb6dd03b0c39450bfa7c880adcaed72fb404015b28255cf3fc85dd1ce7f05af55d8e137119b41499184ecbfe6cb0eb070608e9475ba31b60611c2f402c78d0eb57ec81faff83889e923bea4d88c54b0398de4322a8d68c349f681769e85faa0a485a064574674cd86a06f392650630c13c728b0cc173f8da84c837c4ff55263385e20a0243c74ff8522eeef3065f4657cb4920c79c0d47f81192a1bfb5f1d11abf895ec0a2e95c51cad7857747e89df33b2f155611efe1ea074039ed45805033c07de3ea3f35a21ddbafa46f8caadd9c2db46553c796e76606e78840174bc2053ba6752ca62163b3a2ca7d65636d042c72efd433102e8e7485939e657228047a40f45ed93babf3a24747c5e8c508f1e46cd7d762fb8a3ad1290c255bb03b9eddcb6cc11047f151d4d8fe6a3c02df9f9dced4f78949dc185f1fd321d4ffc826d4e8a92566f9bbccc60235ec865644c2e4e01fff52e8bc08adf719573007cb2118f5bdcb1efcfd645be3ceb6719a3694ca6e51e43ea2abf450065fc005cdec22ef2235e3ddfbe057325ab81235cb67f3f4b5a9eedff9e2f13a711aec1caea695df76b65b09f2e9deea63602a93abb461c333f956d3b0bb05c7dc83b8c47cf00ec9fac640335ff34df1cc19c1628154ac1bbc5867adbe07df71ed5f0a7a26aa4eed258033a50fc35231759ca350c591ae09c7f7f4d0d03f1c20a2098d5cf963583a4f28ab69a2e4ae510fe4878d3f5d3ec49de2355272d1e842689a0c7cfd3063eb4542d9d56cc26da435620c2d254ff31ef9388915227f1cde3a0542dd3f0cb67edb1b3cff6897faa7f5959e95ad626454d6a02fba928624a2b7e4133937c31cd7af30b5e1d0d5e9355e0e2ffdfad354e0b160968b7dcd94b13f002aa6a6e23113e3d029bd999bf54d6ac6ab8da5bb75e9518dd107aa8b647a63794eda06e7a021ee4754b3c62558d47bd75f244388c6b6217222f2a90f1898ae92faebd7cd62f3d62688527e0e1c01053428dddd8ba19743ded2ac968423a05b5ae51fa57950d58efb88fd3a43aa3a5428ce24dbc1d9c689a2235cb3875e120a99f971b5c75e4bb0dc3f6ded24ebe32d5166b0c072a328b70ac8a17e6de10a82ec7e34d4df45f890f4ab16f93955572c6f953a1d532ff471d177ce2027bbd7bc41523c4a990241b18625fe15622c8159ac97d89199a88fb190a8b87addb54e781924c20b6d989b139baadab5e8c3f6ce0caff05003b98ff67bf5f8b101bca29aceee9693150a876a82d5857a20fd3bd0aa9250890ea11a54bb32d53e08afb9afd04c9373b76330f23e2f98b4480f2cc70deebe9a4e698073ca30b54fb3b6b5c4e0887ca71250fe71572d34663d051330115990664f661c7aca2600e7fb77029b6c63fa310b36876e1605392f400a00da915ec0a9e2b4b27aa9880463df2e02e3c578056b84e1592d1cfc8a363917d318fb570575d7b3f876a5cd39de813530f428ee649cc58693f4d504f0d8f70da25a6b88d0243174ce928922d9d1b213ebf0c0f4bded8d4243273a7e593352d31ab50963ca6545e1134e75e362312d1e41a7d561aac32fcbdef2d1dee1b7f526f5eea1d0675862afb4fc382586e4f8fc6637b3e1d7c9c4d54c69508bdcf2ad188cd00e1a8af7392470c0ae0d79489ae1252c5775aab0142c1a2c767d130f469f7cf96d6ec48df760b1d06a1594a03f34cdf159ce1a5981988d7fbea88d9bc8b5c1ecafad0f93a3d2ffa38e3aed99110ee4c0ef5c3bc9d482081130687f66136e1fd556ba999aa22986b7f1dcc343ed1b52def03fec14968b40a3fb987e867287527f179b4fdcfe032d16d2e6f2a9527f3cc9c6da6c4d33d834961eca7c75913be2f53ec0b0fc49c4d79c159f0c086d324c070a7fdd0373f08620ad6e060a78c254724249fe5aed2f4883dd21034560ab8a6f3c1b7d6d785a49c822102b756337acf30bdbd668142df72da88486c466f0566ea2545d62779ad2b035b8bb05e4d5740825de09205c961862d3864d037792d162432616efc303285ea01b7b2acfabb0687c03e4c466fe6a1af3ce76bec73e689809a1583fc3b33436fdfcfa872008b03ef03797f13f1f1a80dfed95e70b278ba5f7cfe6477dca066f20ba79d82015bda205ee6706c17a79d9502ac5d452c2ccfe1bd86382f1525eb405fa354bd299d68ea67cff2ffbd6a8cca5852e34f4f56811e3b01b44f740316edf2a314788646e7bbe1ce86cbb556e9ff4cf8f45ee901a0389cc8d2186c299dbd31ba0bb676ed544e766df464aae1d3020be72f5faed7772c816a57696b604e75d4437451f733f0a2203c6d2f2c52762b5239d8e1f39709f3e54c89dcf453d0d2146346c5f6d1818a49ed404d9bdc7d009ffad1251ebfa23fc6a05926f2d14f377a33f1083a463091f980760bb344d7866e2bf8b8c2bb440378e6d784cba498bbf09ec84353e1aa9b0de76aaf24711dba239835ce6780d481786f88d081510a0c03a4fd54a452d5d6b25adc9301ad48e36e15b3dccee596f6927ad0a656eb109855ef130868fbae066dbed058695314279137e7e6d5f23e8385d7c0df224b44681d340608d875f6e9ef9802fb71dd57066795a0ae749bc0e6e8a31fbb1a2f5cf572c99cfb433eae5dfd4fa1bccbcea3ead58f0a7441a346346380b185f972f945163c3dbcac78f54e185af3dcbe643d13a4e2b565a215b2d0e9c76fd6e9683c09c9b97796c44dd65a9226274107f895c6a84abed00c26a200dd8dd3a05e6b1cb7feb63a9ccfba36598060de9771b4ed48ae1601eac3eca8457f384a0248a09766de05b899946d70a86ba8f25491da45a06be76abf918ec6e0daa33849dc370819fc465c9d53ec37a97fbf19c3037c1fab3c3efbc9a87f0497ba21f01dde6a3cd6be1f92bb2ec5603655a8cd97b544384f3e75dd194b84ca02b1dd37232be374c2fd9bad3fe271fb8c9352f6d298d9f52a9795735abec60650f13db812a5b0d56758104f511339f0a5e0b113354e2c84b1d0c64b696357c1d657e64e1e5830cb254a5b0253d65f29115dc88fe9de230fd8ae810c80d48f690a5e7fa7ee17489787b90b898fdd0bb28b557b28a06c68a79f9e4a18d16a887e7b9a8bcf8562a679a6f1e7fdcb81d6ac51deaeac25e06f08cb2cac0df7e187f6f0cf0cc4bc20f7b983762a8cb37c34120f8dc7f7ee66ea6dc6da454bc7cd8b97517d094645032a5e0a183818b3ec349c782122ec955c4190300c3bf260366fe0bfb62199805f77408868655449130853ab9fc872d6cd021afcad2d2cf874d4beb63f296816fbe40ac12c5dfe8af34a6bd4de58f1043c064f9e7e1c426a265a119385cdc5f2fff04ef1bf00bf727d7e33fd0c0b9b1bd4932d192ecdb835bbe1c89eb186d5243a4e3f683bdb75c1b88f134d3c2446c9fc95e6aaa58961d9f9af9e147538abd5a9cd24349fe35a8b0b6b064f3092c9a219de61124dcc92db44255edb9ebaec26f978a29027db8d799cd54e53e95461739122070f6bda9e494d545e396a8b24aef9d679003ddabc9e7348fe05dd47ee2056dc68da330d3524133c098eb21a383be4262d76cc5d249a669fe9370bc152d4f9a3f5df0b46ae801af79b76b4ffb0c2d015cca8ef4ae8864165760068df0e15285e831e727b4be96034dc8ff50b9513df26ee4afa7632688e926ee208f110aca9480599538edf0e2ad425c23f8ac59e8fcb4307644781ec4293b00bc85e5aba218f102bf1cb01a6fafacd3b9f20d9e5ec34c838630491cfb75fc6711a336267c24b65fc5e1b625ebec65f4a5ae1f85e501b8cc5250a0405b3a0a7bb0ea45c130f6d3f9585a187104cd94888e31e6ebed6eeb3d51d75078051996f8231d69271eb32a405563513f9067aa6780238c0201592a2eecb656f0b84cffdd4198b6c9476561084ed0d7dcffa3fc356030a32df8ad2ad3eba56d53ef6ed89fec79d58e9e7b6cdb928470e9aa70edb00729d32c551a8f2433311581a79e6b8f6963a1bc215472ad3bca46b70231f73d7ed84d2b523b18f31b6c9660e02af186b63a8a16154281f8c16843c3f65bf4ba53ba99e48d9592de27282abb8a1a1be17610fa58342925d14eef359654e7145bd1883bf7c6aed4218bf1d2e6c770cad5e2342df4689d29f7c120b8c88b16f5c226d2899c5adbe30ab54e670e224bf710d7f7d26975c33c8f9caf07debda363358c18c4418c865edb10be54ccb45c76e7670ad29c09f95536c8f3942b0be523435bee92582130b65072e47875cbbc904b20a89db36a9becedfb315fab2d747341d1ae34a94ec42ac40cdb67212fc708e502d54c1624d48848873541c351e8de8b44ccecff9d698e75754d692f1c8ee2ba20adbd2251fa6f509f3a7d3b7ee475856d196653f527180811687bdefb2c1954dbd0ccc383424670b279d40c9a304730455a00852330ab314651a09e0582c5e1730661394d7b49380c6b9768be45a14aad18c63139cacf65cb01f92c5c504f952469db15747588988ff080637fd074fc77be235899b594d764b8e106de169335fd1fa66c97d8df440710fdc142a81358358241b900d622ba4734b23cb84012ee2d682b670c1d1a2a1bbc230b35cb9c7c6f9d1bd0e0c59e4d68d31c9c71e7fa7eb122762ea9a01bddf8297365aef2a0e1c889d5fec4cabcbb498c7e8a9ee43f81d5b27b7c57fdfd4d02dfcb99208c072b81834edcbe074c0efadbbbeb1a4fddc68c2677ea21be1094a807cc804481c1a85f0b74d59933ec463d7e1f3f8b7f57fd5bb3251b4baf186a2dfec0e830f9d6a38084a8d9ab61dcd3c27416399d567b5be5cef2037c6c59d550f3199272b5c5934058330f8501bd66fd984c04ab1d56db57fce876cc9782e7ab83ce7ecf08691a47c28c85e55b8d7e5ac9c8376259e7068aed133b2a6c992aa9f4f18022b0decd09efbe2b8029a441227e232054c13898891e4b0575899d9de47b63f242202136dfd7708523a03e6a235c9b5b24e5b43a283540750fad6b804c47569b106ee0d41de22b2104944fb4b839894d0edb3af8d5952f679d60c0c8d918b1e47e576e762df2612467ae2955aeaccfedbcc91d5566fd226ab5e537a8225fdb006a265a4f62b025646eb10033b28d1b6e0fb3e8c5f5ebdd11c7f837044209497b7df15ca8a61db415da450c34c263ac102d10bf2a25f6c1cd0ae2185c717757b0056f7393fd3607a340dbd890b33e0780a7c3b6b8179fe29d3ca50b6c2af4c56811bda0acc32f8571872a067567f2980de45545c2c4ceb5c8fcadedd65bf8a6fd96142b9d277c53d5fda666fed0abe6607314a8c2b1d8a545316ba384289ae4dc6586f4373947a42b9501eb8a75687f10b43bb5a44b1b4da641dc549686ec86d371a2dadd2b0f318e35be71408a6e3994a77d15d50d1c8437d30c26d07f8459e43f940893a08faf37c18bdd68be2f25e9ed51f03250c31e4e1df9f68e10f08ffd561da94cce37bf88720a727dda37cc839d59ae27f6345d1693cda7dbd4b9fed2e1156462cca3bde0e32a5a7785c20d2bea85c1ea6f9b23cd1da66c6cd1397859a64758d9b7fd069200f0901247d0f62864dcdd88e2792b23e72cb3022cd737fba12ddc0a1d8bc44ba32fa5068ccca837f30f385697d7bbe7f30d476bd06fcda541e9aa9ce15b9b50b4a9d657154559bb289d0df8a3cf0608e6316e06a575fd15c8d749df099d9cc1f86fe58ea263158d3c5e3ed0eb64046929f42af7166dae7dbd7ddcf2cb4d4a259eaa225f534e35b128564d1be79e176637047b635b27d5c5883cfe3e672091cad3b56943d910200de0948b2e82140fe8fda3b2fe36ae31c09d14cfc2142cfd5cbc0142d37c2b6a75455eb35944370dc6c4e730a760bd935cea2a2687ca1ea9b0c9192749a21b6b23494bc66a39b5f6cd94b2292d1b650828a35694b08f273cb6393e7f307935bc7368ae4c328953e77b764e9cee2a43122ce7a51fd38753b14c1eef05e7df9db198cb3accfbb4f5aa567c175c4c305307e6796c1eb8b080f8534a26711910e36f759ad447698cdc5b1377ae888d08c60a45f566579b605c7b0050a68f15df76df1efac5e4c757aba550c0c2a70a3a5b641ee8095631837950ff7b64f930f0c904bd4b6e44f8f2621ee3e199e0371909e8acb1b84c309bf8830bf07f675d5d57b173a24d5746a67e6c9f6016f458d8f12cf4170634b9c0d8c6307de822258a6635141d24008e5ddef31c84c50a241699e218de0e10cce17779168c20f3990d7a7534807ab6cbd1ff65d5fac7f3ea6c76a2585fe95214ab4e1e71f81415e91ef08266e46f347a30a15dc6e243a5681e3e12bfe9cde5a01bef71b6f9c0b3b7788592f883f833dd4e89c5b6f85613681416785f7d6be23da2503583766398bcdda6282b42f578db0e0bf74b028ffac14d4e6b36abd5344614d44597f294ee4b0019acf4ba31eb797fa99ae0c4459095ac7cfa567b21813a17b1aa0b2538acf4c6dfbeded3a23306d1b34c896833e8ce632b9b4b4f20dedb630273aa1a28104ce92dae3991ac981ef9ea638d6d8de2cc051141cb99481051d5e1bae0a7223778d920ca47e69b0e0a3391c7e58230f1e8ae8fa8cdba5bc7b1cdb7105e420ceadb239b79bf5e44e65d9a5aadb8f13e6041bf52ee5aa5248c35244fd906a655c20d47c0ead393ba6b12a5ccb9d38f2ceed315c745ecd4e42195806594fb16fb6192e222c6f95f564f86f1102dcd430442ab93b5ac7c4dafb75ae1e558bc99a3df63eeb52858ac8cce7ba5d0e954c6d522ec1fceb7a44e374a6ffc650a46780afe426fd92aa8c9b1db587f67cb77826a3207e87d8112b928406a96efddfea43e53741fee1f8dab57f580a81171932e5fbba291a73dd6dea19bf9d9dba453af0e1b3a45ae9c7dad7b9ad8661550a1b9b67beed41092dced201b6ea0c2bd01b9f2894b23c217bcaf4b03c1a66af2699a0dd92f41cc6aec513cd92a2742d0d1f3d2c4c5db6e11cccac2afd5ea01e67dbb69cf5733ceb116fc2982af2b134b63fc68a715ec6cbb6f495c7a230e8fe0ce8b9c0bde1a85e6b37b80e175ea7580251fa35dd95660c69d288efe86742396810e6dc540842dfbd4997e81f20ba7e1cf03eb8a9358d8f0908b7990fe7fec143078297b26d16039df15087964303b495bc1f65839608e002579ba290e2292198eaf51cdb2dd322121c99036b4baf93ff65859410b2ff0f518302c20cb26815542a4e3bee80613876f62dbbe21a4ce389d35b55d4912a8d6b25ddfc64b29e0ec16497ace747bb769e6dd4aba66093393acbb00edb257652492bd2ec869286a7c630b4c05cd6b4081d2ccaadc018be8b5e0c0559b0b91566518a3237a0cade992fef4c16b7d75ae2d7339fc1c9dc4b871c48aeccd8fb92384498a8249aa344fbf00a3589f4624eab0fbbb684d411b6d16b3a4831e9c2c15c4d3d5ebc19442ebb44863c7d301de44d9f31d05b334aaf1fd4d9a6838ac69261baf7015f6e2317f89736e3b006986303c0427f04c4e9686a85bc9be09802d79ca4632791281e85b005e70db615af550138550489c6b3444425951c444c9a1b4babf68ca1f4ce96b39232750e0ff3db051f5abfd5d49c1b0fb9d1b847b1543f48be50f238544c9ef4df177903840194263051f6a0c3ef328852da1c1c391aa48c30703500f4f3bd3b7c14754846fb4b8f1d3a261168c9d033a18df49af0df7e0e61f13bf9c46fcd33dac5680d0e07e98966b7daf327e3e7bd9049218906e5d1a9a16f1702771374704f17524ffa7b30c6158a134074393f597542198ec2bbafb92f82c7a0ce3fa87ffb5554cf28a775ee5f1d5ae6cede72b179e6b63d867837ad2eac85e300d5dad0f022c6acddab26562412dad5cd2ca63c02c3125c1d97f46324847c85646b7182543a9f7e17e9e44b96feb11ae6a9403b9867f2596d71070bc0c6aa9581d9895f6216c5d8195adc7f35fdd3f5f1f0c60bad456f913ea40879855f25caa2060a0c64cacaccea7174899c3fba79968257b3e7bebbb9cc2ea33a2a4f45f46aaf81aca885908e62f27c38a65d5a92711d86c33c50b04b65e9a857aad4feb8444b91226b19964b51171497271d397d3ca31e23f0305316285c619663e4624d78f4fc4fa4fdca19955039815cc4c9a12401d00c57eb1dfd6376d5d83b984d10538adc568ac14a9a6fe0cc423aa1424f10f043d7758532eae65c50b30cb7cd5e7e6de6908797948e7d0b0f5ff294c9d7992dcfef4f23a5ecb4f7d14cd0decf1972e61eea326bf804b72c1e6c6238657172a338d2e041f1aa0032cf917231026428f3b1e4549dcf55263b2255222f705dfb9503bbe8b53ec9a13a1e9b103001d3e48a99c08b5da732f34f99b8dd358c42e41efb4062012ed0f551033ae10a3580056c1601ea9e8e4f762285edb9c4e1b017caefbe5f1b7637f7d6b5e523638601bdb9c688e6f358f5eacd2ce8bcb9ca5a5b37d6872763d3e0c913e09e8cb88f1efc0b6be2b054a0a8934077a06b3f01b7dbf3f7480e95b2bacc610cf088296ca5433fd8c579d9849a3118307fbb317f72358c9cf3476b7e41e835e8eda9c2c266c88d2ff2c626f620fd16dedecde1c0efb5a8dc1ebf94488beb69c76910ed18639e2971310beedee39c011ef7d41372fd9682e36e59f8ac03eb3b64443604e8c4da0cb9020b6d30752b4e29fdae075253000e23d03d7d1c80e28e163d806574b677d21821596df8e17465dedad5543b0a42ae07d7424d2f7003f3ea6f419691905ec8636a9716557136a1f841b2f87ae7c663719cbc2b6c08dceba207fc8b1c9a6ce112871c8e85d8355699287753a345e4ff54e05811f2fa6eff5e6371cdffbf4da834a9e6f1a1d03efb9ab19af40aef989852487381eb096a857991e4aba88f39128d0286e60c89776ccf871bb098d0b1463f2b6330a2e8f3a105d20c9b21a688679a69a3241b79d32c1210a7f358c88a7586b7b3b951576b9e7bd997286fb8cc3da6d0bc1825e4c7b62fbf8860816b5b65ddc0283c258208f3e0e65ef38d97180a7d2c85d700b2845395416380f1388f7ea632217c38d979ea15d2ed82a222fea01bec259ea9155809f403f5524ae751ea8d780465fc5a708aa5d2fb89728025f5595094fab1e9ed0d510d98d357b30597bff2f71b69fcc47dbcf7d48e41d908a6dc4345d4b81f12e718b872229b51698e5c49a1113f95a25acf285b5d0d09996f0914cc65bb7dbb9349ac277a79042caaa1c475fa0813333d8a592af2ad0c3d7ace0166541a75d66cb63e52992e3e416ec83bad904179792fa40351ef420a510c38dde8bdc49c94ef36f6569b1bd3f886a66e39a753172424b55111a056a0cd058f032f2316e147f9431899229da8ebf4ead9f51a0dcf1898046577c3262be6aea8769899abdb9afdb9651eb03c406ece3d36bb3a0f25ffced8a73c3299318b6023718e8d7b6f1dfedcfd45d748d1006e60165cedde4ecc46950808a6d62a9e0fd3450eed4760d1489c58b523d17c95bbc52478a432dcfb68e029a8fc565f8260b907f869776cdbabed724da540f9140d229811b8cdf76bc346053b9966d08e867ac77b9928bf4bae8bbaea2bc62febf15f219eba1553aafb6d5bd543d5143eb53c384182c1c24c3dcaf8dfaf60ebf31fe35b9fbc1cec451546eb7a5c60859146a54f319c2ff6a0818b1f310d709b79d8562b90f44fbe2b0c8ff360d6f188a6c5dbaf95e480ac67252fbda4a3656525ebb25df9d5f937d0f7899c2c0e7f52da680f20253e61a252dc993abc304be21096e5b281c952f5c22451870f424b411fda15cf8939421bf1af077963a3140112835ed113e1e802841a36244e6758384caa601a8c4688e350ebd946e679f45cc164c6b1469e8cb90233ddc55184393b2b9f9b76b38f5d779642049dcdb4499ef6cab883ace9bc67dea94af9cb8c8ae9b275dc1aabbd377efb4c5dacb2f5e2508189d034e0ffee1881375cf5b75b571cca898d857269f216afd98640d78a3b2694ad0b204bbe3ff26592edcbbfe68b4ce9bca523f65d30cd0837182f00c4556fea79bb804de9788cd390db6702d3754c0becd7bcdcfb1e588fc57e7c1b088318a872830e44fb0c91950c2750648244971d51ea89ef464a2057b0dada8278014ff70a4ddf8216777aadc19514bbc74efd0b2a652aa5079d3a42c40b1532745499047ed8001a39cf84ee1d6824fe3429a8a4c99bb44900e255808ae199b9d28695642d269e1154c1874d55165ad911c8bbe252d1cc76ced41b7a917fee888d0f8b03466b9c895acdba6856d9ce1014302665d830932436355222badb26ea2bbb7a50cb21e76a7ebe1c48520a8ccac7e78ecbb1b3e814397212cb42185eb60b672494284f60a8f5fe5022c57cef4d88786f77c958579fe0d18b29975ae0433fb3d4701813ec5923e9e70fa749e35c39a632571bf26a48e1cd8b202a6dbe9d5c221e8b83c7962db24f363bfbd1071afcdbe982c94bc79d8740b5220ea1e5da28df14a8fe742ab386a5038740b4441663896cc8b930a4636399984b3784580b33dbfd484bf5b6f5839ecf2084ccabda4bd1d54256101ef8bfc451096f834820531ec404805cd88bf732b55327bbaa80f74078672943ea57e71bc71dc51ca4798cf94aa01aa321ab54bc7eeb0590ca7534a3441bbb746325d57350160d5e013845a5494f74f0f39fea2994d8b76b74f1d07e7c7e5d7e91b40cc253f7ac2370f5de07ef50bef30697ae17e6fb9c71176564f717d27d54a7cbf4dc4a97fa7152ba1ebbacc18e00748c770878fd783e0ce1acf1f5502e9362afd584fbd0dc06600e68f08e9605932dec09e2ac1ec823951a453e53f88ab90daa1bed774fcb4b724545aed7fcf132315b9e69b4aee3679f948663cd60c7fe1cd51b35235e1d051265be5d2f9d243dbf9dbe9fff25323771bd14721fcf72db3539beb15dde20b8c0bc34f42705ddc8fed9383abeacfc48ce8c589fe76dbcc2ae01f6d60cb9fed9aafbf19d86e6c30b2dae54715b7254991e4c979d89b56343a3dd48b35a07e8354b8f2a02da00121f888d3443982d1d0f0fa1a3ef05a41fff806d70412fc71372fd5c2a50639606b49e4948a31fd269f2b2ce5163662aaa5bafc95973bdecb4f71c8f073323bb75a60bf98fcad2fc04bfe70498a67d3ce0c2e1cf183d450b9f9f085a836b4cf1b8928088b7c0de12cee4d1b91ea3bc4aa2ceb42c201f1b2f613cf8ba037c8f246937ccd864a0db81188a41525368cc53dbd010c5cf76eaac826fa97b9a298dcbdf0f14f7da5a113ecc68c54515e406d36d538d6bc8de4c9c9084f3937ec7f084f0ef3da71ddfd73469db4c2bfd191b7a162970245db88024bbd44fe73d6830ec28f7f94bf22b386a3fcfdc17eb240202bbb8e75b79bad930908cf7c9cee3e3b9991fc75822da46713e11c212fd5cfe8bf560f83126133682df998fc9c75fb7bea12f096b5f8ad25caaa461a478f22fa555b1c0fd7d5351d689cd290a95fd5a49e83ce0fb4a5e5a3e8be4a430602dfec640330f5635f162c8c0142d3c3d1768859cecb76574d8c7e22d437b39e5806b3a486cd13b954cb66ee87062fc451319fd1622f15a566ca2a6b307bace4bfbd07ea37ae13f196a553c08f350c3b77aee1f2d8dc9040df8207cf3a3f199dac43818dbc2281e7a70c12d5a31c556984bc63f053e4bf0247ad3ce90aad5801b21ee9107108b356c5fc01df91aba789c9f782dca303ed8d8d2341108ec362568aa226519dd88dcc264957921cee5a1c8dd8a2d8378ff0c651d5d115fb0eb3dc7b165cc1f75fb9453c3a90e113d3498f68d1a6189eaaae24b242bccfa11b846d9afac6d808fd2b7bd444695109c681c45f432183e0528acc9eed7a11d0a943d09ea6d77a0d81816ef0b37646dfe035b6ce547016b2a86f6e40915744a16edc501657023031806fab4f651bbfbf081a5ed2df487e83e809c96efcb416218c0e515f33298ba5566881206dba925d164136499764495ef004abdb07f4c026812b28ac952214c729b13725d625b242e6c2034b7277826d41e87156cb241b15e75ce89eb5b8c70b59c8a6bd9e1e8e62f43e8a1235200f632330c039dea6ba3e0e05341deb0b55852978c504fcf23c4872648fc27709b6cb708fc757ded38b622df1158d4d0a7939e76edf5734f292feba274041d520c77fac8ea3d34e4cbb43c0eaa82f51afbf43b8c11f6f99d9151f07eca58b5562d00f364a90e253f2018e3ab6775dc2307ac79c769dd75d6e973ef89780a63e0768b4de12179d0745e087edecd2436ee65ae569b4416a38db0bbbdc2611ae066ede9c54c42ddd763b39ddde123ec443f86537b3ab4d6a68902d4b6a0cfcbb2a752bbd32da6347c7e27e0695415d920dd382e374c805bfe1be3c47be392d6164fb93d199d79056dd43a3115311e27645a6e41e6c83acd7c163b6db86c03f33283e0f82e956e614ba0a1dfbfe0f4ad6928f5a971a361898ed416ce30a3cf7c5b5942d090bc00a4ce62605659d358677557e20d553ae332c347df6a172d2ffaee09d190f15021fc9a7caa3a9f1111a84af729b34a191b0c10eb56f03524ba91a5eff3539deb1c2c0b7fd2fe487fbb4d4c2a3da27674b9aeee13b0f85d3750653c23727402ecc657a427fbf1ba8a66107f0a56192a645163921a1a4c223d010dc10524661142cad27a3e6e7fc145e83c1c14c66a30e607968744e996ce1211bc90834ca0d812fe6ad57313c20af419b417aa8c559c4ec382141f5cba1499b131562da5aaa960a97dfcf850645d031f498463aa80f2c608529e7bcf0864f0b8661d0f98ab0474408e8a0ad66f7b21a3c75abd03c65fbce5a5903c189315219cda52435af51ea1ac630b635e057ae6679eabb275402c7b610e11dda364230a740b70e370359279c7a7c6c9e1ce919dc3147230e7691d9dccb8980867ddf4d68098e74b1c7a87aae8f9dbc03447f9a59580288d52b417695dfeaa37e8f52acc615c8655de5a64543f232dfae30dc00aff34113be1641d32f9848de49dbf1ffe3880c4d3142ae180575f19e03e1ac85787845d202b12e95e8e353601e0e2031878582cfe08df523d7ed6290b82ffa7640d3b6aabe079904a71ed68f09d173833d5e51dd0170e75c9c3959e7af8cd43c431cced598a90b24fe09e146c600cf7ce1a7eb6538bbfa7b32a5f51e319cd3af9e741bccdb0384e60a4da66a5409f3af8b4768cce590a6493e9c0c2170b9f4bae3c0a3c4ac73d66e910f37e3e376623001ce8305d215d76859b3a19918709450c622afeca514c1aa8c3ec6d328eb7a74f4c6a4349d2bd2348f8298eca33ea11f82d01daa0da211d946705a20255cf9fffc729f8ac49f19e573b7c11600bf2bb0141d1cc3d50339eeeb9a35ae743f6e016e00880fc4f378cd8005d385dce4ed439b040784dffdd17dce1d15a1aaccadef4021c6b54fde8c93e354f80fa2d6a70be11a39b5457be73624777c941379bce1e179a1792bea008d09737bce16366c2d9d8d08767367719255e4c12fb52662dc9e6fb5b37b5db2ae4fcbdedb3b80f46606d1b8e2c4699302594e43a765bab5f423a6ac3584d65964d613ba0e62f7a73a2dc4ea02c8f95171f30cd5170443cc88c3435f939aa600c9521d0530c725bcc5bae7bf23423e921d2105f2722913a84a57e5a46c40c50e254c7f2a4491904129d18b1e4bf579b15dbc5318ef23a5a7d0eead8a939a28535f6af4703224a5f43ef793065878e1aae8a58dc74a9142e201ca9e97eb1deee75eb34fe04e88acdb1e860439cb669548fcf5bb5b4628daa5db696cd64250c5fd9503fa188592b90190df89810f577516595f3c59de5ed4684270c13f3304def325a092745dee85098b739106ae786d01b48c56375affa68dc12130d340a0081ca9b9845c14babcf1c0cbcf15a87335445fc2074658f627d5790798403762276d6a7bbefa14724c6d9943890381fa7ec39bac21ac441a4f2ca10a0a00591604b1fb294d320573412c28709d903e768627459a1693e8a4010ee3576b6547670f35ecaf4392cffadecdc91330852a11e3ba23e5f159300b18ffc82af04040ff11a6ac98c860cc75f4897ee9ce5435251d26e937eefd8a4e6d59ab14b1a5d10213cb7f6c63368cb1231746232a9bb587a849088120675a52b681f2d785303837cb3365b2a8f0be570cbc37641a930b453f2e2e188123a89e8ded15621acf85803e93bef84d452e62a6a7e3d4a21a19480569ec1d1aed260a01ddf37086291143ae726b805ad65fefebe73e1cd4015e12e259e2893fe6908f3dfe819acfe26905e5a84cb1411a36c025e63583a11fd34a8df05c5c1a0608cfa07301783e37a8ec0207b2e4e4935fd2122b7ff5fc13083f69f1fcb33de4777220106b4522c3de38cb0bb21160832528d8380e3d199a729676701df64de423e3720bd703dbc4b5f024bedbcf183446a689d30789c7ef8244e25cd39b93b9caffd4347736e811443bc0d8bdede960202a690923aac65d4fbea4054364c69c9cf3a717ed34a11e8dd80258197e055c56e11e3fa5046d4198e4820031b793a04135e178846604a83ae2be1ecef164394b575a7d569e092bbc2a40a6670d53fe65e688fa096731e1784a8835395d42d8c25fd29376589467db2694e68877f614b772a0740d6f733899fda77e617e9a022463cf67056ced0fdeab46a3e91088e368ca538dd43bbf368a66d0ffd84af0a17814728bf14ded864f01fd2ed5bb91a57a36ba92fbb4d86f128a918f625f7c899aa14ed0e7a5859bb21d5684ca27672f5157c42481f093e06cdb4ace12351014e3c50d6d0bc13949532aa973822ebdcacdb66d198ce96b4056f8f4a9682522d8efc85872320da3e99683ef21d2da383f1851260c7c81227d4ac04a16b50b3f4ffda97429f471abdc45f9315753ec5e2279fa9f96d68def0b9b101f90f7872628077c76dc4cf595919ba734d0ac400d60bfcb634523c9570db3db45c89c05ce84eae1fe002e7c3b8acfa46614b281425c3ac0374cf41dcbaac547041fec521a3fb77821867328ff7d2004e67ccb8c9c90c7842ef59fc56d11741d20cc5780cee6dea7391e58f3dd35b23c2b5dd48fb6f1cf252ebfee177dd493fcb5ff2f6e8c33c0aad3928d97b2a9623463738734f82dea2fe8636c528a5e89668368312fe08be0030ac74a85b8caecb0a16e04bad571a88236afafbb6e4fd0b4567a5b7113e1c5961fd398fb1c572747950155fe4c5184ce348647a8d7c95079098ecd2ba02e7006a5917c960216c59490e9938d46335f0f0c01b46826c9425c37a1b0f44c51a5bf5e2e7c12bd14b31cee6d6b199717eb9fc677651b27c121f132f3d8f0d2a55d0ecdbff6be98d97e265f2244104c369137980b07c7b38d93cef4e69c2551e81ff89d3431f4952ab2822697b861542513375a78eaf99dea6965c2276f45e8436221217d2a59548ee94fc052d63a5033ed3423f0d6508656fcb299c2638f14d535769b95419c416b37a9c6f3653a342bb417e882180d5933649abee183c0cf4a2279c2b30dc5e1ce5d474d856df7875a4787bce01dc9806f6fdd52d69afaa3667c4496b2940bbe787b35ea85f438d6ceed03dc52e30ff9b527ab6697439d71487b1c20974036deb705c57fe7f0be75b2fa86147c795c572baa172f4574c765a9582b081a86366bc7d0221009bcab2d11809dd901a5639dcc2b75086806367d3053076f23f72aada4cbdb8e11c0c56212e8583ab1fbcc2991948cda0307bc3914b4040d2da26988a425d1a546d61764c046464a3611607abf56c833460fb617dc10e7e1f8c6a46a80ecf4d251f4598926d6cce55b1f64a337f92eadd9828e90c8d9137a1cf772b6e3686cfc3848c7ada2502e9286d54aef71dd422c5c662f1614d0a674a69dd6c6f1a2024b1ead6830b63adffa44bb1aa813460d0f539929cd5d9f763c77e1f826ffa3d6cfea5f5a4a322e530072ef7a686873bd99c69fb082e71639d34fc7123a90c5e4f9fd77edc8e926bce6742ade15f352da35206b835fe2bd70bc09b081a6a376298e48ba6ef0693980e329faa5885db344d67093d7fa80833fff984775a906542234037cde3041ac8de38d9f145c6821146f18da0481d285de7788cafb87725f8465d649704f1bad28236dd0805f9ae5bcef0628899df1bafacc2eb062b2e8f626a35247b444d4338f0d836bfc86b928d98e75fa2af048638128efa130fa5f2e12f1eec7dafd497dd478881a5a92fda6c98a0c0d039d7499aae4f8ef1c653a40581d0f702c54cc1dd950e135eaba8d51b820b18091a8281d88b9aedeac537779b0b4a8bcb6a9cc9874f1651f4b83ed7366e4d59edc662f1308ce6ac4a013cb4902f1778ac90acfa5ed6bad8940b36a76e7b0db98a0732ddb18374fa3e311cb310c18284e79ba2305d9b9fde5b3ba5086e4a6af4e8af476c87bf393de87a6332932debd55055dd682165ca9c7b703baf9a6d86569b7dcbadf515ce4559c83ee9fb073444f79e6c9bb37ce797a871a867d326aba92732def6fafd6b12fbccc78b195446a0c6394bfbfc76586b4ee8b38e9319c366be387eed8de6db7283188c4ef60a07f4f9dd2875385a1f9ed7c821c830bb20c09608d664db3c7379b67c7964085c563dec502cd099d2fcb4c67c2c4483887af8f66f8d806925806ab72e43c6bc4380e9343f4cd3d543954053c6bed4d25c5e777d43bd638bb0a5bd9210308ef9c52ee3dc5c85e8401e2095333fba0a0a3b471adb400f44df1366b7257e2cedb978d1f3ae40061f97b84952e8718c2c97c043590d082d572d08307931e083e332e7403bb20bbb0a72c12ec60dccba5c5ae88befd0da24c605480bd9b71954c8f1c37f832aa9a019173a78db76799ce8c59017181534d5349c20d7aa29a1e536e460f4b5afb1e797a1b87df51508f8096583e108fb829b2174432ab62479398512601373092b8164b2f3f32f32b4778bf2fb6976dca43616808456857581ec5918e0badd5485f13bc60a78a9d1d5708455905cca708a2685fc4ae8844f3c8d877c0a4b7883bd2d42cb112eafbe47688ec36acd802ad325ca305040fd381f8934e1fd111d90f03281b3d3f2679bcfe1d8821c89429855130a226972e30583c7d0214917a8bab47e541b473438ece925d9913f6d7f44fa8b05fc1fbb457692b56ab0625b82afe88b31cac331c3f40957904bbe2cd2d91645ed512fef272d70078eb3ee9eceb7d6575d49d5c5daa116c0a22974f94ece21474f40a791371b2d7aef5eea10e6219110661716523b09ac593538bbd520942b9c3ed99988aab66f7274fc9918af9e6c4f010c84ae9506e0953a43edc695123cd6784607b7af026ab45b7e0b21132609b98d20321cd9a181f3ffd374da2632da48899d6dd7cb99822e9aa8a056bc9c41cb5a419ebb6ded686f6f6927dd7809fcba8637121e2df48fd751a0f19f8d709d8875d03449c0d8dfe7da318538325627fbd93991569848567788a50f6152e0ab7455956b4f5ef98e497547ca0488dac96fbf3ea4fbbd176fe81509febf57702b3e459e55678bbe515944e50d77df528049232b37cd80e13942da64e18e361230357cbf8354f3e2281116d9d3d6a2c775c2c12acfd071e831dc47a203f01cfd55d8bef3f318c89cd32855f331f4daa0dfdb2d962344b4b66dc55c37ba449bcb69868656a2c57ed7947d2c90477044171f1eeeccc85f68e77822f51ec3e932e017a5581e854a8470917136b18bbeee773061487071642eec129e63c809889ae4decd9a64757ee707eb3a8de28cef297ec0cfeae325b6c8f8738ff8d3089b2c62dd79d0fbeb5daf46f7e69d185762dd234bd39fd5978f4447e3092d07908ecaca0731e32614b78dda1ef75b453ccd1ee7758460c4551fe09fda33222d0c842390110d747eeb7e3e2713c7a138fda33f2fae891a20cf9c852ed7e392bd689d73817904da2015016eabaa2b8f3ea7e7a20793c2ee99278981fb7b6566f30a5544878bd456c56715980d12f586f6cbc5c18892154491834cf8fce7e24e1edebd8da3b5903a0332d8f056d7fa0dd0a5bf6e929b7f9d0f63ecb668fd85af8e816a3c9496fa0f76f14e8428aba337c430b8e2e1e537f0c3fc762d1d46ff9cc36af9099f20d4c8b424bccee5eadf679fcc84c84a1f001b730b6d7d29d7b6c13a8744073611db2ed9fb617d1a031fb879d195813b6434c3744454654e4773c77eed61654e8e8494c09ea93dba03f697073292e6f153bdd0ef144c3b1ce4594573d045344a32fe00a9c5c79ed48ee0c72ecf9dec8b8a7df03032663b66ea5d6ac40af2887e903144b427976a9cfa7119c8acb701584892be2fd66783baa0ecb35fa3e6e89b38321bdd3c14cfb2a790ee8777ea7d76fbe18ea64dab4f407e7cfbc420e08545a6f1a29b50b2cd6cd0ff19b0335efda8efb54345fbc2511e688ace4fea2d8fcfd63a2d0bcba29c46a78de01dead25cb6d31d99a156da046afed7dfde0d80e79cdf9765d4cea03ac79aeca8dd057f2c007d3cc2ce15b64517aad84688ec6da01545e05f03c1cac9f904d0750e44a7af8300261ecbd3e10c9fb663aecc63ef49298be1d8b544b50760a343cb8832eaa38fbbae760f760a6fc2ec87d6025ec839d04dc150c388ffe16ae971b94c67a4558faa9288f93615c38f715052cae46a711d682c9760f0ae4bf37534c78c625a3530d9d58b9b2e357f339ef1d6a850094b26f4c4afb13e5cdd005a7e79ae5af54eab9efabe77be2397b6853fa19e75f0fe366919f4e9b36e7c81848373421d0fefd33374f1e6308049bc4cfe509f426e73ec2c34c1092506574656b7c912fef2ce323f14b337ed3d95420de06ff258422457d7f25831a14e7df802f25f5a66a2f726718b6f155a57d29e3fc6b9ae2de74c43df1ed495820c1413477b5d5c145b0623bc138a4c4d5b9d371885bb6e6021f2d2b398749a3d834ddfb47d0fd627941e39c698759e7eb5a77bf432017230fbac530c6c4fa05b02efc033f7af04da63f400135b477722b87fe92e1f2691d2a6b7bdd49f15316dd1432dd921aee9fbd01e277e8616dd35378c5cf3ee732883e48d0a3fcfc2b6e88aa7037dbe26c2c62f5625f43e924c6d5953850366f58ecfec3131b3cb1ec0a13e960620337cd2a6aee75fde383c5ce72cb2046a64b9a6f4eb898c382cec0ce44d4089ce7eddfd02d699b0fdfcb6020fd6d1ddf201bac3d04fc4f93f7912da4f807818496507a663652b711415daeffdc07370cc4b0c0a9acc07fa06a4dff711fa5805e94efb570572e7f0a0b8261b78351ea5d15c316c621724d1844cf5ea4e1b0c2780fcf1589b024cedb65b8205ab77823bf4b1f4756c7dcf004864d4cbbe66cbedbbdee3efd5e1efad7e071e47722139ae0b78cd0345e7aeeccbdd90363e1a1ff52de227964ea0da84363abc022a70066d0758dc422cba9805ad793e1ac6d06c1a06789373021393b134eacd31e018e5b4753dc6ccfb572fa92de4d8371ae0ccba583d376c1297a8d38872407b776397b2e217045b4a3078e93656ce10bec1f0b99af204c146a28cd6b8ffd2c95485982cc1634e1faa888bd32f24d3eefcfa294c8e94a8ca3edea02906e4b186cd02f6b676277bad6ce67a53132e70513aee992d46b8c4b89440edee625a137fa806b0b4cce72eafe440dc958c7ea89ead768d7fdd6f16fed277fb3e2e0f585ed6ff562f6d3d2d375c44c3e7b0bf045ef9d6d4067fab5688520016ef960c6e4470ffd7ae5760c96575ed5c56742fdc165905138fb02351ca3f504c8371bb634c1675d828fb4767151bdbce6e24032e01ac344a1bdf36b0dfc731a1db161c5d1e8cbd7ef9e0170cc385edb7225eef54dc516ed5e85d8fb8fa88031c6b0c5e9927fd26dc02c5e0556f6c2d738f7fa2f85cd33f746def882acfa768a7918cfc91eea2c8e482789c7337021b012e008f92b9ca30555947af6a74593076f2a0108efe47329a1483f6fc947ba481a0e352de0360bcf7340efe2e996631880dbd19fb762b745f597d97e702e2846f20916f1bed17dc155a9f4860da4b37641bdf4b69342d4db2c652cdbb8b1c940878de0c737e9a50037bc85dd8e9eddd49909589b9c76663b27643039e260118047853d6f0c678662e1f458d00f15b69326553f0dfea3c75f3d0c2e19a8a5c66bca1283acf8d640d58143dd3db3c498cf933804c3b59c3b66382548de66328bb770990543dee1c848179118ddf58929827603792933fe77c6ab2fcb3f1cc9aa9d594564b2ffe9ace578974b1fddf2aab27cbb59ef61725c90f62f4b7782748848e7f1484f9e53db3268b2e3d1153cfc9e6f30f4ad4f962cbccdfa3826143d9ced190e096f094841aa61e9fb51862cf1d3a7d15f9ccb4badc953264f7f8226fc33651401e3bdd6c830d5d78e42b3ab778dceb70e4d169f87edb76beb65cdb14a0d7f84705e053576763a00ce329f6ace384bf5fd17a36690e24db21f9302e2c8fabdbfa0ecb104134db07e20c3dc16026a3689aa7ba0c6d8af8615e11e06ee4ae0ef0b9c2a2ae6ef906b718e77ad03e2fb96f515ca060930a9d8040fa501be01bf858dd86876b38a6a882a915466829fc677b2665ea68254270fab355c24183342767c3ea9eb05c56a575a7baff1fa948351ea3c52a2ec859fe31f9b4759a1eb636d49105c05b2b9bc128ac05807d1ffe2d96495e0299cdcf6af22ea3cd0a133061324698f5ab48d8a36b8d4524ee50f6b559df624bd54e7d0d88e90844eeac5dcfb62a4bd621004f5a9f127919c273b3eb62abf1a334e4bd6dcce3b98dc5d279ca57c303431a6802a315b4d126b17a935e120d71713b731fb78cbad99d3ad850bc6fae1adab375bf879d9f631ce092405cef727717314c6bff7e91e78c2af539cf059a6e1e8e47d8c6d33eb668170444facd974757db573b84687c446c94889f7524b04d12fac94117643e59b9131e53916a9cd51f9a312418eff63550767b06c5796276332bebb86d94f2ed8fea5371543e9d6161b5a1d0b0ecce506e9f6505ea831e4d7171ea6e02a24f4c3e9c3a5a9174589b931fa1468836551ec84026293505efc3f7986b0e468e1db5ee9ebd6aea21d6d346d9ea60833aed4adc17ee9b083cd64995ee2777f75089cbd598c3ed3a6f7bebc73f08af8da3f954f04fb64bd157e851994760c47dd73ff4124ba74c90cadd26555de491538730bc18c62e35bf3ae5a518bd9b4c0d4bf60329ca2020046e909573599286e6d0739dfcf1426aa8db5a697e7c9ce60f5a7b5a8789097ce85d266528e4ff5246acbb2bab5624e6dba4571204d8da333e64611579a85514211b2cfdcb38db2405c7fbbf57b3dbf5a574802b2cf6c253bc5c502fc1e5305bc116b3887e931f21d988271d25684c6ce4679b5b7798083d8bad6be168dd6ea721da64fe15ecde62ca42890e59e2a6453a42c997f3dad3364e06a582a386921ae2eaba0c9bdaabf3064225e1fbeac1ac3871f585fa72d07e260c01d838b05cd8d3b17dde7bc97108af545a806dc4ffa63b06b798d266fa28ae42f73e842849542a04a7f4c0454dbba034167dc712c3be9ab787aa0e03056bd6d6bcfa3566164324d00c2dcb6fb03c7657563efc7a6ae448570fcb4b2eae4156497efb4846671c91d4f58e40e8b84925ed4050c733c68981d0c71931d7241c55d6f24f20058c350e840dbabca24f08fe135ceb4af021090f73a97dd6b2418e0f02aa8e9d48cdf59daca471e6e42f9ec8b528c8a32c63a38b2695a221c1425eae8fe786adbfb3c37aaec2486198dc0ed71f45c2f85980b88de08869b2932d6d0b4054b500d335fa8626862dc6f3c4a7cda0e8e1139c45ceb6b2c624a5ef6c8593051182f538b14df98df9d82056ec94a0d16ca78b60ce94490199b383c1e3a8479526c93fc4c733eeb08a18082b23e83803b3c3d9c1c69d40a70468593770d2f6f057feb1132ede7d8bba52b5a5568ad3b6079a01525c702cc78fdff06b8086869341fbffe0cc068f784ca733f5b9080cf401967e8c38b1ef67b2424439427d34d3b56e69b0ea339b2717102f612621178b41c177c4ba1f0b8e9298f0932a0e6badeee97763b120fc82368a143adc874efaafe6984d56fd31786bba1c8e2a23ea378581597044aa76389d96dbae28e6e948ad2be5a18999260719ce74e5abf7a12f7c30c4f1b41a94f2b721ec65c817e84a708bb4271aeb40179bf3dfe8fa5bfe9b99937a5765455d0f1f0bb16dac092cd580c47989b359815180b7a479fe9a871a03d36edb8b8000bb7d4634954e68fe5fb365d402e34d62568629bb5f59d5c2a3360ee679178216e00b1ced94945922590af974ebf78f50fd6d9f4a99b11b3d372f52748cbebd7a2dd026e56d121c6190304b5ca550576748730a08ad6f3c517f313e4d2c6c264d84eec376480d5c6dbf701fdc561575e6ff23f02225669a859c71f6a4b308ba60e39e989bbfda2f206e9be0ad6d2a6b2f7431db88eb98fa577d05ed3d68d956edb95834d32ff22fee8f6ec27e2d0a9e7b7281a9ea46611e198724260808d4a90dd1048b625e041431bd805bfda2ca3902cf31384b63136815a736ac1327231b0f4a8ffaf2691e4bb6eed5fb25ab4eb460db0876a3a204927e4a8dde1a7800ed98ab4c1290bc16ed934e8f2d06521dbcee7227a08476fb611efb9a38114de823b4708114bf7a1996fe93d3a9cb566b6d896ec384c5712f3c457985800847a0d952fca07bf777b5ffc8466c7659fc4231d509142099d59a5e830c0834484796d7fabd1ba67561d79534269c2c0695188e83682db45fbe1d11d4df74098dae5ffed8d913bcd6c2084bd570ebf4688e20cdd93b62f87d4f7a7cb118dee3f6c54cc92628b91de5f639ef37df236aa656e2416315bf2170674bbfb06a28c4fc949738f2ef386a0d9663d5c956129d0924073dafdcac05a0e15b4ba9f180fea1bed57a3b4a239aaf2fff573be40b4ccad43124b3aee72e45cd3ba2edc9406c9b24c482cd295640e2a660174d0d0572e86c33a263b4c46864ead4a197756dfb8de8c4794c3759a5d36397f59794b30d547a967faab36acf267c3b03ce2c7f3c7c86d4257a6c30438e98884e992119a70528c8ecce5d2a1619f77f77d29bbc65bd8392525c996f6c3b557b7f3b2a91e756409993468fd7c0166289bc9b3074b77b806c2601850239ae10de9f6756c6e9de2e7c66f867a03b32d6761eeea29a3a420123f337efe614dd048ba71dfe766f980a3c965376c650267389f7eae6e4022f374a66f2455033dd51757e2e908d9fffc32693a3e2ea81554088ce018aa80fbdf09a32a3a1e48a277102b76ab62df3a9ee9c79277a5f03869eb7869bb50def3502dede8877cb081d041e699f7018c26ba975f4f80a9f228342583d03fb92dbc41a7b8be6d6411624ce09fed598943483b1f7b373c2ccf8b251401cf012db3f56a01d68869366e2513b34eb1600c6beceeebcae7703c791890cd0ad39068abb6085885237cf88d966e36726fb9b93e1acb4d540b5178b6608fb1831c1b16e0f53c5c12bdd4fbf7e137acc4ac5d7c245a1710eac1880e4ebcb558115408419048d46692ddea1de632f407385d3521f59bb1e96493573053236b466fe9cae183f2c37c451ccfac21dcce28189811fc68b16d2ed2fe09a04f31ad42902fddc7c7f0c471a0dde534acbd171d7ec00daad1d3be804e43a0682afa103aa4b64c7e7ebf4d8a172f485cadebaab27120cf7b7d8705f9cb34dc9f61af7c2723f6107408c8c6fe03154a97286e41d45ca42de812f7d2fbe526da62890995dbce4b6306f870f7764c8ac90fd68d4a17e976524a1ab7835a16cc7e71e6d7f5d40e50b53f589a43ad8d6980f7d3ff6e24c5753d297d730f3d57a2e73e97ca2cf520bf302b34aac8edebfeff7c9f8e2ccb24b1fa0289ae490503f1ee42ac8256ba3b57e0c0949cfbc1b57879fe5901e7f69d5d4959f88034a18b6ddb4962ab991b327df3870f5f7d0f12f33d7edf0e2f41237bda5aaaa1f3f880e54586749ac68b00a04031b6b861b57a6e5f2ea5c2d34ca4620251347764e395afab0e967b759b86da9d086a12a32720f11d075d538d6ce106dd27a075d45d4b47748671a33e4fc538b9a64ab99c5b4d34f0755ecd59837c8fdef2bd01b23ba6751ea7ebce737dd9a3d3a0f8ba43083f1f43ed268b24342dac505a4160cfb62e15608b8950036439f50e5fd7c2ed7242b263c14e21186b9069c4090e0cab12db223ea681540be35067abf0334058f60e9043d681e603e2127ad19021407a4883472e99f3e323f4305bdedc06e00e87cd03ef28824aaaa7e732c9d09acc763956bb36f5a2a10511007cc3eac7a30712f43671d419d007dfde4ae26f57a01472fbfc0c5658f64ebd212e1beb961188058de07e94ec01636bd1cf797703cf5075b99a43f952d3b966577dc1eff0a7e62a86ba9473e07737cf2b3811e534b4881669cb6ea5bf93c6371102316662995abd356bc42908a85a5be3c1bc659bba2ffe8999c0583e531188fe54fd4e1c1e2a5cece2491b4cfcf2d0a04ed3c61f0a2c0989c6607b28d4068da8e152d30f8ab3c71b293264dda70c8833944df107b38197854fe41024b2645653ff93ea1efa4cd4f7b5f6a8cbdd925dc9c69d97caaec80acbc545b5f99c330decee5b352e8da963cb7b95cad8ac44bef49e350782fef737614ec43cf0adc4dec0bf6309ef9638539277deed3f429a2362e1261e4636501908775c930c792b03f398d0c57df4e3c270a86ff55613ba5aca0b5cdf22bcef54d42fab098860d7242fba9199294016e886b076611504a69505724006f390545bfb677aaea2eaf99bf0862ac7f0c432ab7118f92333d659b2f8fcf71ab5d8d122bb11ccd931cb90316c95c637cdf18c95edc27baca554fc090e5c8dc60cf9e93a2a4928036a9ade07cf574448fc6c422eae5889a6c54b00463148eb2d4d4a64eca7c93ab939c3207aad0d94ba25e8b9f31cf7b3c059518c31407713dc0f46b9c7439f85c1b1483af3d1a8935a693e521b45233988b43470c6bcbc5b471ff63261381001e15aba936670763de4fc7918eec2c9ec25e8aed59d406a93b99dd0aadac9383d003e9e5ee367e1c168cd84f75c7507483bf1f972bd0f3ffb8852a5b523a621a26144638b0110c07ba4ee0f088f6d89ddb9984af98a114e6c6e5615152c7392cc392f19b903549d9c8c680fb25fd8bc668a964162aa76e7d92f72e61745ac59efb7baec5cefb50fc82f23790f4cca05d6861029980ffff171272b09e2210effefe93417c857a91d55cd5f2d6e27bb2c4fedd55a957a7aa81f5e62813a0e9e1d6bd14ff39951551121b288c40515965a0ec809dc919dab0847c39d30f56c3eac49fb0c8dc330091ff504077a3b85c0de97d23a37b85be8201b2afbd7928a10f467213dc17cd38656b425ebe31104d548d2cd7b66451ee941ba534fde2cf1d9edcd3f3c803375ec2b823e2459382505407e7eedeec5a83086af67b797ee74d7c09a5ca07420e27656f96730d0c8ab30ebc7e26ed59069a6f99cad338a298fdb1889c09309506c2071f4168b8ece3f42142f9c77c53a3c036467f91b6a9cdb7f0336403907506e998722c75b1c595f0d065e3693767c33a910599e8e552ad3c5b8460562c4739866fe88625e544d5eea74c4580df7fc45dfd8f9873b614fe2ca8ca5fa97057f27f79ceda5eb664ba63aa5d7358c134aceab42104b22820cf79a8d7c08a157d7eb107278d5c52e9a1c97cf290963c78eb89f951bfb3d9ba03a023c7d84ae354301a5ef2b87cf558ffca76160f99c3cad91a80b36a5393b846bbb3a919b621f5a43a54169ac46f87b5cdb0aa74e7bd863132c1f289f2acd11ecf54980cb0db224651a2bc9ccfcf24400a8ae796174b772720fa977c34b225c51b5e1047308e70f57c35e5180ccef2f575fceda779c186e3e72c46349842b374873842504047f649d9637124168fafebb3d1771d7e42a73d51e703f76390e50c896d82c98b1c2893512cc21daf73350b77c7574f284c99e2fe1c5e1e7960d51bb4389d8bc5c1947f694f34f752325b34dd96a9ad2198c83cde26243c0bd7cbc8638fd4f9a63d40998098c9451c13fca78db75cc0a2a55addddc8b57a79da593f32ecc7f23b31d44ec66ec73f998e70bb91b7bca6af2b7b67d3abd2b97b9707737144c5916640d740d39054292eabf19e88ecc7567ddb4bba39cd55d22921c4fa6ffac2933da6651910f02edd69662fd87ea373bf1dc9aef6581ef25f4bba3c45629c6fdb6d98438bc37a56a45f46c858300ce4e78bf3c03cdc950446002739fb58545b92707548e6048abcd23886a39ce4238c580f06b1115da641d2aab43628771732706817380f04e99445c6caeebd54499251ea17f46c3104e1eeb6f3b7a46376fb95edadb264365ad27f4bdc9e0d028aaa7c8a44481eb5b1b7c3eba6c5c019130de17acad031bc1a005bc06cbd60295da0c753688807aab23884fa109f6460832d59cf5fa888f6b73f9a472d82d6adcaec069febe8f66f9f93770bfe5d18626401026f8d8bec390e79e5741f1da8900e590dbd57f84ed1f2b67ca45b5c90d4c928b01f5866a2c6f2e9f58584d160199431b80706725369cb3e3a8ac22c38c2dfddf1aaf11cf7dabba0673f2c38d3c97a1baf899f63b9a2c528cf0f03ee623ea646c23cbaf8a63cccb89f3ae3fdfa89561b1967854cbb04bb2450fe5c9cd63ea878c9681fc2b2b4529b3a450c41ba27d35fcdeb02f6299799f197ec4ff40401840cf25d81fc46b28c8bd42ef18ec07ea98b0eb292658254fa1a1a0d1188436f49fdc37a8e1dbfbb4d35eb956386b0d8ec391bb4dd8c16ac013075a4dafb62293e7315f9c1af792cc738729164615f38fdfa18b8f1391ebb3a1fd5d95add7d676255c042f6311e22d900d3484202ba2b088c6af3c1c62b95421ab6027dc0b93ad82cca1d69fbdf927796c7679eca93671e1bb27422ba4ba292e93aa864dabdea1daad0c3990b4fb3b9ca7f60814f4c11960ad71de487e346979ae38cd189d3395f9bceee361437db37c951da07f37f398904ad73e24cda89855e422296fa75f77e4ee20864482e2cbc3e62335630e3e8d3291ca1333cc9539af502deafbf07506a72b2c00b088e3f18b2264962100c985afc1eb429229a6c8665f94c36fd39bc53b044a9395c7a3c01bcc58d38e0e2da562af4c771fbb1550ad449988c402bcbe6659fae31af409f6819df9512ff39ead30f1fb54ec9983dfe5c9fafcaa840a679e24777caaae59781070e5d8a59c0e1ebb20f5457b46eeea8881a13853a8519968720c1b9f0a7c9e7353de8e83f7d39c5e3054784a21491dcb3d0ea1dab40668b944189cecbe2ecf41a2e4254e8542f21bb61e5b51321049a55548ff5eec8047eeb95ec1a6f47289f8e717148ff004f5085a1c3476a0ef8ddb9e720326ab3ab7c00a3a7d774cd6a631e0298cf880d4d872d1af104c807823561c829e057e15a0d7ffd4507e203635c2ab2c364884e71fe712a33d43a16107a7e56ee7fd1014b2de6bc4b11636a5eee88c38d2016a08fed7c6a825b23f5b4d15408a92423d3114848be8005e56c2a068f89586d29ed3e9161a06edbebaf625ee8be9f8695c92ef0d6e85f1fd2950bb2277445ce0c6a602ff98879580518d7e93f4d2dd642ea5d8a2e487409fa244a199259b7d9e6e0a2711900c45b61be8d9c09c53e838ec662516d9d60e8143288cd83ec8ef715865269ed8a784278637da9a134b9ddf39ea58f82cc594172efe27915d7d1c1883d8ac63384a2da6240c5b60ce45f26a0c607699c25c407a6b506e33df8abfb3a0d20ed5cea8e493541f61d09a10c1291681529ccfae6ac300aa0051944bc2ccb922f07403f6003f8606a142375b0858e1db4ed05ea6fa5055bb0831f5f4ad0e46c684069dcc5ff22e8465067e01b57a659991f0cec6c80b2e3648865ccf207d3defd5539ea201b683357632226564d1d0d912ebf49d6011013b310d227cc3539d26d7217aba984ca9391e57dd96180141598beb8495b655d63d8a438aa46d7fd49c6c47b6b7db8f4dd11d09d836e929f731351dd6f45eba2fee27837485a07727c7fe9b86f1a97a15c9e674cadc6ac1ab4f9c97516920b2286792199edd583007204594bd2682980cc92522f1e502138a8069c982809d42b47d6532476b817c04a9cebc2db822255c35823ecdc589802279cdc11ea16f1adca8510f77924d532b05f6e6ba42b16123773758be4ee187599b0bc06de8a7109fc214216efc75df99ed09d2f49291a7ea566137db6208aa224b7694b798359d350e6c34855e69083563297c99b28e7ecb56dbcd0dc7ddfe5703accd3fdc5205dc589305462fb4cee62e5fa337b0e8a750ee8408b1d17f351be8566c7120e2b4bbee50e3fdf2bca76c2be786b23e851b68ba7944d73149b433488f2a1621ffbb17f31eb5563a6f1f8ca0088234f0bd37cbbbe276743c24b4303dc14de8a1100a43e3d280b7e992ef335481c6d4a510273d7bd0ac348a0f9da3eb23b34dc791ccc05ab690572fa780190bd2438283c3f3cbc8952bf68f4d292c3a00143a7edefbf2b0ecd4fe851d20bdb873a7bb90e0935333bcddf9df4843442f6ac1245b5e3dda4f4ec6eeab32b39cbc7edea792174b2b3aa4a5eaaeabe3459fd115c675f158c01b6a474b911692bd637d12a2b2774c0649fd3d670009762df57d50dab0aaca4858fc5be596cd6f98b3baa856ad659c1034a8eb95234b255833cabee7fe4d754dd89997b7542d12405a7849885d436e62d3c49eae50b8167382d1caa88fa4119520aa28fbaf7dbef623a00aef98c843f9e0c71ef0d99b33096bda8d046e09fbd42a58af302095473dedf0800ebe7b1ae1755476660d97f05dc87f2882bc51fb7c3336e74ea086460bcd6de4155a2fc6db4f48c2b071c5d9fb748f43d4fa3b532d73d78bf494a84c976fee54845d20df50ab4e518d6b437ce3df0ab387d7ef64aaa4e1527c2f498ac81d7e0139178fbf79f9793bfc6e35f48cbd90a8126ba59ec8d287524137f7ffc9038d5b2216a3fb979673b174ad7a2a6878402e1afb9849df5734e83db5c61040c80abeabd2cba8cbd7292628b2b5ffb54f61a08ef66b008351e96a24522db6325827d2b3a83cf2f4831c87636efd4d041c3dd0cf150f058e8acce11b46bf29138927aa60d2886ad1d82a785a7451e8274a2d43801d935243f3d8ed2fc8de80eab0ac251423cafe384aeefa70b44c1d990390c87919cdca7c9d4570f2f4ad2d67d4bfc4464825c5d33855ba474ac54a23855f0419d7f11fc0055c034e038c7037a5f41f4e104d50d6e357e0c726590db1dd615be425f7257b4e4eb4100d71b2f0ae032ef7d3e232283bee6a44bb2fcc61e892701d596f9ce45d476244465709a288480486e032900fd2beda0bb5268cfeceafe72adc95507aa279a542b875b68def1fc8f14df43fad512b0ef795e9700966cc6346ebb9956eed20ce35d1f4ce7577874790de87d6c6a732d45561c6596fe563ef13fe569257179586fd6c01e7e35fdf769bb9b4b6395ecc0b124e2a715ff0f2c820df07b4737e9dfe6e26d13ead95d092477a3b4d208a6ca01aebe1fb05519757248401eeeaf0c847cd1ae3b70eeb8721046c254bfc695ea0b6237ea7a1620726a123558b237ad564747b2ba20dd9547f96400d6fdecf9e72518790888d44ab4357ed327379d38111b15380482e3ed70f2ed44b3ed169c49f13774abcf8bbcf80a7d3586c59c7fb2d49175243f8f47566eda55c8a45ad858138a0747b8804d3f5a543a8b76bf9c86cd19f0281a5bfb006147bdc62bfbb83b2ef2f23bbb94e8886f5ef480a7a457ead2ba2622d68c03521e117aa52f34f93af6766b9601009d8f8ded6914592f2fa20b25b2e15e07cfd726f4adfcf6b71079e6630da680466a70d3a4e6e96b3ff7561217c0a9785f59a0de0b5c53ace2204c2af67c048d147e170dad52333af19c106ac58a0841a2e2dc2086947dd2faa9835273a1962316a1e904c411de82f77fbd0b10697bb47cca73da28db0375673da11fe3037a79b54c902eba418bb2a5b7fdbba81271d95caa1c5065ce151d68ad0d3f2c7b04e8ea7fb0bd8e9dd0eda24aebf70ee62f9b03cd86b711ae0c28e8f3db64abe8431558314e2f2101ba56fdd9adca0b92be70f98d1bc96263f473c0dd80ff7ea8b6c1c2f2b9154f58a18bda545923e769623998c62f419024f9b241dbc4c6c43234a98c2ede3871a51f0997d7027e3621c8bb984f5339df82d62de44a8dae6bbf38b7da8e0b3e6d69d6254bcb93a8a06f5add82a33a889452606ab2a3c5deb3c415fc6ec53a885b6d3c8b086d59d7682e5ae9a20f7e931ae043db516abc3fbb8e59d49ce0cf7cb662e9ca3af17a7cb0959cc93d7f3aea7126b3ffcd14f5fd0fdd27b9475a599bdd00a6e6b6f61b3e5dc971fe4f51dbbe0ebe211c974d19d8c8213e90590f49c6ffda3c83e211a672bb9dda37053a1e984606c52166dca56fd24e63f87efb6b5ddbf994cdf757ab368ea1930942430a30b1b7048a64edb180060639109c0d90f7550e2f4742dc19d17e9dcacfa8d37b90261b7c58cf908e0cb5e1d44e044857135ea5d85b176136a03ff602a7f4605c1884a2ba2d2782d37b566753b57e54b7177461a23b030dda77298a7eece904269a46ab70dc625b832939ec335aaf43d62c804769be6afa6ea392bcb0e2e2c9d4e81949335a7588bbd9057e8470ad924ff153ec262ac749201eb9899475dd7f36a264b11bd8b11ff6aeabfc8e9c7833d3570ef17a9973fb3d0af94ecf63faaff82c492da18e88b7a10e24fbcc4b962dc579ad96fa39a592120547d5b86995bf8905eab56591b55694fb53546b2145a68def7e19406851d3523dd7499dbbe95bdf745e5461488269f915242085b7754e623f55b49a814b46b1b9abd9d85faa7f7615d67c2afde65d65072a720f290adfa18190314b40c5e71fe9661e3fec8f11e1bdd21a1f8ab2975b1d1d062ca2510c9714152d3eee52fbb3752e2720bcd68e4d34cf55cf139e56e0f6495a34671d4e61daf568f12287f5bd343d1920d80c5cafe26b20af84861ca8c9e454fd4f886a68cf52556531f7350fc2798a1c0f1e778c36a95897bc28e46a65d4bd9983ef69eac9ae9f30461d97f1859a492b606aaa46f607b404a130abc22be2e43be71887ca5920c7e74768c8daa690c8e36a5762ed3caef04e6113f195c3653c0e3db83d7e2d813cc1804bcb37c363c36985bb3e53bf22c8c8a139bb7d32293ea66beb1c094bf834f1f628bb993cebf444ccb00f83f07c98be4b87b37c5fa4ae2ccde214ad0d01ec129126e75f851e10bc3791fdcb3aaf0bcb719e620db1070e60c3b9b239a689c80d2f00e8dc196d97ec5d35dfa8938481f2311bb492682a40bbf33ea6475ed71a2a80fc3348967787184f294d33c30038d8ebe224cfee7aa7a59bae4fdc3084f4b78e5f03ac7051551abbedd945b3b9051b56e2603aa16cb5efa2fd8e5c6bf6ade0418d967de39ba1296a2fcef333df555ba7f80b2ece38901bdceb9e531df0f8709d88964909f0caae72fe078afe8f2d6c520280c862e6016fdeabda886c45b70ce31fda4be667f4c26e4c616549a03c794e83eac7d67a203ce0ddb2b3878a550075c671089cba2fc7a289e37bc053de40be26d95cd1ffe579f22544fd747e52e4b6a49f48242c196f6259bd8c13f805a85b976e909f2d1e01dcc353e3d7e437b4c9763c3c0566e17e9283e0489fcbc95547e77d4d78a0ca113eb7b9f5992d0984e95127483d03c5466d3997b64664b17e0fabaa8fb8e43f0a953c3959b2654864065c131869a3bfc57abae7be3ce0114763ac0d07cc293fffdde00765759c611e0120c819bb692ee7004ca9bb49b40705bbf4481664908353755468e10e66c8a9c1dde53b63408d16a4c9ba829728831a87e504c264cb256559369d1c67cd9e90d128ec0bf8de7ba950b1ef047e8258ef644966638075c9c96d1df6007823d95a0b9afab6c09355bd34e320efe743726012eb621d2f688020e97a052e78ef0aae1b0e90b210785da40cd66217e2468ccfbc74b211b6e0aeafc5e56149df45800960b46a88dee68d17c956165fef5f52b04dba5961c5618bab69e2679c5d927890b058eff75df8a673da864a81b7bed052acfe488c3dce9309a714f4481c70a33c4d3b1dc31124c0591e2b9e277463e841cbf13b4e971ebd1a6b7d9204c6567d50f00d3dd0884160b5cc73a971b775011051dbed38b85f883c5ea2acf25c6dbcb35537b4faac9f150df26d4904bd57c23b74bb21cb46ba9ee96dc0427ef853002402e6256b6e7d4b23a791f14d9c400e599d81fd65ea5967c3c5721067183879edfe606176b8228007398fe7f1dce13f932df8fbfffa177f2108dcee24d833625f8096ef3317758f8c7add011969496226bcd838879f8f09231ba0cc3faed71c727c626633ccf3fc1719a57c23b60c36fea7be4616cfda6dd5408d38949dd429a3a9382a0ef176ab48b77a8dfa8aba2ff8a43b765f393c922644fd922477f1dd1c269a170cf885b440d2732e1b8ad0a9bddc82e22b302485bd999d8bb8e78a25f8fa846783fbf24aac7685b2e46564597dafab5ff9f285cf8ad5ca408db8380b89f436f36d7d0245799e436e3c6af561da6498f49de1e0220cb517bb8a3fde40e18dfab2b175daa14ba90b1223add4b1b7d693de76073d4ef68d387fbf90f2889a59494e76f00c309fc01b083c011b355f462126e7d2231b06aa01b5431e44c86d202b092d3a4175d889f6b8a6893883aecdb58e9bfb07efff9332732fc59fba3155f5884d589499443b855076f02786f1c1d29f0a500d093faa974bf795ddd9ad3b13276961e27e9f85bec2157b004a7c97a28cf7ddf15e15664e5acf333819d019731f486c2fe366ca102e624fce9608d01d70e63eb2e8bb0b81ced097f404d6b7b16a5b105894c2bd87993f602775b71732dcebb9919bedb95a3e78604a5c05bb8b8b46a4974cc5e7c80c95421aee2cb1df37633c4862287775718a0351ffd81408021a0e35bb96ca27df21bc26b58929760eb000db898311fdddf120e5a4cbda0f00164aa56fd2d4290dce6bce5485a1059a51ec01220563ffaabb02e11520264e0369f7ed7f898ab367c607807061434c47ef8666ad9cd27d005aaac63a676fad45196a6656171ef7eb3bfece375fce1e7e95467cda643de0caecb03ff763ff2c4d5cee6ceee05687fe8c7f3cfa6c39be410d7995668bda7e72856951b35c489737abd5db9053d816ae82a53c9c4b650caace887dc1e8f281460f1cce64eaf4088e984d9adb4cd10c9f7a0a67653b365e6f3219caf3f34d44dbe808b1399a642e737e7ad58a0d1f7d143f8badd755c20f5272b69603584907ce6d84218800eb802f9a4c088c50de59aa5fc27d07b2fa26a8e632e020cd8a4ed76711b349ebd9b52ede15fa8d34e3adf3d3955ce86c405219d85c0a2fd1a9fbed301c7e1c2cdfd8e4d68b03d1f6da2b8e4c312b7762bb7080fb61d99f27103c8f207161db1e4649e0b34c444835c7bcaf5ad304757d8ab9fd648411d7573bb1e0210e2bb0bd1ed8448f19f5604d385724900e6e79bb12db5f871606653dd99e6268ab6e256bac84916b114c1cdaab549ac3e9660d236b92328b87c0a9ac7a879f053e8d9d725080c2ef9af8882f04454913cc37116fb90f33248a08fabdcb0dd8e9fda8c2d9f94261149d4be2824f79ecf7a1f33a69ea1c14468099ed153a9465b443685a73b2f84d5bb5dcc38b685cc31b8b4c65c5706ae4d572da719eb9217ba1e110cf24c9e05694235b410bc07bc63c8fff7a1529cbc868be0d64c0000a89c228d12d1459a898ce95b944c9c2ad465a6f98e0332453cb3f9576f51341c93bbf5fc4f89c361f619bf416944a0924f1163c3b19345b1630cdc07b463c267cbce11a4be1dcc4fef29bfd19e33b54b44a0802f83e6afa1cced77a686630e16c9adb76806068fd5c36ff46d10fd9e39ef0f7c364c7182d39864f5582849b3324b994b22e6c948389ff0b82135b8ed284997d7e8507e69808b76e75c6b853a42c79b3cfefc60b49a5c1081e3ad085979e674ad653e36ba42bf07ebd8fae21f12583cf1e1c2dbd092eaf184c2e8d04ede919418bf0b9240cc6623d954f92cfa3610a341a7c5c0d34ad6f24bf9785b90acc7c6816472509a9b1fdef3ec8ab1afb7cb2f5a93cb0beee3d005b4d21b81f50816cb0a83ff8fddfb1f9c190dbc6d8cd6c6312a41921354408812a429b8a607f06756b47321a5685ce4c63e783174e929a8f0560cf872e7612f86f9b5e8e7d01e7537da02d6f348670265c478ec203e9da67415c6d75bce8198f8cff864ae295249271860e10b472b7ddfb2c4adff435956d58e94783a8287eeb3525683a97080c700318e5e1bbcf5d30a96ece946aff8511ed06f27e1573a0acc0ced463b5524bb4c86c6b7a1150240df09308356f6c18bdd5617c5f0f78c2a0e2457c50b788f5406e6f21686f20cc9b55adfbe978bfc130543270a1303ad1c55db2a1abad7c5b5c738fd2f8fdee07b20da512b53cedfb757cc851bf98601713b29ae0c525c01641c6e22b8c61bfa3c75996b4f58c54e3dd4bfbf2d3565f3fea4e9a709553bb451684d7f39406d47eea39662c20813d512ab80b0aa2359caa74c1e48d807a95e752c9275584dd9aada06295e293ae6848e10b56be2a9f527a7abd54d3b77b478eb07cd1458c623d774c9d561eb06f314b22c79fb81dafeb477b75e30fd880654c915c6d00661d15d43837a03db8c22dcfc9b012f175d2f3fd12714f2357928e10fa09db1ebaf3450a5b5c4d7ec361c0b3fbefa25ae1d92d21247ffe8d2040facca959ea3ff115b3a535b429fa5c4b4300c1b9b50b7cd607e1c492da78cf670b593c2c624530a158f084563fb6dc1173ff942aef8d367588fd4738279b8647addcdd8b0a4eea69bdc8c8d55896f9f69aa7b8fdc98c01ba0d957282b5f99361a394bab35794dae242cbf151a106fb10ff0ab84cc089a4a349166ff3db69893163e814056198f2919f7b742fa8f2004f2e469767a2515231c4325d7c72d90c965d4a8fc46daaafabe9734b448857373c5676b5287c386acf23b584fb2ea83fb303b137db4b62eca9ddd19852f7a75ab2e4b0c291e04e63e5a5c17c742783c65a3091b87f0839163452a691962b5d70815680d0a836315d15cc33eb5e1ecc4c17e93dbc2e8fe38ec22a6f2c60bc4397ec39f021e71effa5a862d715b7c9843c84ffa7031ff6e268c0272816d9caedada58f7c07dc806c0f1210458d2d9a9e6886a72372465e54ec584fd4583da43fb2b0fbc08883680d09297c9d8868c83995063a98fa7fd0df6b1204ca09cd315b9e9b36a40843b763faed5ec0c453ddd3b2cf3831da8d33a647c62dd39f70ce41320d4793073688d1bf0f56010dd7f00405d239ef82923ea77c859e9d13f6a61bcf86c749a48d2521bd9f48748f6dbf7b54a755131a59d2a226bc3423d7e732808810e710a895b357c2dbdde1eaa098d096b5951e17ee76856fb9889621154593f929e7dbdcf529fdaed5288a1818d3a66efdb267c12e73ae262f29cbcee12a5bc7ee971aea2a551dc4da287df9dc59980ef07da52caf2a9fa451df867a105819cfd1756fe3795f749ed9842d9473fc76fd078130e5681210a08895a09b3398223cc95ae8b50bc37bc45bbada55ac0c8370c7265cf684f9f7ffb0ce96ffa794360e05f2bb8dad251d51962783414687fccaf65ca42236cac2364fd5ce879dfbc3352c74f883680183f253ebb1aad2c83d2113d63d3e834d49432fd5afa0e9c7840ebbc9eba31aa435746fc6c4eb8516f83a357d6b9b66da538461c968458b3980b28fd416952d31c8c23e9eda34fb0b87954e91b1e6643424ef6a22ab69431e41b230b755f2a98d04e12a2434c46c534272acc69045347d71983b470f3c17025d23212fee306e1e30f7ce4bc2f03135edbd4dccb71ed8525491d9207d189bd581fc0f2ad2cfe4dab59b0b6be09743380aa56cec2d5ae302c1ef6b398cdb0b63cd140f14c550290b6362b07324534acab786d6af5239cd66b4ad8c768e0ce90c133b0dc889625532ba0c235c1d1fa392c30b1955f8cecd1e93c9265580da77e0546f6dbb0217093dbeffa559ceb96e688612afb469f8e43cf2124dd9dbb8e5602f636726c3ecf9b1d5bac2e745bb506343ed579a395a7fb9e225a078ab4d56b9b77edbd23ec6c15a145511756bf7278bb2ccfb5a329a44e8a13b5de3e9299c8f788b1d0fc12378655f5d8b1864649e73a8fefcb5134cfd359fee939547d7fda0b7a2decb06b454af12222d91b96c5469e0fd0ef4db08a93e1a172e136cf00630abfadd6b01d8854f8ebbcc972e6f82cd67fa3a65a8bfd1f5dba32b7bdd31699e2aa0837fdd3401486eb0be0d938cf6ad7fa51aa43a2001beb0ef60c475ade10f36a741d96d077e0f55a8edddf19d311da51888d0613b146765b4a492d6f9d23aaca06a5c6f760d276070270a0a69bc534c1deee626240d3c761b7b5f323bbb2bf412061b8679586410f1ec466b1d63a3e4eee309c58d2e91cd8c0dd2dc6241ea4bbaeb5a22794ab3e0cd9438e654203a24a6a39743fe1a06b764ca900a2c34426538c211494f8db4ef768f8cec22f64c17ae800aa1b184bc3c3a7aa1c9b50769712880063648341495077b56a3193a542dd1a819facb1b58f737c9b199154c6cb0d6699372501428ba28cf69031274cb4b3caaef36bf3564ebbe44a42c7539af9b66fa6e17d1d101cdb9898d730a12e6990d2a46a7e9d7fbdff4d13dd61685e7c6af4e331cc58bfc2e420bb156903a2b6703c8dd4565bcdfaa743039a3cff6792d4c12fd2ef72a0ff14142576a7e69a14a08a26a6c88721df9d21cc6da6f695d93fd6e9e953d466d63b27e44d3ece5fe369bcf7bb5bdd3c39d34bce3b01a209b0ad2c91b7f631128cc0597d702ac69c4b98ee2d88e89c8b459c637eab89cb05a24b6f2f10a4e6a66cf2f47b210c507f42b5884973cc2ea52f3aa80dfd1d47866aaa826f740790bfd59eea886b4c104fa0f22375082f441e7c775a991712721c8a3ed59b314100e1e27d3b99af14c8e192b8b2d719f09bdc5e09857a6fbe01b5b61167459f3dca645614699f0bd76dc2a5c311a73ef71001bdc39736bb2dc261098e38d04ed87ff2ad7f4bb62b9c4c3452ac550888f0bf5c02586f404181e6d5a68de50fd63335bfd63d62db80793ae5c5f073064260a318508576e3c69a29667cd388c187afa04def0dbb91d47b46f026d36b88b38d9c4afbe197fc495d03b140a2a79afa290ab7ee416fc0f1ba7eaae59a3d0d4a9b6f5269c10bf586669b96b46c3384063fc72561f1c2c9157754b2030ebcc7eda3427ff1b23456c77094c4a9cfbe689e6c6dded0e2a17a3fdb3ffd24e1a790617101edb31a747ec169d45a074fb5cd50cbfdc2eeb3393ce0de1654bd53de56d1d9221706512b9b68a1235d512d9f45360ef7f908f9d683b08288bdc0c36d307dd1331c3447c5a8a98801d6fdcba2c4472d517d53a67015ef7b9e3bb039ddc20cab83a0dd9305d4d525fe04839b34d6a40a198b115299195b6df41612914870142f163d0528adb21bcb952206dca7b960b109803400809a895de594cc05ad4465a4cc899679c438191a36ed684b66255a41c29cd320c0cda69fb8c5d2025679136867fb9ee069b9bcdb73bd7f4679ef8509a4891a9c2ba7e945fb2aa3a9a8d9b26fa75b216e27bb8e6ae526722ce5674b369ac39d2494cdc78389e04a4ce1942d9fa48333f8df65b2dce37fcc8427cc6025fff97ae45280a36d43a66d9b97fbedcfb18bf5177bdc886b5833383676171c3032c11f7625cda6d08bd2873bf995fc1e11b53803c59988d761d467744a6566befb6ebf3587d610f9ced275db08289ddf90928ce617184930fdc4ba961defaf90d4b7e2234ef204990aba9e789df86a8ce8ba2aad804036f81aa9059938bb758a6561c010913bc18e0e88b9302a6e3fae0ff8e41af633b7e0f47a4e28f810b0bb1f74fd64f56b4086dd210f36af47cbb65a7c4efc0747294b906276ead6192a3c37a170541187c3b8ca35173585b6610a1feaa53a07386e6c20d3f54061983b6b6a9b8bae46f6dc5d6f7a5b454b9038a07c34e250dd032a2c67d6982e24e3d671502bde631f20bf4adbfb0bfa2acb4ba2805130a638f02e35ec3309c4c065f9a9b79cea41b1673ad40391ea6e2a4c6486edf062e628e9273e4234eb87d5ec3054f5a86161a53a1ef2a3dff159b3829e214b42f0c70403a1a261e32c59caf51e42efc90d32df997cfa58ecb6e534d4fcfdfd4e9a5cd7c213b143dc7bd55ae9491bd69198dbe220312ed76fff9f50db94ffb60fac41a1cdd58e421e434905a4c366fd84483aa7a94f9c70170dddacf5d63e2d1db186047695733895976546c7a8296bafe0e3b2ec78b72badb410ab1e468ffbf05a401f04e4e9f1780b48fd3f6e595118cfe6e37854c483cd9b41083fbe010e967e0bc6797a6b59144f1acddf59244b6c339983f1b50b1f5a5b9db121b5819cdb4a91efaee98fd7e637d688d371a6310ad7ee3236ffb6753c736675767ee2381a15d372cdcb24427284cf2bdfe7630cedf72a2249ee5a18340169fe7dbe5525a42142748d698d2e83d8ec68363ed6d4b5963ffa1f614e92fab16cab1fa5b659be4e3f08b3562e87f2a5af7d7e9f08bccbeed58d014e8e8064c4b3a91fbee48d8e0c5ab269f0e0b28f471163ec29729eca56bd7bc8c84c1f260d39fe028e58c2e40d83cd236a78ae77733aaf97238b2e6fa9465e8d6be8cc65bcf8b365e40b47014eab3625f40bd9e634ca30110d1a7d5764a3d64c333002f6918dc432db3bf7b29d12e8c26030d198a45e4467d981c5baee967def3168d7523d4b9575548e5bdf08c5d5f71ff7d88eefca8206e0d5a7276dd2c1c4d61bdb4cf4c76273667d389af92831f45f5262cb49c138783ccb52340097d3fe0c8fe6c2dda82e7b42309b6d15cf1d55ec8430c453c2576f2746592d83e7b28ac0d7e21da63089e91c0dd2b3a206265bd019575c7c427dfeca8ad912f173ee93fee8747fb0e674f10cf57c890998fe374ff2e6af2dde967def6b9affa86b38c6da641b5feb28971dccdee79ff65aa937223408445f2a531c9afafe4bad656b0d6351f91842da386463cd9d97d9a288c9756df74fa1effde31f5f46ffeccdbc00184900cd1e25f3322643786db0030bb2fcd8eda6e6bcbc52869087d7e625eb0000574d13bad96de5a1c47e9331e0a1295eac9aa916685e950f1ef183046ff47d6234ada15d70b687fa36de12574a7003ce3b6989258daff88c4a2a75eacfbf915286f963917a05a4e2f0b3aeb949f78bb9a0815ace7ea135363b964112a4ae89a69d5c81e8ec8f3d9be53ca2a62a1640a2d53f713f60fb46d55be96c5ff22e1c8555efaded5c2efc6178c1936e76c2a52aba81b262a8bfbd78b33a7de64417ec60c38df6c1875a588bb343faa99be07862e44ccd85268c6172f48d9c682a3ac6984607a55aa646b651f4c972038c460dc25431e5ca0372d5015e5dd59099f8b39bc55dd1d481412c76316f4c87fd581ddfec80fb0695c5da65fe12789008dae45715b401a548616fb65b440b39844449bb12adf5764308f62631532412527611ee941c2a5c0173161028c59169766161a850d8f71b4a9f638a6bd9af9c154d61c6089d22f3620cc439242e6a8597a84fa8229c52b1609433f008c9fc0c9570e67e47b6bd25ddf07cb15e6913d15e814e6a8d8f7d9ce7a17c28c5b514bf462f5f84076e7c45900f71a6fd04b678cbccc5345c822db52843bf22984ed99aa06b44e24d79b56d328456617e31fdc04d63c928393bd8339d31891f161260dd2b9081f2e0f90546ea00873d962b1bd98a202c2949d5324391ff36feb82be71b535b9a2365b4adc85b1fb5d8a420f09e02d5509710ab6b76b33bea9b45200ddd0dc4fb00118d930148522ab223d2c1b113ac0f46f9b5b37edebc971d775a255277c0d7229337b14a483b341ce9bd5fb24d41c2ef3c5092a83d751d5c14264b7103565fe4b207f8dd02a6e143c2a42ba5e97a051dc3b76cef88de0aefb7bde97cc0e5c799db6aa7f38f0746099af9443f1ebffb4f5dda1eeb073b1b331e731bd4b8eba47ec6aadf71f34f3cc2970e16f6a3a320750250de8d7f96018801c2f7d21a8f7b5959fc39e09906c4d0b3892acbb6bb7ba87eb6f50916425f7f2b58a516d88a48f4ccf4195d46f546aa14cc0ae6466b524d3da4da084b2659e47ad6a135f12496690cf578d9242c23d18c1695008bf6b2259eadd00adf30e19b632861a32bdd7a09fc90278a756bc08af16c625311cc61d3df8718d9fa4b2f0bb325c0034becb63fc66d34765689e568cb707808befc22c5c89b0014a9a23ccd3994518aca91cce7c2327022ae9a89933f0f186d5ca7899658392a12b600db69802efee745109321ab7da4a427aaa0c4f06f45a8f14d324b69aa095ccfc76768f9cc05496975e637f7c72d417ce77d4a599cc5cc34461c55020a275b07efb20ef9cdb6ac01d6159f16a6267eb9be4dd5648501167d80fb6da87be4efa44f9b60178ffde119e0fb39ecae43f49d571e1067f3cca2a75cefe6bc473dc165debc84e4b81f1c7a5a4192b786b8a5d3152ca28068221be943da792435e516d3269e7dff5ba54e5cf9689b683e5344a3e2c9e246b08ef6a51399ffa412b0b7657117fd7f672944078bf242073cf2038f6960ff1af00c0a7e60bac916d2c42feb37e84e4a16469512ce4ebeb2b628ceabab0ba00aecd0d387baf8b5ce1d1052097b4f97c9177dfe9c91eda266025da7f6c769cfec47dd65055ee8a4743696acce20175025acf4ec1313fc87c753bdf0a927b8ddaae95858a379ea8f00b6495cfbce0085ad9b987eec4a684633f6b7a5444f03c8be80a5f48865d75b2a8a0ebc071197d2fe9a73190de9fa8279237d8b2066eef622c417a0df6303590496da89600e64ea0b431b45aad2ef4f772ebd7960572fb056c1181d7e41517c0dd7d9fb77b9d1cb8db1c61d09215c5c78cb78a4fe908f76ea0d57d1f556cb8899568656ab3876a8aea4730f89c1a37c8320981252155dfc2d68333cb95c3cf11f4ded8c8663e1ab8ee3734f4131820572bc0a59962c1b0ab91734d91a90f6780cebd8465d6682fde74e8307b947f0161402e52a5a40af0d011d9ca1e9468cb0efec2a9e017baf57317c2ca9a647de5f62d22d5581b7084540051ccb1fcbcc766437244aa51d1174188c0eb247d99ad18d916057711a7d058e47ba3a3414493a1b29ad4a1a3b6693f4a035ff192d4ca3a4955404520b2b9e31e373ded12840cb14bec2b05064edd631371c8e09bfc045dd5bf2b8b598f2dddacd3951bf771beec7f1b1f1b1919f46c08bd2b5c11d79b595e97e5a28a4bc4b5cc6eed0ecb284310fc415604d8ff86ae89820c426c252a2656eff65a2f3d1890402b61cb46fc5495f87b33bb7f47f1605e92bd32101ff37092819dd768400ca342590f20262a78669704ce3e1ad48f51f09d92babaebc0dabd229e9430af47b2e5acb8f810c8e3eab08ce113d8f18db12ed670d2167adb83f4f05b7d075399cb39ad0c201d29936110b734e8059d3c9d99abe698e043244eb0aa6c237ff4fbfb3ba93093013cc75327b4d454f194c4fa19b1b28deae312b0a5ff70294d06f16752bb8a93e994fe36be9dacb78bbd620042ce23dbdc137f6c430e5448b1f7c2094c82bed2fa0c2368f2674a9dcbdc0e737924b4006043d74759933ba1e70bc17ff7472762054bb9f896cfe92add9bd742f87dc99addf2ddc162d4e0588280aa4f1a9337a2afb767ca9829c6d0cf50b3aa044a064f5ea518b857aaf0a20ae638d32dd43b216e171d0210c647a81c9ab1f767c1745166204b4528a5ec955b21bedc243241ca6488c078f5e01aea47b40e7428b4a102ba314b8a12d2d70228345f06f7bd432778f369ad04ccb15dd7aa57ab7b0b3685eadbadcb4d412642ac2336099c54438086d79b90dd0d4c57a8ed0141ffcdc28b658c1727106f66f301e708fba45c643fe9926de45124eb42e8aaadc8170a547cd85f4582ef3cd560533b150f17b40d712cb9d8829319447374a51ff7e2541a1a3bf76cc345d3204b333961064bd8e5fa6956bce9ff534d6b1c37d97d64d062f80315c3833a81b9e9f65058c3fc312f6f71342caabffcdcec79a9cf5c61bf378a16003b89e2c32d3a5c1aa9259dde7b23eeea90dd28e68bc3f214c9e6f36eb90d43dd3e3da9d70d473eb782b4004b7bb8b87988f603257fa04acf9a061a812d8e62ab6c6237941eafaa947367f4dd0b6c91eb40c0d1ca8e4b6dd02fdcda03d114a0f85549dc603fe7567cc27f1e2e4ae4091ea51ce5a0e26d5bf27cc46940060e14fa8c1b21865e851249e6125eb6ab4cb7f25b603ef615ec753d95c30400f9fdc593018704fe7b00b549aa5c083ee629d829673b53090ffca09c2a47b7b866abc5b0a767c39b6e7db943ab7c10ccd2aeac98fadfbb70ed9df49de17a7ad27fef8c7de62db509de08a116830f1b9b4af213ba646c99beed78fdcb939c2329918898b7a4ac263e266b934ce5e3953b4cc01e8076efc06523cc5be139442d7e7a4931b081b8757a0a88bc00be53dd51526fc38118180722f5773965d7635300e6c94c1437f7223b7cc0ccef502f45f131084edda877da3325b629e6b6857162084f61b62e0996f8054c77aa54e08597a7c77758acdc5529b268fce8b43854716dc4978d3eef3bb62e70b410401ad53766099838ed4e1084cdf6f860330f1a604f5e56b76ae083f116ff20ea5321fb9dc6b9867c15674dd25bcfacec515a55b2172241e423480a66f0a6af58606c0e0ae5168f11773a3e10ed289d42f30a589ba7ebe04eb293e1b72e49b9d39d75058efef66559c34f74aa7bbce01bb5261bb9f324ba8d7815fb256e137102a9e6f4d9b9c6f0bb997246ae866f2c477214ea1fb932784dab312730be860a644ada9cbf01a36c2249ecb88dd9a655f727ba6fc8be4b9a6d1217242acb60b3d35235b7b1be1288a5330da3aff73ce61503f963c96b3f6726e9b2e1ee379f84e3a73ae7aca4589b5726cd65cc60185f51196255440e7267dc33dde98d878b969a94c7abcad74fe28557036f2c2caf3372a0bdc9d8a54efc09053867694dd30fae287b62ab14aba9f0f7d30c0fba6b5ec72dde327b75bc2d5a49380cf555bfdf0aa7f25859246fdcc054269ef88f3bbc90c56c2b56ff4bb45ebe803b601e8fa23dd5acf37081122b7813d6cf0914d595ce52d8ddb3c9d3da3d9d060c89f88182f01880d24c5bba2a070b868903a9d4602249329b5bbc9c2802955a7463e160daa2259eb94642e4678e5b2ee0e60f2b7257b3ee5363dffe190f4b73d9833ca6e9649d1bd285385f477146dc43a6f9a68308d64b038228d970a4d2e72e1ee1de3fcd671d9c3142dfbe0ed06291840dc475d866fbe5f91b00585375a5dea5e948f00c508c313bb64c277598ba0b0ec707c4c1150a83621737d3b7f186ee47413034091d34c2b5657eb1e2cc4ce0275f1f9ce3d2cd89b9ef80349418de0850149338cf167c1e634502232e9f325320e72f226604db9c8d7a35a80f059ded61b6926ac6ddb79d6dbfa768d3ce57fb88f10fa361ff22ca46498c5fc9bc55fb3082fb2f3ca94f8f9b1c7508afcfba3f60bd765f5838fbdac0dd84a7dfff9c98fe8e562d677cc3370e05e6e5b0ce62fd44da53f9f05295d29d13c8f8f411a761faa5610173d919d9dcd9b2a1accae6a07449e078af9b27ef6d7760e428d3ddc3696cfbd238afbf078e6eb5c6dd50c38e254467c65506b1372d7fec1c8b89311f33ed4bb74a211cc62c6183746924e6d0389b88886cfc30ee1cd5521fc526d89948bd164600d0eeb9e2c42cdc72f47179807b7b8133c8bc710e6bcdf91856d20604f7bd1b8e73337c99e6c7342c08ca7e07f1acefd80f18f2d32ef4d9600b5676fb04bd295cc561da0caba80b08a87ff6616fefaf4e4e0ee1d93ce1b0de3d2a3ffe344d67a5f7e92d90034af37877eb10e8b913557fb9e8f18b29faa36dc6171f9587aacf310584287a519a21af365998c4c84e8f5835193199cf425d8095d3c4dc473fe12075eea968e31aae62d7b2c751f44dbd03e14657afffec27de398f95d9350d03b775a52edb60ee55ee964710f33b99e4bf1ac418677fd27024f8cbe5966c96021f0724bb55e05a0d83e4550723549cd24429606bb607cc7acf99f4131f385a68a6d64a22b13500a0de35735b83eb83108df8f794a1168819ade3621afe6e3c96d247852344c0f858f43b4ad899b17ceee040cc4075b71406fd48d124adf50038cb020206d35c0738ab6d97073e03350a7e6d97ebf9b2e138a9859bef31ab897444e05e9fee4f3661ba43a06967bd5f4b43f63064ac09ac3081ddbbcfceae5640ce75bf84252693fd846ccaa7ba446f416665ef7475b1591f02c3c270b3994e44ba0262401be73a556b3a0e15655d90fb66dd0eedbc46f68f41c5f64980154817bbd15e956eb54cc446d40a3e4c730135f17d91e14929c524799a949263d484d18fcfc9166c9c65dbb0a2e12b5b7db0304933feeab6128206ce5347674d4886b9cc63e12c17f80438fad6b212ac5ee4f5174d2e1d73cce5e7f7350ef31ff243cc5b4b863338ecf766f4efc0939bd5cdb31c6b4319f67b0b96119b2cf7dd43e8c171dd7c603eef1496787bc0a5de6fc9b1548fd07029b6cd5aef33abe002ad8cfaa84db4c4f59a697497cde3f13e4c41d991447284bdb5dec8b768c1ca9ae006f1a96a11b47286e99a7aa14afc57dbae28f256bdf0810ab0e7d82aeeb58df0bf0575c27bc16938322628cc725f2a64bb4fcf23dc26396e39d50fa494289721368be354ffface8cebc432f8c8c57372f8449e910eac556fc552974fbb0faf473c13840c7e0f13b899d9f6bc4e7abe421df0719799369e79b4f61d4ba54cf69d7170052735d92809da84ff68ef5f454ad1b1fbbe4c495a1c0ace38102f74fad4bd6ea92658ce7d2786ad8b88f14e8fb80bc982e332fbeefaf3149fe6b42aeef6382770d0abf6f85621008b690066a4698438dc7ea608e4c9cf1f5dec81faccbb584867b3d6d0c978abe636d28853f3b3f04fef94bacb5f589db9070aeb1399285f152333a41e6e52970f8bdd178d0c604970dfbad5ae93b5ce36ad5a29ca364a3e182d73e6788989274526d4033455299b197cbfcbe693eb909071d080e77464f7446c1b736be50b366e34d885e7a72dfa0a41aa1d21620f13893eccd2183f8df800c3957f1b38d7bbf8ca57c996dd5b1fa336d8031f12f3d0d2d35f7f960ddb0762d559df641a7fa926d220cd7a052c27aa793237b410b3dadf3e218ffd1cdd3e3f14dc4419a29719bb4c08fab45878c238d42e26906a287b60a555e62be86e871523e3a473d8a71e4db3a697f504811f6145c8d28aefb5ec99f2a0216fe04553a0226c8cb47cb5385c588922c22dc0a6761d26474a23d650f0161fb641bf00bf6f7ce68a7b0a588fb7737b2e5786b813d9dce00a5f8f063049e4d445258faa75e0095faffa61f11b7cebd15ad87a06cd2b5b011134c9882e07e7e921572556b315fdd9739e95a583b73bfc0feb8c919708301a954c5517e19a5046e66ce0c763caee348c15d5ebfffe8fd11013243bd0dcccdf3abf8b609f83e902556548a3d1b78ff3142f021c5fdf1710903d42da97f3377b1724391defebe6201624330629e0519a404148da478d814d4346aed4f2ec355a34b2ff42cc6c70a4501090541fe2452d42ca06edffa53ff3d4d0714e589caa905e344836f66764f67ee287b6766f38b69308f954c07f6798d1938b6c675b0b93423b867e4a9f813d6dfcc6487e0fa8582f4fbcf3e61a5e348b88c6845f7e3e646adf475480a89649d500e49e765b2bf96d07815adc4fd861181905ad50b8f45879705c84451b2201b4e38c8bb68e929dfa16b846ce87e08910b674f922ad102a10679fff3edec4e1c0420e72af3043a8673891b4a996f2c74eb7bdc78e16fcb30422b39517647dd5e55be0eb059021f7f5a0f710dd9151547944749f0bc97bf9b85cc33212a9ec4ee57169b3ea9c88e478b801ab4225953e3bf04007b2e2134b85f6b39271290dbdbad114916b7237d176730fca7c0b3f3495ba7b24608344baa7a0572baec830ec8f247e2d216a750c83b713887fac1427a476076b8fe600fc9200de1acc6eaa01d3c4793f3a585d59ec00bfbd1e223a18a2a8dd005ccb6a6a56665e172efec59b3f8114f81d2b58ca9d8184effe4c8e78510db4beaeb4046b22afe4e0cf91068645a9171ec6ded015332116de12019dec230738aabae560d24ea49fdb41afd7c85fea4c4dcf0e3044a97361b9a99e5734dcea77dbb1b38158bdcf6c358406bf40a1bb9031d15e84eeec70537b272e862f34380caeb22087907ea1aa1278348996e5587d839417b70a6094493b2eff8b98a31ceffc95fb84cbd030bba671f0492652fc86998825072908c1ef87a63e5d47b0c50e8f3ce7e737741329b43146ad1015ae4e8dbd4443b70a80e75b9a9e0b0b41fadfc2f1c1dc3578a23043a6fd2e1745bddc240902c1190974362eb50752a914faf31fbf31233e02948cd7af4f765d99ffff360aa6e2ddbe54fed7b124ef556705ee90d69af5fe9710a35c1eda72eba2512ab6560dcb462ee65186872cca265c27670a55b8fe4dc3c196fdb6ffeca54cfd1e4e653006858b841d8a3c5e725a78f02fe0aaf1c6dea76e8116258d8a51bd9719dce6cac2b7f3a2b69a22a6a6af0a81bcfdd002d7decbf18061fd5bb49e3b747732d7a28fbc4e7246cdb4198bca16cd8c66994bbb62e85d4de1a7e53acef27e5a70cf5fe535394edc9b8898a52412f640e85a16035b69c8869070535120d67fe3f26512e660b8b9f30af86ca34c5da3a1b03daa75d3de6197d133812818a9c7e59d8f28770f1d0fc2600c64218d6bed65fc96fefbc902e0022f1db75d8142679960d0f18d533562c868f70b1243867759978137d0b8d0c4b89fee9a491132e864094fa8f0604eb373e0bf8b950f233bd8d4de6734fdb6e67d23723d5b1f6f1d543ab4d54f8bafba2508ab214f46ea99b86bc26f37d5039867cb47c72179428fab0993f7572c7dc95a66df31283f56aaa61379a6bda27e3f0e718caaf94530e94590c1d27307ebcac678a8c3daacc74eaab5c21a7362cd2fa0dadce57a05df4126f9957619ac5b8220b2717b7b24ef8bc7bf6c873a3f1741e7f89d9d0f3908617cc186ea68a8f627d4688cd6e337571e97aab2ecd567b03e55bc2ab9cc8ee7c73ccbb71c6e94311ab600b666e7c8dcb6ad4a04a027746b96101c25cb7382348e2d0aba8b032545fbd3518f012348ecff4681c555535f10d937a5c961f9dfa921fec455f73d04281dbded65ed4635e2ad1abfd2d414c496b58c8c09e14458fcd0c7a366de4dd35ea7f99f396c22076181c0bf16f6f5a3591177512c37820fa1f31f63f67f039f2b709cb32ec0b5812c202d076f079c0526e79fa72a5bca2b05b821e69ee79f36a16bcace20b62db56d24198a81614521499e2ac000a992cc120db32995327b139d11e2d36ccdc13cf6376a052e7c245fc6990874afafe5bba6740b38690b53c489ad72f138c02372cfa4e88207287a51227070c3c25f48dff6d8adf2b0f422fd7c55fde9473da41fceebd6f268544cace5a8a515225d1e06eaf91951b40e613691af464c736029ac4fc33b2c711f0a220c93debbc3358d6d74db296bfad84f5ac4488bb39fca78ee619bb32135d055aaaa4e64ae0e4e32277b97acecb7076afff75b147fb45a812962ced6c51f29726f78b0abd8f0266b8d98938d0a4718a58bfcfddff954c66271dee8d6b324e2558657dbc68ec5155eff210e5c06306e1c6b3eb31231f7fae65a377c027f08a09f11ff5b5b7ee7ab337e3c0523e8e1f3e973c7beeb347325cfb1fe2f2caf2f5bcd9a3cb1bea85f31f1be22758013c47ae27b3365abfa2872328d0c57773ba1397c53e4000a9e09a3e13aa9241fae146590db8c44dfd931dd5ebb805db2208939e02b09b30b20b0785882e8d4ef2746a1bca8d789ea243f5e275dcde5026e4bad87199d180aafa5f39175f7eed69207f207a1288fc74783dbf76c1125eb2fc58438614e36267f32114aa359579734871d6d3e3805546c70d042ddc94b9711d70c2396ae73f8c1e6bc43917d51796e3da10e59dc2af9e78fecfb02a631e9d49c52a613ef0b1c9d01464ea0146ed4d5d34da9814913b25fca23b1dadbe52997c9567c46c7ef16076c36a0e6dc0114754500acf008639814c652aa0704fc90bd9618dd81c40d32fb94b2d3ca781c175232efcaf191b381fc4fc9729140f8cd7bd210686a7e8491b0dbbead9921f706a77d2194e81fc57594a8ffc8617fef07d81bc18a1905754519dd1de12d81597a086e78a7197aaee160404eba23bab3013fb799f8fff1f62a68d5284b166f97fbd6a837840bd780d1d4eae0c490b431fdfc75adf68381b2807858799f0b7968a94c0f8311f1913ce843847954bddc7c01b46300bb3ad7f1b6167f6fb32bb8a5ecc6912284c400611993ddd5fbf2b150a31bc8f50ff4b13f5088be3c978c903161b0dc0dd744d3ad335f49fd154b8d9fc29f00478c13b487ec068eb8fd04719acc1157dc65f5f583314ddfa2be0ae0eaceac5b9a53147eb16fe8c5f0b35bf963825f0c3e4342b964ad9ad765e00af4d3c43a4fcebdde0c4e2307b0c42a8cca3ec0cdf5d7da02dd1492368f7796c725fec606d7b46918e450c454fb1b4394202473d683b08238a0b33d3fd13aa00e153e8bd63cd8f39f9afd2ad44b05c7455fe9ded637ad89e54cdde48adaedde4cb456e78470e15e9e5a11fd7cde6432c398ce2d15ea61270d8ebd46352795d7f168159f1efcbd35c6272fdb426671256b6de1e2b92d41885b094118b845f887f15361dad0a8bbfbd55e6753b4d9c851d4199fc7e7323300ac3e7ea903f84de876e4508c27749ba462aceb35b7b7af612f0668b4a469e05f7b795fbc0d276032017584602d5f9791678d0f4b551e45c52f00d1d5affa76feefb6241026d0e85baa5964565ba144697480c1024a9c5c9fa69058f7f9c5c990485d65204f225b8fea6974271efc4df73a628233ac183fdc3ab40cee73b41815cedcbe6da5be33b0e1823e6e3ce881508ef576f2f7fdde822a211013e419c94adf4a43d591fd7ebe587eb378a6a044baba8d5703fd2221f52dcf1c05beff14281907f0af4789135ff70cbaf14f1f8b84caee06efdafc52d21799ddffa25661ee545f73a558ce982db3698294161beb0347c355a088bcc18b9ada0067c2418b8c7629e36915861050ea7afbb5fa3b37b6a626aab5fd95142760703617f46662fed817565b17cf3b28d64fc841ca44537a619d6d5b9c267ae3287b64b81e8c2d59e86e7a389a4b830ec4805ba1480fa893b70b4ea2bcc26db3f4be018eb89e3d9b32deca9669e0e39e14a04b8c2b42c3b3d97493f6ec09f989806ad296d8577377c650b50eddbd8e8a244da0602eb3f6f3334edaa54c1217bd4d7d2f5160d4b21fb49ad23fc14c6522f378a369b514d47d42d99e400344bb22098627e10c6ac620a0b0322127969ec4a262a80654bfac7573d0be7dab16612c1ef940102976bb67634f05ea3cdb9fc5d00a7ae9e2f187babb0f203dac370d92b78b6b776eb7c916cb52f3426bea00cdb3e17a008184674d434528653caa887ae57c998f22b3adc8e188cd32a48de9a2c49f48dc84dcdb4bbc96580edae5f86c3c2742529f27235141a46ddf202d35af111875de42e1ebc0476c4d310412ff9cabb34072e75620c0e74c7d9c8a673ec897ac58ed2adb4744109a4e134aba54970ba0205d2bfcd4605bbd508ca7d201975ab6266376ed95061b5e5022e479e862e3adedb809b2420f89080b2ff70ea09a36fafa52913311165013506a49c43a749a4c511301d203d920de786fbccd66587982937432ab807ffa1300ba2d75c837e0dcee52d45816ac119af4d3987143a289537106486736f6233ee496ae983898fdd524b587d086852a54943ad965d235142743f1ea4ead7b0759b94494fca63fb1821a2d3f6a9c90cb3bd9f67eb365f377fa4f158b67db53479344c5e24a3eb8d6bb556f04190af41318e605a76c7dab5c7cb84cbfbdb7533f41a955c48009277a4941bb8ac9745c3023c99cfcf9d9a4066da63685b8844abb145b81a8b928db0ca8b74b73d776f7212d397865c0f415ab0c674e969e040ac226d56da8962087f14f0ebafeef63a61e26dac38e356684295dbe5e6003e97f43f14312d1f4a290f65cbbdab81409198d06eecd9e48b083b594bf0be9bfef397da89174d4c239d90c6cdc4b75206fc28b66f67a53d2dd94dee6fe60ca487c3a4c2ec5d00e9f5d76b37bfb998ee83b6ee32bbe7279d2f67d624db28de6d8f7461da7de5468966610abd70eebb6a9c17cb6c375649bb42e2b5405c1575b504fa2e9cafe478d29d010aa7565fab0ac6e7a32f7bf6d67f97eff8d3fe62d1315b8e0e0a3a839a459904b1c61e1eb7b716388aa7490178dd3e2ad01876bf1322536bd3d6069b64f38d6d371fe928edb74e2afd1bc70f7eb7bd24f8decaab287932a2c1488e0e20e7756f08b2be11d0aa50324ab554cec980f030615223be9a478e937a39af2610bca1cf34bc752c0c12cec2ec315c702cca2e4695fd26cfeb4c0a088544b991be62963b90de7294a10d36a74af2c5106d66b12328b0a0e63e308fdb3f04e1e7ff255d27a42958db0742388b8386addf83cd217daf592a65829ae3be6b1f2c658a3184b1d14fe63d4ef51b0cf4decd2496dd562a03e7655fc4f1125b7b14bf8c17c4c1af3f4392d7f577a06e0c0529b3b9b63f8e1ce935375f38e693c06cdf3ecce364b897ed7d5911313429f8e8ef5351d1158a7265ac7eb9d2772ef0ceab453dbb52f2549a68edaa2377818667ef5e0452f21f3bc81380f53578e6a8923f3627f20def0e2c343c9bc98c3f67aac75126441c8137ef6c4ebe1b343e737b06c6d545181c085f91b07ff61f7210a1bcd8d98e0a271cb52e7e4d5889bb8f7ee007b687c1ed1e9952cd5565a06de3f21f6a375a1bedabcd22ba44e4d9d83d0e92b4ff3f738adf878e671bef611db4939966acdca5c608e4706a855bcad1dceb309fe81b943a10832e7bf1bcf4d7b856498363ab65479f7cb7c86931725d91d9eb7c097380b05c5ac56a6d3fdf6b2c9fab4e7f744a4a5a2623c16a3b47e4beb0a73b47aa5280484d964a8612c0f731df91a75c4d3040a4a31468e0b739f6210a6ab27f04c31ed8811daeddcb4e88d83cdde2a54d5c9f630fdaa0eac41088fe6638bf0821b7dd6cbda1c8be8ab5a621cec13dae38708cad99086a94611b015ea172397dfa57496702927bccb3f565a9ade014d564b31cadca9d7863d6aed14bf6bec807f0c4503b0a458f4ff7ffd0f758acda62790bb4f047c2a84cad73f259e841cafbd83d03da6fe5d73842d05536ea377100f5e2c7ba8261149f9190b5f30e2f4e90be5f682f9a9dc007d9f5f06f7b2ca9337c64ee17f0f22f40dcf85397d27442f8cb0e87c840b40156233a6b2f5fa5e571b6a4b971aaf1a2ac45ba02353cec8a31920866c53e08f28f3671a3481a9c74fc77720a905fa10dffa5d90d50469ff23e719d1fb2408771e8c1cc7cc55983ff2da5e2960aa7c6b2f2d5437e65b7ef7b58250d5c6c29aa75bfeb29fb6b68119fc3f66d938c7f2f8672fc8eb043d57d3d0a16b4cd7aedd96a0bc5d840d621795935130e9aabe6f51727ec844aeca35d8278bf90e141fb88f5568415912a8b27dc5f8cdd1c73005f59aeb5501df7ff70401f9d808d69e24aa385a7472f39914f8136ff23f06db003ea54ce6006a6788fef22f74b603a7bd0ad6ff39bdb1825561d56318006bad9aa7dbcf8f86d7877ca6be4659457a0fc48fc777d36a8d19600253067154e94e584f24d985bbb19013cc884f49aa7dfa276345979af1f57bd8fa2227c0a8ed3938010fa25a4411b7b6503db66245670f88ca6f98c52df9764050b154e681887e2ba08c201d28ae47ddd4f6e74f36e8e80fe29d689f438f85f6beb26a7da57767189bdad34d9890e0fc748e85bfe7b46678e743580a2761e3e3068f27855b67ad51cc60a653452a418e21135f2f04fc6dbe676018a1a7cf10773151a4a94d898dfb2af5a24d4f6d34f2640b8270873ed25669226be1cc47b1a269747b9a0703880534c207a02ab2c5510500aa88d9890e746a8c408b62437959cf832409c2e5cc4102aed7fe3518fbf65bf34dc57184951f3e7348728fa0308609155293cd929be552727fff2ce9121dea269c6d5d978f99d92b16ea18d3f71062d96fdb46f64585cb2d0cb7da2f54b2c74059219ce937484c59ee2718d7266e968cb3e9d7209480820f3cf2bbe62765a99b0fa762bb8fd1d4962c938ffa78e8957b01caf7d7ef6068aedebe67af9a2b539af28ce71f57e9e3313ab748b7e4939a2fc061de34bf45ae4345d34ce729932dd8f3f397d0562a75845caf0e26c39963cc4150432a5633b6cb0c531413d6547b98e167855ead00d42926413c286cc5c52ee37ba83907b3b3de0aeed75f3acddfa1d87f0f2ce175e2cc5f03eab0f0b6ef7f0d4ef2f8857f92b8cb108d15e474d518710e303ee2ca7ab7b797b969db11a560c663df7f09b7b6eebbe1cf2ed3890996763ca936b71047ea702a7586caa61822bf932c397f179fabf12467e9efe18a0d5800c2b57d4f57c86ee171d997697594ce6ee403bdda186b1b6cc9ebb9ae7a71f1e86ce17ef31dfe0a70d7fd34adcb391442e30afc199e03aae48f03bbf4ec93e4a23edd9e3dfade24a962cd47b47476a096152a5993c22df3554e7aa27456bcb513ec970d13316a838021ea3a37982862d0c56f04041822d205e03b6b09803bf35223d2aba88913e80cc0ca4b2acb6d84a0eda4f082f4cf8eaa184c4214f5cf2d178554c5425b2cd1450890c31091d616573db383e662de1f144259d1aabcdf8757cd6b09522f7079a6942bff29434a58c2d22beb129b23d7743970cae9bc108f5ce5d527683cf185e236cdc921c4cdb86cb7925b01044b45c2781ab4a2dbf43a1418400dd9976d783432346f26235b9406d3865cd1c599a63fafe8544e07c1df0391e2cb7e6711cbd0e1b772af7fa0492e6d0470e466f66b0f0f80bb752e004f345e9d9dedf0836192bf8ec2ac1f8eb0d349acda417b35a23a363ae21e658b45f0272634f08685d7da80385127036624cf9c613dda4e77015f7cae229b7cffe0096f4c713821c3b14ea92cc4f21269660bb7af0b2bfb04d89d3e84d16a4d5484891a0241b968f00a5e1cfd94368d2f610137731c0535b45bd1c16c339420476ec96ab8eb30677a5182671b4e35942b3e128ae5089c912273cfe8fdcdc086456e2bb9a563abe4d248b842d3c747532d33f6209fc90dc17ff0add00b8739b92c578729bb76293b19330b130341b7ba8626921fc268a2efe5ef40ebf4511b7b9c107328347d9e4ed280514e237e75be1e81be2f3f947d3e1fbea302090ae75f216b26a56f21a6e69c6add5d1aa55018af15dbf459f3967c82582375e4c4f4c45c22ea6b83820908dbd9ad0e11d43a8a76d7e0e1bed454e2d06f4c83b7ac09db8f804150274e0f2733fc39760514583a5e0558644f9d1f046257a1e03e2515c344688fb01ee7d37611edc6e3596faba34b3079649b5612721ab075885befe27dffb0954f1d6e15bc3896d648726f8c29a7eb5ecf75fcf8b9c085589ff7b6bbe7b799fc3278203015561c2a609546b4efa679136b27e2e695ef87c4a5379ea081ce12119c4e046026ee9ab9d8e312024508218f8388b0581ae7fd0d862e972210046607654486dbdab244c79c8eb938f165e58cf2e193a73ed4a49c652b6a0687b302b83f81c5b5e925df011d3910e165e57b9740764f67994a6586e2d3dbd1b53e5fdb399de490f8be81ec2f464af0da5e77027b1a6cbc51396a79b958cc64ca5f57067b653acff93e0ad34be7e92ad00c983197f83c1450929df6e2050a2e603d3ac62c443a3cb226dc0a9981e1c5e1b3419b27ada5a063ada3c3ff6e71020cb91d3d7574e7fa03c86af5e648ddbe4ad86f34cd8f02500e8cc019b616857d74dfaa8c83e6187708974be9e0cd49ab5a464703c66d4043977f0f95a36934862356a0b66e7278cae8865933ad44dcc9df1f34a35939d744bcee891da3dc97f34fe9f75f43997c60705fa663e8f71a2573d98cd5791ad18ecd0343484ac7aba8599d601efb784533c636e3b75ef754935914d4dfba685f720264f244bccb59717898abfd1a3783ecc53c578675ea2345a4cf8086cd15bfaccc6dd0c13cc37fbd3512286ce81b975fb7ee3cc52f15e1c002130525b286610d24e7be325a0e9804d3b8e394b1812460006908f74294568480eaa058bc7a1385f7fe187c40250bcc0f8dc69fd2728b0801fc6cdd5496b301846c7601dde69625fc43a652a31690af3c578f2470a38b097dcbe2a0b200a01480b9724c5b37b1a9fe264df315e9eb4bfcccd656a8aa0c6612c756611a70ebc48827e7b7c43fb98f97e942b3d6d381f7b401c098188936e3bb6c101541acd7498ece9dc8ed687d6ff29db4eebee396c3309f4dc41f52375d12ea182434ec5a9b26b4c2f9d1116a4bfade4175fa584c0a9271b22f272df5d333c80fef03e125d402753f4e8d4c3ebc219e21db130099a6ded8ab7615d4f8374b031efa5fea9012380bf985630eab9ec3c3ab377da39d3799a2d427b21e214da0e3bccf450af73eca0181f3298d496afdf34a671e410bb47a97a98335744c111fb5c5082176f825e770270caf81d9d292f1cf03851c9c0a57f1ccaa936f2af765c10c9177eb50aa661c6fd3e16a5e36220f4e452957e82c20474b714b606c21b7b2113453f6f2c9bbeffa3866b92c767f7709a83a627d46058f9bf69bb25c0a7fba109a08fda6af3e8ec435dbc93fd38feefb28e90ab5c3f2a6c9f795d630d5e1f515fd071b4ed351490519e2de547dd29a8f9219b6995081d5502c79d2b9e06c90d10b62d49b5f06b9f4fb594a09dffd11b08f1bbb1f554e9e931d906afa11d12c1873bbf194046f82ddde24b796fc6c61a351f51f21611b1893b1bf30f571f6cd6c9627dbdb67e32ed3aba6f123921dec3a43eb590c04617da79e384c15a7407f3105feb8d492f784ef9a48d10f4f1255e3ee34ed9f955c456bc7d0feaeb998e993a521658a44077f0692e2afb21399fae4f3b14fb9802fdbffc36a6d1f999aaf3a18acd8853730b20727efed771d10b084989d217742d1b42639588ad20603abb4f5f5dabfe95c22f4249a9da439eaa4264f5612bc8d02f40d987fb168b8e1e6736069351444a661c6b89e550b2cf55bfe192aae3019a46a9960fbfad43a82c3eba08c99eb2af00dc2492cd5024aae3c19dbd48f57ad123136b24370082a7b6ebd27f3de862b262015394f331b842f88ea0859fcf3636712391ebe69bdafa7571b97b7990111e8bcd3f868884dd62c1e78563d710b58e0b8790c175962ea54c2d9288fe1459489802c2f638e1ec0e07ec1d48bbedbe41851b68d5eff675f4ad6a142bd4005445ee4d1c38757f0381a9330eae34f0477d1c96feaf989c75af8890b9b1e8a9d57eec7f95ac70bda793de87ab7207f05a08f57155cbafdfb36ed6d490abe004a30991392f5308f6c9ae544d84c30678fff901a088c1b74e6e8019e09eacfd6a506a62ba62b6405bf3dc1a0947fab4aa17fbf1c176f4bbdcc94dce9cac9668f26ca8baabd3f6140cbe4d9dba3089bfc32ea597e0350b6c3bd61614a0ea69b5d7e09f6480f33af8129321c2f1c61ad13d3ad2008c50d2533b711e31eb14f6c4d095cb4b42f495b492bfd98ca28d9f827cca89c85a8a939d3159569cbbb61dc0e26c2cc2ece49d15a1df2b98218d40222248967abd5af68a3e979fa5b6a7331f8e0c120b8c50b0a79a97178c6e48c320c7394668e366c5ae83f63d0b089dd0012007ef10a767a40af35fa22cc974a397714c65413fad6ed79a9c97a780b166f9778f0df75c01c5d87d4a1e70bec5fccbe46e00a3de4de1f70232c906b8ff8f1a8885b334b3b838185a7f3d52019886325cf3e100bfd248a4687be803683feccacd4a13a7833675453762b3c0a10e829442e49ea600f603b03b88d8ca3b3ad119ad054fbae79bb58e52ce1d51538f532cf7f0f7f39dca79d3fac3491d2f7003a09d0d903fbdf38ea592f895d86ed5940c2a425e91437b69212ae40ecfe26814fc00846be0d0f6370e30314e3fd65cded11f0a05268c7704bf7614ff5e8f540ace0237f62ec8caed2a7998f26fc697469a7bc7ffba2d54b7c7c1cf9565902f1de04c6d4ab5a222e6e771189dfb463e1c03110970ad36674c611bc52df987c610cf88a95f7cc24038f8a43243247176ed0d26bf9b7f2ed8d91f58efc3311d36f3ed7c844b1f24894ff52a7b7a324497d5742dbbfc588634699a91e52fd58f318054b53cedc37450f48fbdadb66f6448b80df5c27e5903315db48ed8ae4d0f43665cb81ffdf70c89ae97e9adf8be93a6ea7ddb366528d54120c7b6d726fcd1df9fa682816d25ec4d88b57f811af0381cbb32d18ebfcf95b90a2ff05a0a87dc67f84a838bc4558c044e9ee54e2edd27b6bc1c231a73fb84550ff3aedbd43283542117857db40fbb90a3fc9ea1d64bc1de5b0fb1cb4232392ef1ee951ffb0b6f023bca466cd3507e85d9c14b6c2252f62d842fc80a101085cbd0e1c53730f0f75a828b1b9a4db61d942a8e1214a23aa250f515d41de6adf9ca87b147fc7dc0dec8f8d378fc686b2f8c53a0797a483b99b3f6683f64a646a741603aa05f2d3f5953fde55f1a08812c942ec02aaa0e101671138b9b67a187e39245341674f97583f17116b3a138e5f610eb9549787060f4a759e409f9a43194cad74847c3229f4ec310b0ef07a1f98bc173bce839131a8f6c6bea3f5d08cc4d3e95506943bc209b201fb2ca8150cf22a48aa629ef2b5c8ea2490fd8b6a1489b6f4b8aa7d1de5fbacce55e4e46e43d136cccf1c6834f924080f68b70cbe6c30fbc5adaf007cef1faa42d18a49122bf5f324183229a5d6492957ea4329334b611bb597ceaebc5ffb2e9d638e92426d1358c61dc81db0dbcda0c04bc4a1f5ebe375579056c692eb016f7d98bc0615bff190d2cb14768aa040e84666f9686a405ab6539059839aac1f986628340730d2a0188949a68edff693f1f7588413c222dee7bf05bc3617a7680d0b218f9908508449df9e994f4943b56470178e849a4f41bd8ee77b4d303c2ba0677bb5023bf9dc2accd7d205952c3c60950c5078f08a38f44b582473e89543ab25da86ca488e6617f6b949b79ecfd0326b91d48f35a2c876786c77f80b5058c4da2f23e600e2f9690f1cefd5a36a558b7254c09094e5332964e572e02d0530ddaba5df9480e66b303bcfe666d1fa9e2fe18d74d81f4237e2f6befa1a67e75557a6814dd49a0320f57ce584852f775ca6d74be21fb3e6a097f11e9021d4bf37dc59f1a600ce2aa630e140de198da0f0ff8ee202bcf0dcbf655f22c4aa8ee3c0efd38bf89a8484a9fba3c2654d9f6cfcc749934378740ec2d56f126641a1b76a5b26b390ca1010ee8ff7767b822ab6ef0597d1039c4d4a15e87fb3aa35e94529898efb94370c9e675e4c5f4c271dc2d9339b6f408e6d810d13335a2b7d7bea95d6e1ab174046189ab53dd9b336853dc9194f4e9cbca2e27aeffcc3585642f2997eae3c3808aa58f23f36e1ea1c4ec6da1445bf1be778040b9b90bf7bfb3b2fa5b905cff799283b4cc497f07993e865d955eada8ac24110784a1faa6f0aacf1dad64236d06ab824c819bbe58533d5afac347ae9286c3e1c73b2edffe60c86cbb3d2b0ee11b8126b13e39c4b14758fbf5d67fa74bde3ddedb3d2dc8919bd60e76fb4202f53c972c08249121effc68664b0c89eed9d5418929984bf5bf985062084fefc1d22f9a5c21eedb21224503966fbf1fe2aabece07fc35c79816255e711853fbdef46900c17c04a1587af87d1d7a9f9a22393b30bed2b93fa333e62573460fd4dfb2d96c52508e0740e4ea15961d08363c61e2ad2f9f10371e7f5f33990c67bdb5c52b34446f05249058836001f642e8771792838618d1c07295c50105945ffbbdc7c0ee7f86a8dd8d688ab2a319b71a39324571ebeb5faf85d6aef0b8edb4e1a6526f00d9816c5eb8293db9760db1d8795c504befd3c4c2748ee6304a218c617181370f56ebebaaf4a7bbbe6271eb50385eaceb05ce70f6e547f16aa03953dfa09f238e4fa7d91b590837a9414fa88932cc01599a8eed6e45c218cf3a6252833bcb5e915d0f8e7f22b442e41dc6abfc46217f0955d2dc55aff77a0fb09e6c420a007c425f7f09785d4545be05b438ce31b28e527821c9497d7ccfe79f9c0304166b13e865ddc97297a0c8a6e52b780f0e6d2717419a5c37941a6d8e8021bb62266a0bd09f98c00274132ed4bbe0775541d6e03e792b6120ff511918faf366845f4b09041ded4801df18b6636761e8e83643e0e6ab8b83fcafb98cc87d61ddbe24606d3d1d65d408b42b072fbb1945ebfcd75989029f400243222fb470e16176c2c86c56d3b9fca0cd09f64c90e2e4b94a82a33be0081ead72e10b3ca3e350e199c6e9b925b689f5543a94a49dfa3402aa8761373b2a3df00e7777112acaca4cb07cc166e77681f53953ad4d5e33dcf900cadb6a0850d84411502b36b41262ca2ee0a8e1ba9a65c00909bdeb8cd02fb5de63cc677ec2fc37c09523343b645ea917c654d393776cbd42f647163cdb8e27a00ab7a89826ce4639089942a717d8d6ede3b351605eb06d84d725d74752eece09251ddea84d7a39f8ec3664763ba1ab966293f0a8fb2e6897a68d1d39aea099e4ced6748f538a88402ce230ad841317a52b9612f5310291da4766f31ec201b80402f5853546042971bf59dff7731a76e3320cfe4626a3db06097b4f244c3b31e517358aa57dc2f09fc56259297678133045cccc57c2a6600b850a2c7eab566b81631304c94207bd8526c7c42211a97f161de44475c867f49cb8cb319c3d5cb0faac67ad73ee5c7afaf378441f5adfa05622072f529727ed88e24126b5195d06cc2565464087a2dddaf49f50c06f0e60a9f639217437090c06cfb14e28603e20388a0610cd69951a664f19d08972b09f4539ec1b9ab7f04314f733de9bfe380c9a82c2400191f234a5379a014633b5bd2154570bed3fc18d9d577a94b7d2c76c04eb72675c67fb138114a8087e811c395333812a670ccc1c253b614809564391958127e457d552d180b6a5c796e6484b9b10eeeebde4cc77ea66e342bf0e1c6ea08da04edeb171f6a3257c26ef1dad0b176f7f3a5b540beac276536611206a91b2a7d73e11fd638f92d0f79495560dfd50ce0a925c24c1810e06b8f01dbd84dbbe28d1690cac55727cc21f487d11737f0508bc245bb0a0807ba539c8e9d1ea335fce45c36f7cb1d10825344346555c6d5cd3f71c09885f7514caf4771766930eaa4b5220cf822b52c9b93c3f9dbe0fa4db1d0bccf8e625aa735b4e6af203b0548e424aad06e1fd74dd0778322a22d44104c4bfec9e876673ff3875d8363194e9cfa894224c6c6662c4fe7748b949e3f29741f38322604bc2fe3430afda45e778ec135cf46b0fd3990cd9bf4a7a120f3d9cec1101330964cb83cb6486cadeaedeea4ee048bfb72d0b57f75b095f2c3148e0ac7e6cfcf57bac45df8581b65d2a4d5053384da2e905cee56fea30cb9c721f60e4eb713acc079c495615163c497677f1007350b79501e115d771a66006d8d2e8f5b603b2e922d06f7ce93d6e10bfe81caa6d48e2d893c2696bfafe08dda6464a65bb3a4fefeb54d3b790219ee2e02895aec227b7100bad54b351db078ac122804392e69669472c2909a3b4c316a15a244512de7acc274b3e83a018e072e50e63abc1793419db798bd9f1035cb8292684e597de56ddc35bb2e5baaf298b59e93aa7dda26cde66b8ddc32b5c6ccda156bd3fc486b1977b18df508af126be28eed24452e97b8da6dda461327643c41843309d3fa0f0e55768569127ea649fa868e0a6f68ef0372dc2f512a6539282f394b1fcfd00d989daa09da7411e6b5b3bb70d5561ad77b004b6f8adc598ea4e0d6b7b2b063846cc39d00ce5d4fa5d099ae79c4502257184077d658065f8046225db12aba4eacf0d9d67e430231e9fad43f13500873e73b344486c8c2c70d47194e1b637369014544effd9a600626673f40265a4786509a19481536ed73464c24655b441448b983c9243a70ea5dc8b44d6bf4c7d7e19055ff38d50ee46ace9ed59af14bc884fe7d4739a4e5757edf9d936fb04b056d1d5191561947fa52ee300873cfe8af9b01be1703b06a085973bf0741df752a3bc346803159a03b2514271b0860e8e2efb1b35398eed1be4a1439c2e45de5771377e3c7a115e5cd33628b359b14fdfe6ab02463491f84e1655b3f21903f91a0da7a68dc2712f9c3523517b2dbee14a478653b9396860fdba461acd8bdea66006417c86c7d9a397b26e93d68e3ad46159a9a46d04f90450c0a8f3636e0ec2074fdfac4de5cc4c08d8733cc833ef99f5a9d149bd2ae2fa8d8ce48e9453e9c35a85b5d29a210311f09cd4597dd1b5b85b3596dce10b9abfddd2ef05b95c4e34f95b78dc85419f6a48efadf6f5ae48cce38d4a23e1613b7d7b96cef6204cac2a405b6f972536ae76d91044ddaf8b18e65b9883a18b28e9cd808db9f34cd2174f1278e3f3dba11c6a295e5b13c8316b2723232335e16d976e093444badff4ec2e45201ea2a91e16a00740237e79415877b66048a54ed179f1326d2367a28bd3eec839a0019ff4716d482e41ca821f19c9fe2a9be527e9922b44bd1b4b66bb05023068958f893309b35d32ce319910abdb86e6467bfb7ca16a65f85c099d9b4482d2cf84bdeae6a3d1f0d13c04e1c8c4aae56fdf39f844808bd4609a32375b0a6a4c55af186bdd67c970e831560e234ce518d82b2af4093531ed86d70370bcc5dcee2fa8d97d9d7d6b199fb9843a58aae8bf5d725890ee948779325ff65c0895f56fe12fe7411eab355796f19a2c049676dad9b22d4eb9f454f0a041292111cadf67d641379caefd810b46dc303d648639cecdd8a44be0b3406534f45ea53f30f0a9bc87f9edb34f7f973efd40345cd97b812636331730c412ee1a3f2677fa9fd59b92eb8dfb5dce14e985bbf7a36772fde15d388399610804fb753ef9dfd67f119b578bb576a2073233c6e8ea0414e28bf50de7e12e4205dd0dbd1f5ed7860b681f279cfe4eaeeef2626cad1e0d55cc5e8ba7f45d071f958dd2a11f30ee71a9a4a932ffecb295e4793639032a160603816c26751160489b4afe734e0b59b3b55013aa180727b6d26bd9a53825ba56c71b162cd91964a694f6be99df0376d08c28224dcaa350c2061332b6cd9c2d01105a2e4ee1f79f86bb89e7ddd24debe9b85deebe73d114c9fecdfcc27a1850309084ea496743916b927c65970c47c1a7d2e7e81aac2b548e5969e81d6d1f9c7e9610835c48e2c48f072b32c02f6516ded4d350ac64f32f444ba752b9dfa5ea76829d0dc654bf28fccc1cb23f0d254d151e5087a41b0875f7825036e11c0c0b86b1c2b7d51fa0a1a3911aefad1b6d9234ea295e14d1ee37b3f16514d2c820ce728262fb9fcca434c301b31039c7ed08002205b0dafed3162262afedfa9be74b1a482792b65f69cd4dd6c7476260645c704a0bfc18fb5554aed21c5f46011a322dd7a23d8271fcf4907f9145c093d72a8abd4880ab1e5d73420e622b0e25f9942ad265433f8bedc8d693f7097bc09d6ef4c4e08c829c6adc3204a014eec96fd3a3ec017b092c9cf4f71432a8327923dca2fa82da67bdb9cb78b6c41b1ba0381ab0d6811b229b549d312f1067f29cca6d3c97cba03d1ab11effea97e2055e2c5299ba52eaf404dc7e6c32151229c1b529e3990be0ba6129b78f9191a35ab509fce8a5838b483230e90b5e196be45eb2fc6097f91d4b7f39b6291efd316311cd45029cad73ac3748810f38e5f464099e6e2a9a3336e89d66bbfe17d25f1ee50f7077ad207a154892d35a63bfc4ca069a082ee00901e8d582f921c1331e5f27c27bd057d86f3f3c460771da4b6d188028fa330ff4e80da223e85db1d191716c65643ceed5c6a91c5e7d6c9e7667851ba1f4f71007847dac46996233b3be985f931871c304dfa1a351f15d3fff72188d34c2125899c8854f85cce8ae6ab6a2109da54120270e384b9c1bbf5ee0e816c55ed91e8a689b161e03aa51396d3b44039089a0c9b5e85c5c87ae215af1af50e8c121a931ac63190cd3fcfd7d40cc436824acf86c6181c7e19b6cbcb8ed85f606e9ca1aff63ec4fc8217387fc4d7276dbe42d07f92aec68dff34bdcc278a0c6318b5a204282147ac214bb91150b3947a0879edcc5cb0da81c28fd7807fb046882b9e5df47e2889b82f49ad1a37956e5ae76986b35491c007a7db542ae7e3729746afea86200e505cdb6fe98763d265d0a4d455a3de5d939415b75b8f3796e4042ad25fd5414d7ad4d1c831d0c6b435565b2463c05b9d4f7c6765d73f1cad3b077f15e54f0f5b09b343c652eefe2cce44e26045a3c70f1b1e74265abb0169c17ddd32632518ea48671bbc0ca084eb24237228b42b34cc28aa80a8c017c4c8887f6303ce0dc3576bd318182e45c301d3f2a96c7e19ca686069803342737f31be4ab08fa08e5f1523d24864c25da2fa1fcbb9133eda80bc39ac9eeb9c2fee73cf38c8d7283d879d0ccc51562ae185d48a5d0ecb6c2900954cb8f32fabbeb3c61da40638775b1a3fd253900baa8c9418dc9c5b5b11814e6113400c1e6adf7abb90f3f9b8c6356988bc4da13c530401b8981233e7123fef1a5f3383cd802ccd731b892adfb6e70583a6f25956b9cad83fd78fd774c4f22317ad1961a2249dcfdfd5736e72f5e91ed8cc0960fb40c2a08d4e58d9dd4395a04cfad7fb8ea9b404a8c5f4acd8feb0af41badc52b47336b0f2ffc957b4aaf6827a809da90b18fa68edf9a373101bf539bb1fd4026c57cb7d6c19974dbaccff240050fc1b7575b4a46425a8af15f6609ad1b5af13632e5201f4b17d2402685270cb81c26d6559d6dfa7edcf66ccdbf5c5ee58f8e038a2cb33971c22296393c776fe54f3fbe3b56c02f5adca7765dc7896049040036a54a98d341ef59829dc8f3c80949265dc2255cc2eb11bb968e5c7114be79370ade0582419d3ba70de57b6623c1cd0516a30e61e19aa45eab5d93ac461451adc2e06a2fd88308d34a72e83f716454f368cf6bc76bb34ebcd8f3c77df6916bbcd3c0310657ef37a9d310f85fce39bcf4009d67bf567eb279b6b4892f76a8fc74b25f29307f710605b15250bafba68840de17b09ea04aab519f24023fe2dea413e0a992a0bc545b51bdd5964dd9e7d5781047c2960e3fe5eb38e96bf688e62ad9a43ca36fc7320d9a9f421a10df892d7991153e48b1d51f73c67836a50b5577249be882a4bce3387adea0db77ca60c572a741d87ab4901087b5ade22ce475c8065133fbe9588aaabed1969bfcaba2c35d4aafcb05ba700f21751ade43a3bdc520cfa819bc7a7edd3154945686cd18d76c82e8f663eeed2a957add3429caca9ec8d4e0148ad3c5b30c79771eb6bd30b1c67703cd58fd94cc686d4b2d0e8e6bdac5df5f27059dfb107fce637c968ca12f178d6cf6706b152d29ac8ad3be722d443f5b1cf945c3a058266ad97c5ad984cd4bb1004101953082463eba00b432cffdeb3c16f6129daa4c9d5d69524a2e346dc3d66c52f80186d0f095b5fbd238b33763aa20d2b1fa2eaf65a382660b1fc8e1f24b55174d91925bd792e91ae5f2501462815753ae84b8f79f3882399e7e70d96a4def1bffc44ed674ba9894bf1e8a4ba0a2a89995cd26ea841def4490730187ca2358c63a3e6a03a4b1ce2c729c5a59c971115b6a5669f7909f98f28577202f7ff007c75e84f264ab4f371464fd597383bd2625a6b954066c0e34010d8237b910e8b317e73f16240c33999d4f77f324a2af53d3326661ae39d77ae4051cc5441589c5891e937d1e3b2c6599bd853a55c3733f1c1dfba8979fcea6095b76e03e5343eb426bb89be61a91992eac96da6a057e78aaba3dd6438b4cd43436630223ee3eea512eeb8593128d8b930f4d83a705283f44c3645636aa6e68531f84e41a3ca0fc732010e5373db22e58b38e83bc123f6494ad74e10ad84da2cd55b2b03b4d03b655f9ce9446017db70b0cdaffa8d493e7fc5a8dfaf7e4890b398c298d320cd52a0e49eff77d5fb8dbbd4243bfbe7a581d04d27bf5bdc433e28e69e7d48fa85a9192745fd2728a818fcc89b47df174efde9a5dda91ccedb4789049148bcd921e5e9ed7ee7d63609df2ea921b42c35863359aed3c342f8f73823fa440d841a1bc54c609999e14fd44767c34a7cec7814692c33f430b6de000356318ebcd63219a36216e314b4e6ba4bf4c8bdc2ca013d77e5145191bf86a8aee34c788d3b5934c8bdd3ca959522249f521b778d7813dd1e8ce8f2f28196d29deb6d93202f5d76bfbf99111687e175b5baec496ca77ed25c233408adb8b3a66e3dfaa60c4b14778a3fd086d785c2a0256e79fb0b616bc0c87804fab3d637a3edf789677b3c699228f688dba473de520d556b98a050c56fc1a2b7a1c66acfc2075284f13fa77e8ffe72dee0df64063b2dbd0851f3347ea7c7633b1f2d775e28bdcabe32bfe9429ed4e2f58f333dad437c4b5eba89bd75826529b71f62dd6d1b2327015c93951d44a22d17244b6187a7669cff745ed03e6fd22ce93b653bd0fbceb1e7aca334a9a50d475b136755e7b515bd338e43e3990737fdf5b9d44f2005af8c1b2586bb849542163e98de3bf269d5dbb4dfb876d78fcddfb00f2499d4ee322a25947b47374e752a2be6ce9edbbab463582a8395dcf8d9cc340ddf8f7ed048c0b2b1790e0d96aee02c02d87139bcf72fb7b0602bfba01a5e721354ccf5a0cab0074a02d5c9db3a533453206149608d0071d1c48aa85d1662894a5376d9e9a5e4a59f3a78377267670be0ca19833a6bf49a3bafe0da9c84376f7882235edf1ca048a076036faab57eed8109e950217169531ff33607f6637e940a8d3fe34c383314587ff98ebefd588022804826d747feef19814a3cfc6bbd0f291d7ae61d3a5ecae30da0ba6596ed061e6914b7c554f32792bf1580019af6e7f7278b10ddb17ec1fbff04023849bc59602e7b2830472e264e0ed2bc11fe27e2b66395082fbd7a131a4bc258e2dd3600842e9b682e387322b42efcd48b959746d0fbc6cfb3821fd6e33da99ed262fcc1e1e822be19c303ce5f78b1ec58e5d272030693d35bbc89fc8b5864df2ee2ea4c0056918a34dbbca398f043739b4c644cdad04eecf5349fe505ca39df30149ccaba4c764e1785a18b63bc9399499e464ae55af6827db9c38ad7571bbcb245ea459f71198d3cf1b0ff083a9e2ca1759eceefc9da2d669620f0ae9c906ff391c79ce2269884f43de06b09dc4d8db9c2c5ad88c105b3298eed1bf70c97d84ce62bbff36cf31082f8584374dcd2992d593ab57002ec20e2f4a6f7cfad86ef8830bcc4e01e189563bba49bca02d89a6ccf25639dafbeb1b6a20a92f4dc45aabbf54620acb73385a2688e23afb34607b8b3e5a7337fadcb56561b8a13aeb2ad858e40a5a9d37bacbb346e6657f656c4160cc1f8323407190a8837d03baf2397ce138564690d9e57dfcb78219f3dbf25fa442e23c379e0e2f736d2edc875fc09ef791a18112f26206f021b37adb05b6626addc00aaf6634ad97ecafb49c89f9f3881f5c309b11ea2044f70c82f3180b3bf77a01754d587bab5b8c05cbdd4daaeaa840b82f6fcf63a2bdc776d0acc66941ee99442282795d6db98870c91de3566c96038ee67d60175adb79af08d2cc222689336b138f9f9198b75cc58260a7f9a152d0c0bf02f101c6a227c9f1796e6b997fb2c8e5b17007090ed82e73b07297ed713a344eaafc71fedd70cb173c425c628c8cf6f6ac669720f3b49571273fb3857009b361cbc23462ba765f30fe0478f4dd2a6426f89d4515625cf33acb4ca803418e914cb5f2163b2bb78de4412c2e1b54339ea6954ea6ecc3f97a1517257eef91de2ba6af7d68ad48f062e2d0e4a8ec3d32100fa64e53ac00a0698f598edd44b747d8c38a510c748bef7730cef3c8e54da904404918ebf9d2d7c9d72720069be127c5d3915754f90aca96bd5ac2681114b845e96b60eaf67ab0b938d722ef8c6a91eb8c4c6aca474de5238aa2bc3b333c051a64feece29bd9139a8f212093742e396dc0888d9ab5c04e1d0aac806ed65c7b0f17286562518fd68f2b2e5a4ed986db565cdf218c5415f7fe2e881dd771ce3fe98f87fc7554ce8e5041a73ee4735deb2f873c5bbe3f19b1a8dd63331ec465125b299e712bba63836c8a6eb28800ca6fbc7a4fdb48f6f5124f36cc53812a50dbe6c012db2e91936837bbb9d62c9e6191a0ddecf39192699a6a6eb205670b0b8c51a492ac386a692dadb7dee4f2613552378eb5f19e7a8cb9a402a765669bb0fe16256c6ca6be209953b2bf83dbcf674b69c754f3fb19088f39d61332d94770d77ea8939ee55fa93cea9d06efdc153f9693d76385bab91288bd4e800d14340f23b3b0f9e1e739ed237cb32ba18980b8109607baab4a9cf7c222e98e9af1898de7e7efda0bea2b65fb70ff900754bfa3678ae88649bfb1baf241e5174231f07f5437835e3869c6b1e243e83de70f1fa90fffa108ebe62f929cdc7422a2ede9642b0eb09aa885099e7b942333092f347d42e8b5c77172f17b97461ff51b40357c0b14e8c5cb2bb417cfe87fb603b74c6f78b7ade371e0aa0cb9ff816163ecd13bf064905392fb644b5ce51007fdfc7f9cb429aa8e0c8438ffbbf09d2462f6344a0552c87fa40161865d85970c70c049df7700428d4f17f137c49eb3304783ddd58d1885f5a427f2d8f8dea7e13bc766c487dddddf8ce4e4c0f86cf9657a7899d8d1ef9185d63ca1fe30c5aac85d34316751c22f06a8a272fd2cecb96f8f6d61154abcdadd3cf6f951a97628673f7298f37df62c8e71578b4b3c1274de56c35ea72f2a1b33cd0b0dd082fd557b329f6e9b5d75abdd3dc5f44efd99a6c6c40aabbf3eac9aef616315f617967bca4dd0a54ebfcf09b105be41b6c336dfa3cb2bc95ecde5a822e6643758cd060b128d79dd80be402eb62022f2638fd797c0b0ea6ddf7b47b68359800f425650b37003f7ad66356429ebf083c0b267ab68cb453142b135228082163e98f9e3bfb58e39d2a20c28949b7682966b95197228f91aed8f48c891a32a30ed05ad383f5731709bd763ea4ebf0812ba1302972cb9457d9811044ae55ac0af22ca3565e16305e41531310615c3944cc567d469bf346de8c893d76a9022d6999e31ff107b1d815ef708c098624052fa054d9e8a0a468606799eab805aa83a490a3fa8c174dbbab5d9f3db7010a90e8b9a7fc413969d00ec6858ad775fc23c28decbe97e71b0e7e3ec4a959ea755dd2623247e68214ffb12edbcb4a69de280265425c9f111aaace7a6fdaa408eb346f765cdad76db57ec73750bd03cdd237cae216ae19449e6ef4a4791454b50775acafb27015b6ba3499703875030cab735ff71c1ee8a7884b663633f114443367759781b89b47db2a1001b945a385b2e09ffd9280e53ed763abb35a0cc0a2d62a8258f420e3a34845fb98ceb357a2451a6532ee5b9f2f1a7eaea77c871b144bdd20996f70b819be807463ebb3e702aa9a3164ea40cf2a43f8806e3f45062d6671b5d730f13d623a14af04f3aed8a06fc938fd2272ee128ebfcbcebfba62db70c4f8c3922646426e73bd8c1eaccc6436208ce62794106723e05981b1bfcf3d6e2b6e2846468766867a3f34f5707b5a61c82cbfe98a3a34382ae200a1e9f87378c14911b0103e4d72fadf5c5c81e80fa362e7873191b27c38823b7ceca6a08c9d2642e5a9bccd547a21e9434f7b1c329be25b3f50aaa8839cfa5f3a99139e56b252aea39eafd38041b315f10f8b97e163e3f5ddf89924c75f85371d5bd128fa4aadf1709f2e2cc65387db90de53b9550bfeb55e8c293ec889adfde89f02150208e7cddfd707d81872c43268b75f2ec0eb39b4c61240da8d6e911a29a0a1bc9cd3ec08c35ca6cdbc81bb01e8cc916b5836173d2e0caff2634b9c95a74c449c61c4a07d4916a2563a5374fd3c15582353db8fb2bdf881360151fe96a2f84c1bcf8592516c2bc0a265df25397e9741d1d67c435d6e4afda8f8a9a5a45df8c886fdffc9350caa3078e78ac737327e7e9e96824dac17a9103af329c19bd5532c83498b9a38f1f2705e6cdafc3310a43402ffc9ad5992d944eff8c8c77b9a8a228877b0d7363a3faa96adf843a084b902c66e0b16c7d38d248beb7fa709e0880c76d65e257217712930200e14ef013d9a64d20183b7dbb330f9ef62d132b784158b3391d2170357504bda9e5ed54147985fa05935abeb49dcaabe233f09711cfc122dae14d4293ae117a9009b45d51bbca3eb7cd15a78e32f939525c03164c9530008417fab2aed9e00087b5262dffe3bdc9a0096e926959c49678ae543c981a427dd599f52f159bb9cd6bd77ff34b99544ec89d75e3104095e4437970cfb1496f47f1fb94aa602f88c17fb0aa7bf32e145897efb5adac95d0d821a42adc22bdcd8c400e184ff7c48105070a6fe407d35aba8d540a4a46d04152bc831bd1c0657cb406ff05b0a630e6257b88e8c74c3e73353433e9867ca98fe4df43b9107cffb73d10b24db97378309300f2c1f81b0807cebe0f4ce2e0e3e09a42fa6f39c9ed3039d5fe9d3c436b4aaf88a3d4bf94143b8a5284d927e753d1453328d55fe4985394300adaab4d77c50e6f39f7fb39705441fb221379cecb34783001067e5373514f59b75c84f6b704860f9f076698cd1d5c80977ddb5f24e4bf4d9b164c292c0d2478eb86c59207c8ebaf49186bda1e6d40f220b24228bef3a19b4c54e83c7b5663535e2022fb604708c5e0a8f8e94e6251e1b5100b614975217a9ea6b2345f4b7643176b18992e217be8c13c4de42e2aacda8a7a5b2284415b13b7d02460f5d29e674071533f88a4a5d5ffa2cdfbc71250c3a17d22c932ca12ef9cdc48c4c0045dad0e9e982a1e354af5c28af74b57e1e3d91f2f1f9740f776851a8334a00315f905c6d124043737f7d0557c5bd7c4b24126c64bcbb1652346c8f3bb3d28a0134caf82ed29d181ffbbc98cbdefaa660b7841c46ed27d01a1e8f7ca06715442be21e9dc38e99852b4fc3de13993bc6872098b34b21eed5944b58c2be62fb95e71e23a31d18743a507af3a05c8ef55dd6d5fedca558f23ae3ed3c3829bcfbc4751847a8dc46e9b9c721ca186b1e448c4719e2e5972f73d289a77e407d1dbf193bdf45dea772c694402921b745d561bdf2fae3d19fa41b2ef53eaa9aae3d597a0b42860e9c645c0cbc4e22c538943198d249e68afec276ffe2fb90b8d99c3c703f5ccb5b15751a772c72e638229fa8eb17bcb78e2d31840bc21d24df5369d117bc70642fcdb28163df210ae5e773879116c495d8b8c76fbbaf1873f2f6fe3f33b50bf6f36d0503be381b50603639d8c67a08915ecc025db01812c8336c85e0334e7316a41513b5983a17b516f7b12b7b729bf411236f78389da5eb2af8f19448460f5e24620738470ba5b1f069d3f419fa81516b5525ec43adeca8234db287cabf4d6361dc0b4d0b1020338fd6154820f82cab52374b35acaef5253e92e71709a763aa47d1a5dd7e3139baed79ff5a8dc09715c0c29b97f445e1ffd5163ea8a3d3ea780f1efa7ac83d591e4d8c7f63a4db6ef0f7f3f9aa801f61af6cc9ec89a014c24cee70b5ebda2f02d227a2e0c700155d89fab39269086caafee98e264753363d789760b086bacf9ae3e1ed71598be4df2991695cd7bab019d09569b4cd06e425deff0160709324b39e11c9388e077885e41b946a3de11bd17e2a2cf7b886f12bd829d1610a11c1692c93ecbd7ca5c8ea2dd9d9becd35360f95f417e43674e66855c352c2ef7ae27290dec05bfdaacd70051d4ebefd73030fa9a58cbff87537b94b4ac3d65dc454dbc5e863f5d79a6918b17dc3944d26f5ff8025c0611d8f6446d89c628a45440be19019861c89c50fd68eb422ed7292592e3bd5e7f02178d40bc88288e32c57194c4bb9257a261980dd40ee2fa886c04b546987ee50272e2d3a2c6ff6956570bcf4dbff5f3caf5328f9c442ce689c566bbfa61abc4bb33770f12e08f7b2c5751ba1665e06298f93aaf8004a35427cd99abb8edd92bf073d56056f01124f97346488a94d153e02ae3b0b5667294a7795580639d206633998c096624babab9ca80d0f7583296960d58f9c56a6e4f2ecffd3e27bc99a352141cd896eea653b5e00396c522890626be8b604b69ad9da983d706d66860792f5789623ba58b4c7fcbb7754d821fa170eaf7c7717b65592f7ee49002564d667972289ab5be35d07a6b639ba2f68cda58bac7d7000aabf9bbebb016c9bc971b3edbc0a98781751df2e1f0ca54460120975b935310bc646da6f09c04e3e192357cfe64e283499157350c8c3a0293d73efda08e9f300d23d95b3ae32d32e1f26c90b8bfb9bd17dbe697c371c62f7618e8915b771e1cd92c02067717fa4ea96be295d5fd6461651b639f7c803a3cd5acf3a0ab84631e2a827de595c522cf79b328483941ea9fb30e37dd931558af8b81c35b4bb64bff4484d884519f86e2dd884d8ba944bfdc4314a60f5c60fc67fd8d450bb1633d0276e3531778d0be710498005c83482f6f453d9ce5b9d2c6a75869217ee85d58e3c3e27618f21a169117765e4b72addda1a0d038aa9781fca979f832a5b53b966b7015dba019e2f4b2f5d52dc73baca75b34d0079985c251cd36f7a8207a078df74b9e257c7ae08d7b24ed52e33bd5b1ce5b1b117cc7fc3e3222a8f5274f3a82cb029086fc502bf837adaa5c77d967a41edcd47a7b777ec9023aa2de5aff37211b223994f2ff7770543aaed95f74b51cbbb414df4f1ad4bd26387e57f40ecbd7dbc6fba4f9f925e7c5fae03fd0f0a69ddd002c9b99c5a36df9699613f580d60fd270b417b540d354fceff996595484a75b1dd44c416499d81332a64f5d56d8e83fc195c81e3624f627e617fa8607d9e423e03725858091d30f7d46ce71a5e26f07b8f1ff71cecb8eb9ba8db086f1d7a2b3da32eb59cb80b6a8c2d7a5df725566652d03c6b11d08bfd607230555b044e4ac822813e792093b7f81c5e1f74db1bead8f409f7f0b629328e3600727d27fff6fed4aaaf7b09811005103dd4e3741b5c1b1dd227ef4ec468c919225c72fd40b4b31c9b00e8bd3c2b9777c60721d0a6db5b964ccab865617fda876c018fec6707d044d9bae93ea91a07eaf241306a69b3b03298233fc4543147f46abcfc5ec33c16320c022287a1416b94b195ba66edf970650febc0b3505870224f2ef64ef2ab177de8d7f5ecb2d45ef92072bfed40b5d28d6c7dbb11ece6e7609fc5ae475acd699fd0009857214f074a67505a58a6f86cf91d351c989176d57b43f916826e97f225855d8db5ce915140d6a351589b8ac34a0cf55014212b85a367d3d9caae67cabdfe904fe358c55d4836bcc8e432b950768872564f8f08ea33edabca736cf625907e7eb2c3bd9db3ccca7929264268f50ca3a2905b78bbab21193187cf52f3680f3aeba5a75ca26f2d4d083d639072a0daf9dc0d045ed137e29755a35f22f1a64ccaea4a3f100dd8a991c491ad55db7bc60b1159bb718c73f31f05965b462e126392d4ea695013aa752f712c2f100d8e919c85ec9b400fcfa46562d4a6865df50828f49902c6f97bbfdeaf125ce641f65460bd4f9a5d66129135b92c6c7d706a764ad1d500df3acefe27aea09e982b24b6bf5c53bbe9d0655c4675a6c11c0a413f0904d24d59bf79f4e098c6fce7d51d7173677b6c0c180b1e01fc0030ef0a8dd9f9450c1c063169bb3c76fa88599c74078f6ae8d391fd34ae41994cafb858bea214ddb60f27cd05177bd5145c4e44dfac3c97205c257e8211af802a283251d11cf7d14ce92e42a5882dd959da2c540d693699c859b1ecd754e7ddca60f832f694a2ac83c61b26a597a31e8d076eabd47bb225dce22a7b8c6d680e4354cbe3c59ae9baeeb327e227d76d84092552603f156072debb935bd60104af4008c9c9e085dd5d07a393047967e92036b5d342751bf80b2cf7f866d7a6a3cde4e5ca1e5a5126fc21919acc7ae0d0ce3e9eea096f914225ee4e6a631b759edcbc12465b434a59c7c47bdab5419cb0f104bde269d5d0216c4182d570a5662055f823f0c892dc663838cdb85e17f2d3a9969cf614c2bca092cd469b61039df66274522eca572f848735faadad9c61acd4e8ec3571dad3025e91a77aa0b9edd6fdc89361e9f9dad881137de5a0bbed45368bcd33a9d04757d949fbe3a7d4c73de77ebf142a8436f598dc97547e08761fb84975c7c1c11e4ab82829b88766469b3f9ca6d8b2571e1cda8da96b13139b5270c4d6fded54c967aa36f665628249327e29094da3afdee68d2424ec28cca5212b95f12ef8d032bc8b3e1a1904ece96f651d9601ac4369fb8462e3cd2b1730a1616aab8fb8b93f2ac8e84a1101e412cbd88a98bb13ff7699d3d800e11910db01ca991d60acebda745c4f777aff9676a62dd0c2f8af12d5a15d707880306f753f47bb7f49d0fbdebf55b88ffe69e39c7ac970d06c12d1a6fb33b7ff6db4f9b55630d232d742685ce4094b9f5be5083c15435d28e0b9cb17bb9008ee9eaad717c0e9f124c29b6c5b32c06273c2d85fae42bb3fe1f8482be00280389e01de5c343224ca21eb3f0d4fa1c01dc66ad787bda9505568ad13531a9318a33285058bddcd6d3b5540ff6fec8c866ba5b9151fea4d4575b409c484dfaffb6104d11a7ce50415df76ce11e22e4359197dc7f932fbf5dd4d00d0d6f07ea56c5bbadb50b2cd16fba8040243273b5070d564f0664f332197e59399cbd49d730bff5fb48f588d34e82ce7d3be0aaae9ba0fb9d26c66e436d7832d3c393b29288a1cc0a0c2aa9a8e73f5248aa51922c9e7d8e6419ab6eed873afaab5b5dc5db8725f6dbfb521d177de35c1ad593cec50f76d5ae3279ac1144f2297064841ed437803dd4c5de8aa0491e6f69adcf437be2026eecf4de306828ce93f6ae82fbf8692588ad89a392af0d97449ee96def1d94c648167ca65c90fd221dd8573e45804c00079941bd333178edbb144db08e957c5ffee38c35b0d90c521a2de12f2cbb6e507d990570345fffd0b4d2b308d04a5468eeec564ad7e7bc7813a4dece85b3c62b9b4c27031553fc02c2adf515357ed5440b69b6da4ed01cc18c937c9c3ec13b6e669e45f1d3d3a01b9ccb41de1eb19d6f853f216d536f769b6c0d310246e7ace455dae3a56ad9999e4305b9ad7de94204a042ccf3bf7bbcba39aa73a883efe433ec715539b0548fd5feb1f51cfa3c672a941f0a6409e6f09b081ac5ae2d7f912f0388d717f186d6940dea5e117dc54b54e5b64b7d7effc7d1abcf8d2096e088acc96a0acb4facd58df4aed56c7dd9759b94c765d003a6b45f10aa262d8ca08bac988575aaa08d12966b0aa3d563aeebf1005b2427bac298125e2f0f2f3024738af48a0e028daad9b9f9fd6be9eebaa02d944d9f2864209108c7e1300f927c2927ddf39e2edaf3f7035384b10b42eb5f6061566f772b9dfd9563c5776c77d3652b22e188c5d2ff132747066a703bd6d35cdd7756022c3e89250abf56a8b8c10c7c24c8e562fd20462742f7bfa4cdb103ff55c2f3d13c430f0779436336404edf0f808ba36f32f270d17423dc8d2d75ec719dcaf5cde283efc053de573e620f979eb4f1222730d6338329e55e2ff60a946f50b2a76ce53c6eb2c573c6f8173a42396d32b010eaf462fe65b3dafa8e9833efd4e32dddf6961266c8e4a66046789e459c6658a495043a47d7c79e0be640410b14a3f9698431ce7f2458d2dabc847da1b3b3cf2ef2980ea4a8b8b027eb0af9589dcf4875c6f4301457eb06e59f363b4e1120389d2c820e2593375eadc7e8159401fd08e53ab3ff0199376ec686e5d2ae0de91d36edbe6a4b0acb4ee7403c851ceb5a6dcd2431f18e8448ac8c25d57948a1ff602cf843353047bca0ad14b4a785eb93aecf87206b7b7be5596a717eefb1e743f84b44e36c8996f507173e7ba51c4535ee0cc141007121b5254885ac89a25093c6520a42e7095eff0c4058763b0cc70d04ed9514583ac0df66cae7bdc4642473cc6c51d6fb6126cf5e390b396b8fe9ff794521beaf1672d7bdf8e2a46353d013b94c0dcde80371259d5d26837f1ffb04ea1b4ff6e097ca78d8881f0a1339fa22e7187e389b7178b099c976f5d0772f96b8e0387e093ecaddd2568cdb89678d89b0ab6e5257684f7580486f8d58069fd864653481dc6fc1e90261da0577bc00c11ba1bdbf0519752af61b53b56aeb2b44a9fd87d7cecac42f1f4107ea031012c807fc8dff2a7a35e3c5f29247138279ced6b34529be63ca832e9dc0e4facaf03ee46056988ac3436b257021a070badc29ca293f18be54e02ed776e039c68abf0263315be25a2f5202938d19e79bed120dac6b2b8ac940019083e3c79954b23284bbacb585ef7aa2eb040ac53a155fdff93795792e9fc78bf642400dd9f6546869c2950004c6dc6d9d41253c96d311e40e3ba76686449de331d49f5b9d5dd5ee53ca2523b468975573e79743311dc56a4061533a36846f3f6d9ff052b5c3746cb879278ff5ec1b118707039d2036d72413c1ca6c5875428bc81fba8e4a8e1b6fc359630e3a1d558e8176baaf267344c89ab66b6662c883eb26259c8c04d597d01df5668966c77b408e64e74106a088090cd7c4fe2b02db4e1e551eee24f0d28f0b8c909d84c581c238fbf7123b105e97c38eae575fae65bbb3fcae044cbc0715f001e4f3b7ad99ed9181b83e74653943afa65059ee1d9e834566fc1fda4ac636083bd75b7f17970281b850c01a74844c22d2e4117b81cfbc51a2097b729dcbb00193cc6f75f4adf445d261a581e1a8aa5f795810421ad72309b9b9c9dfa765a480e612480a1909c1f32bc3e23013413ccf5a929c84bc6e9220510b39478a9581153d3eb0903bf5bfb351dda158f699ee47b2e8f8b0b4ac68c27e6703fde6136f0234240a00fb26b9b23a60696b7000c00a299c033fa232066d2bbdf40fd3a983b37e7a81e67d9f6088ac05bbe696d5a78dc110bab8a4c463734abc713f9e0d5975ca2b77e0616924d0a8e916908021bce806a9d518fa38401ee6c5f04533788ff140cd3e578cc0b9ce2dd56694b2efbea2d915d619e6e20b39664d679a540de610624f3550fb9b4a9fe1dda1ff1b700e03ea3f3c2b59a60c75622641348c0437bba8703618a55cd0d98a48018a19bb3133a5f23a4b073d93a266dd2803cd0c399dd8900220294adc22299b2c8ace1f0791bb82824b2d818ac6b9790e4bad9d1f116abc6d265a7d14fc8b77daf20bc4d75c4678465c1ba8469c4b9d0160f3333440f9a4c66079d972ceabfb655db055a1ebe3a8d131497b661ecaacb5d89543e69c3a9a193c35b50e55c7ac450a3ade8d81e60edc40101a5242afc34e7afa21ea757e45911e5c6260bd45eb1c39561787114dbdafa10a3fed24914ea7d9af84f83689e4f3e6cc4a8eaa38ce4cececf481fc9b1c8b15c8baed15cc23fd7ed41307ec310df03b5996695ca1582085d9966f159111087ef41027c40a7322c50a512765d907e10181336f40ce5bb0008170fcec4e9da2ee19c2a1cdc3707319ab174c29f5c6d31d76332dd9a64dfd7306b2ed16738ff5fe209d73b10b7fce2aac1890933ae6abbed9ec8320bae5065f64518bc454d0701e04277106ba600b065879c191c6775ad1a72fb6f6b41bee728b2440dec6ed141da13df1a3aa2799632985d646b41c77a154a99c7611924b861e6d63c9db409f4d546527d378c54b848fabfe88498efcc16010d837a3057ff9292cd19d8039163c7dfd2bae7bfc15c33b8aa5f82f621c57444cc83ea5d525c1d5f1892c8a2a05ac36496d1603e43865b341e4d15842ae44d3dc202c3aaa40ba8dcff8822f575995848cba29dacb46d1382c0471617d8f7ebe6233bb013829c0eb33c93f6d07894af09104097267bdb64349f8c67cf8d54a1ff8d899a7d8e1b2384acf695eb933f5870517403ab745ae0129f169285b93db196454a5fcd95ee3d04fcbf78725a77de48a3640042dc72f29c87737dc93588ee1c450128405e37f9e38e843eec8118a23d37105021e3681450f52cc6f4108a88632dbc0d8c67fb8a0366af35badf5567ebcd4ce5575bb816fa9c5349aacc484419d93396b78e8549fe020519aef76a2aaf6c9526946fabc347b2839421f74f2c1bd994022fb300cac4c5c766a491162318cfef98cd954618be9494440dc152055535d311e7b59ea11126aca4a749f091780ada02e5c9846f85925a3a5c26f61045dd9ae76037e9e3071325c6e4ca710d7901a4072063c0de2e7665e5a0a826fa32f321443943705d9da498611bad667c1b6c1fdf21594768af5271e322dbc9ee6f49eeec90892a4023ab18f976b25bd605909fed5277c042b074673361e1b6c440bb19634024a31bc1e51e891a41f8387be579a2abcd3c3889fea3a04c3c8d5ce2af54adb6410ce07f3a01b26357ea3c5b669546d46774ec611331ddd07c9c05d9ba91fab676e75d6769cb55c2a37aed48f4aecb250b937dd0710f8fcfc7dfcf8583954543b593420925dc825557daad3dd250cbccfa48776c8cfe37a163d99d05fc00fa169cedbca22b68369f810e5de23fd5a158affc7eaf016fb81bdc289498a22f363f487f6f81e485b9471a15b1b0a8c44e5b8857e2f320e472c75dca21567018835b8ae6ff26c8d7073506858b2add3600088208634ce4085e1f4d02caebfd9606c6f11a9f2edca202576986e3aa2c1db4b33b7d1bf8e91a04569274c389bed87f9db0ca2d8a77d06e8231ce675895fd82b4e097a82d53dbb9b62d7e0f83bb29c2d1bf89ef9f3a946cdb44e9a2e6ff67e06ead78cb1f40c0a257ace5b3798a0e40f487ffb34e8b9f4cf8d583ab7004df0282af37cae32d6498ec328f992e2575c4eabd3edd75c597817c00338f04d059911c7cda5e3db55d52468003eaca6548ecd3991100a89e168a44db48dcac16d9b2b4c05cb7f3f88696903bd14fc48f0c895b03854bbed3c9e0849814246e66408f6a28e74540c91566aebfb38e61f62acd68d9a246ee65eb98bbd7e2be01d3061e39db3b6cb766face472f5f4a2fa438216f36684e301f0f75cf131e3bd3661f15963c2cad78fcb0516c4bd0876020e745c8ff93aad8a85debdcc4ec7b087ecd95f6d5f15dafca50045da7abce2f689cbfcbeb6c24507f44fd0ddd7d2a10fdd1057041cbb2a1c5e1d8d1baeb24c278a506eedc30024bc2f1dc60ef241bac632ae74ce0b610a10b0ca0c280b946837f4449a232eb2b7da6292074b4d051afc041e31495f877fb1e3c2345f1d162e3cdea9a396209e6110a92b12a80b4330e25d86270d65d5b6bcf0945541ef0dd65df6b38f78f4ce7be4546d795f288a36787f9e5a715253161aa192f87996452877496af096aa352feef2f166bbb1451dfbcbaa0791167b3a3cd81f1bc6149ea34eef02162c07a4aaf13375aa36281162490b0e294acd81f59e6c4fc7fc835113af9df5f7b9ee5909f565bfb783b3800760d1cf8af898e3de51bd2ea898220a2d1442f49cb98e636715446fa2731b590cae5375ca35011694ab7d9119e3d3e8928a3de79f65d27caeea5d11725f0cc7c8ffe1efe1ac056b7f5d690f8caef6787d25181c3b5edbf9a7689a5ef6feecd9bcb99aac9a76fa6c47021e13b11aaff76befc418d87de60c3c50d3ea1658c7f1f2a60ad25b65911cfda531493b5068a84a30975c9d325c455033369cb5813dfce9548e316fcc760fdbedf1db944b503e9b3e1faa2efb3e5ee0288c1d95571cb364db89079d04faf35595ba3455fe1a83f1a441252112bf759847e1b95af065bfbbf854695a9c737211a8efbb51be811aa19034271438567fca243864dd3a5be9e66ae3f663e1ad2196a4e0dca99b0532476525359baba1bb91f0481da06873ce727076dbe133cda6239c8e39935c8b1d7a8f6e0a397a9a6ff49ca2d1833c751e7502001f79f76c9291c70db93f3d1aba79594e676e735bea722c7933c3188c22996c493b5b9588d0d859b485f20c0b225303f8197edfca8f7927fb542ddb69a74280ff01331c4939c525aa67a35a4d3663959f30417902a466aa32005988a5d412a2cf970819053ed81bdebde0088455abc7b149138404c8404beb2bed2b19d63bc59c8300c12d47ef099585f565a3e47953ab4a99eecc5c4c3bdd673d4a6726b6dc3e7cfe8192d127e90ddd4039941c7814a2c1036e6040a6b8bae8fcadaa4f74015d02cfac301598203ba3216f8dbf469876eb93ea6d6c56d710a5a42db2b5a461bb4a7fa32ae2775ba3854f618ba3bee6e8c823db1e89391e060a33ef1c72843843a03acf195132263ae339fa5bd28527a3422b46bc4da5862d143a01332b227f3302e3544dce3c0959c092e45087af245261131f4143f98193b041663cb90c224ee04ecd5e45f0d3950d549166703f9841a02275c1d00c0e47b0109d2651c072dc1aa13b9037fbea117fd345ea25fac7c12c8e5c5f43b16608b4f2bbb0f25a49d8370e1fb44fcbed2bffedfed9ab573461580cc2f52838a87badd00d2b07047ec408a5801cdcbd362a6a1913efeb33bbf4eef8f52f470e5475a47a3b0285f01ac3fcbc7aa9f1c4ca0192c5979e2978cdb71008b08a0def26ccd46f7655b32443a7166398a8179e2e28b5a51faf8a9789685fc1d7b0c9883c536f7eb101a2697813cec82b69074f2a3f7f47a317bc5e15897f770eb20c679763ee0940d43faa4268d04df3ed456051b32ac9b6d20c156dba7580224a876f123d2d357838dd2ebcab35ab212c451fe1d48e9e6e56952d7a934f5faf63e9aa1f1adecba0ed0136ccb3e1b732477369922979cb4016c600fe2968c40b6b38012967c3d5904d07731492ec3b73a64d0fc14a48a288d2a8a649cd577674f5c0c67019c4b817601ef53bc8162f795191a5d14b6779253c1e5ed3a694ef90689748af2428cbb8986b134d7d35a312a43e49c621153e955e490c637fc046277d484c341b63d1e561ab18cc369a883e0200c6c13294592b22dcf573621ecf2114f5e2fa79e8fa5e6009ac72b9af881910ee76c9b655e0ab82f5629c8164c30de6d7c9cc0659564573fe881ee9993a118514207e1e418d9b548193a772addba9e88b88ab8db07a31e7af4d4a020419acc899ec5aa2ecdeeb257c79d0f18d0f80835519c2215d0e13e0afa61e0d0ab5a129063ae1850ada6ae5bfec56308e2e88471ee37611a6fd218c1dcdcb07539f7fdd10aec159e5c5150669cdd45fb8b4875b895f90c4b3391d46dbb8f2ffc546dfff1d4020c58fa58dd4c4e1c3d8604834c8286c21a0945ba5b493bb090d02b0c946085b4b837ae6da29b595d9b32b76083304c91ebd4070d16a04936231f4fd36a1df807bba6e8bd08a89533f2ea54a362292317e5f1bcb5f38162ddf6298c22bb655ace09389dd90b7797e0c638bf2d3c0627d537a36a42d5ed40719a0281d4b0de0f6bfa4bf220f65a29de5d80d127a276a2837109d5c4fbee9e254ac825221595ede46f6881e3b2ad4a1e58dd18fed47e7c402c4d4e234d233b7b46c39dc700b0de2288c589476465d23e88540019f38ebcb51b808055019cc086e1f7cd95197c750540c96230a756a582ded46d19793456df655c5fc9282a0dc3e976dc3cc2936e441ed003d4479848d8b93b66f3864e2279f397f4ebc57ceb11aeeaa15b30e297b8b363da011a5e4d65f1715e62e7907a093c0cc924f7d23c2b19ea0e24f87aa9f4f9cb74cc5e299f9e4abf7ba322f8e4e7801e488eb5d0fc05bc86e144a30857c4f2c1900002f5a572c5f4f21826aa0e558a8f6f2313a89f01b68b9d4b77d340aacd7878020d301cdb7aadc6ea44273f3dfcbc239d408b925bbe75b37101371c796985112dfa2f732b0a5ccf14e902fc0df6a35f09435dac3eba3436b2a7262e54845a4de0d48ead53873096934bed144ac62822b1841d8d08de56140fbc88c42a15962a7f555813fb3c2b2568b39ab5c7339e42e8910e4b64754cda064c4e40d8a0e19b0bab4327afcec28bc306b407b1f3d0d6b2556c76120153bd421d8e523887161de025b27f913026f90773de21b2283d6035c13ee54e60ed9dc68d42ad5a23a5ebdf9867cf99d71cf762622c5a39486c5e343239013a788647d56915fc6c5c097a6beab9afd291c54c5bf02ee1d69c3307bfef1d38aad286acb3449c379d1b94808a1632fb3ceff5be54d3811e4d8cf52291cfbc40e56e14318b860cbde6ec1b81750830c432f7fe8bdcbaf0c0a78eeb5fc9a0985db5befe031ed6b278245c194f206361d825f0a7c2c58c24b14849a5878492554fb3fc7d4bb79f0d423ac4bfb2a69c996c1d6bce8a2b2cafec47e6fb5b0029ca0654b2fd5c6cced86d7092cd4da522a4c0290e812485c7c5adfe491189cb294e77205d9bbe317ec87dca76078cbf5e91313b561bc9cfec81c58b42c21ff6f802808b981ea8abc8410923af218e8fd2b127997d405eb614f0650bf99c9c7c87df7800fa16c2d484e6371aed3299f006e9aa19f0973581ceef83dbf7a6dc6830d7e48e694fb48e397ccd15a2390c40eea39f70473fbe82f1a6904cd80f401c249debf173e8ccb705e2cd80d072e58740d221efb29b4615f31529342867b442637830be5c064a9f1370115433d5cb0f1de79744e2275fc2fd24c099d9201c373f43f4be6f5ee529fbc7a73188a85a15abd44a64b76f33532174ba50200ef450236d79ab52fbe027331f2dd18de28f4f76dfca83b0133fa57cb24c011b02a7f832985535554356291af6b8e3ed19a0132a183348f632da869206e451efc3950300e75ab7b9361c5c819f55462971464d4d5461834856fa233309f7c5dda7c5f0f0f7fa8acae3b8863660f11aeda12bc48b102e893b1f14c85659b2108a6fb0013c8ba16cd9ee1cb41dcd8a40962ec4dcad1f016d7cf60fdd41e4abbe0f225a490a248b5dd6f6df17ac531944a0632b199cd06441a03fadd42c7fcbb37f1fa538cc6936ed1e68807d074f082a0ac3af436c30467d5c637884f0ff528e65bd59d1904c3c99b0694340bb0dc2d127661f2c7701574d51d215f58fcde4c0340dc0875119914dda8044083dd4a24892374b184407135c434d0c435a4c7e190ee5bcab899dea915c6a43b6ae26afc48abb367189a1c1d2f9d367c68f6db64e0b227c86d689f056b528ba1482c25dbacd355e962128ae60a13c0618c68ffc5c7a71f71c0788e9108d7b1850bfc0e8f57921b6f78138bd7637a54bfc4dce5b81a4048b1e6924c5406c0261b3312b048fd577c16470fe732dd043a5396cb80bdcba35af7e02d464e4b28587518635ee40d074baa890ccfbeacb0593217e20714aac1e9b534a61a3559e7c579692813b3fdf03ad4d545f66b17cba72ddcaea81e674998d36933615da0aeea9d2a7dd93de401c7cc737374a5dee68e4091cb8f491c3837bcbb850fbc08d3b2109c2236bbd7d8e67b81576dcc54c884c03fe6dc607afdfb2ed0693f4e565086a0e3cbff4929d10958d61e644beacaa4db983cdca5e5fc15657473f6919c8f812d0a54b414606d4e5901e32c58ef323d6500f30a325cc19c5aca2e1cd83ff0281fd2529f9020dc1abd596370877403a62b5f3239e395dbd52cfaeff9ff77782344dd736256349f3fbb281a06bb2f1bcd5cc5dfbb438d43eb02309e0d16a8fc6003f954233ad7b457ed00115b3a8264821c0609024a8f47a37d236774e5713a1674b1dd0414a1f75874d56a27a0f015bd47a1be009317a36d49e1421fc6d30b3691d8e8e5516465f2f36dcbf33bb4af4dcfd15a52a43b6c1834997db476ad41bfa5ae6c322a60fe055f3f6e20b5cdd7fb2373026e7acf57c2ab1eb5772882a65af6861a2ccef211a76810dec0543493497048ea958ed043853340829d5e867d236b252c77cddba32df662c689e5326e746e7a1f7fbcb06e39fa9cb254e593cd6cf9a2b827cf0ee01a444f957fe40f88e3ce64e0b03b666c812ae1ecc95730d0cd89ff822e9695cdcda5509b9ff1652ea8c984fe1fa764895c7ee503df32a551a2a6b464d233be172028928a47d160ba8287696b4dc3ea9ee06068edd0246c51d41daeaa749d4bf098a7a1381b9d27dd485c690d1ff2f90bc4e58764032f6b7d4b613201ada8288bc6065b8e15f0817e43f74d5ed993e8328507a0402e6fa8bca1a936671fe172d5f910ccae41cd7effd0dcc110872eb5b39427775a5063dc28dadba4bf08430f02342b5f7786db012b7097d86c7c104540dc61d8c4093d4b265147e0f42d0d63b413d4a96bf64525f15c4e8a9b6929d397da53777a73a59c1e74a94aed3be9b34ce022fd5f116d75cb31c59bdd09b1cc43e4b2aa47c60dc228efc9bf26561d4869551bac9fbf390ecaa4eb99629fc8af4db28cd1657a4d259bb004f582cdbb516bf6ac1737e47371e4f2abc8c178bd414adf4a5be5df519a98ef56c337b1b164117113e118b452fc95a447785038d046271f73c5ae38961275bd1362e0fb22550f9536918f6c6acb805216c891d436574509166157e0059e38f09dbe0cb9d144ffca0cac5b790813f8d32faf4a580deda9968bdb0f0ab37ebf6767ccb4fd45907dcf45a15ca1a2b8b6317cda0fe222f1b214a30699c235b9d162478e6a3d41e36c62ca57625f5aab61459c9943f5736078d68cea1e4c419a0d062368bbb97a6f4adc5895026d2f02e2ffc2618fd7473dd21e41a03e43936e801b8d7abeef75c2b23ecc5c12adb840ede80a276f5fb302020cb38e3b9f0745180bc2a7d42144b7d80c4b700fd69e629fb0e45a4f4b98a59e670ba9c97eb6f462ba86a68b9d6ed5337ba1aabd6d06abf6c7393a69659a64995ab561fe6487fd58701a950d4ddde4845c59a55e6bf198c3055b67f4667b3d16ae5e60163fd2c0c9b2c6d8c40b49c2924f359ac342d5782340609098258bd7ef105eef544637af77a503a2c59df80d5a039848a85de00017b084966b44a4d296e5b71b535da500826848f1151cd8333310a4c9bc1c24f812764ac725793c71ce2c7973079d5c0ecb85ca1a6941f5cd220c24696b3efabd6bec34b4fadd41464bd5cce63ddf2c2da156c0d6ef920de02932fbfda2a2a2ec643046ff18463fd57bd6f01ce72eb0fbea5c735fd29a94b24fd9852dd0f1a1b63f2f66dd84ff7a7692f25b8d064dc5b6be068c8484ab673ad09e1fb9d13d0b29133e29881a7ea1522467d26d176e4d572f2b59bea0be33bc26307dd46e277a696929b9809e8914490d72169ed02e4eb4b2978e2512a2ededafd23888bbb8dcbcf96fa5ec7e94ee9f6a11de3e2f2598bb40722e5cdb41cbc2ab23118ed6de6d58b95595d19390711225d8e041b95f419335f35cc84e7f8320378c725c8cdb508d9b603c9c2a814461c735ae504c76be2b73498beaa502a69fdab11fbc4e5e2ba8010c21d0aa40cd5a353bb15320361cc31b29f6d542459a72ed8ae572439409468cc3c43c948027e2a617ac429d61a66bed6995831323f16986116f713a083c780465949b86a8e4b8786aa694433b2e80225e6e4a5f9ef08fc9085235e7aa32ce332e7f9304434ae979522c1111e733261f389a2e2dc0121bba6174a152a90f275745e1f58d6ce514bb352404af66bc20288d41b8925edf8265154d4555fbddd002b6af9c9535f49f16e2b495638b301bfcdf93f8e2ed870e1b50dfdb8c91a3e596ce60415a2720bc6a9c98f7c3c696e67335f93b4c7a09b3bfd8481d89923a79ea08474a455f3cdc3383085e90cb72846b13a2e7b030bf67ffa31387a224e4ef55c77de71415141583e674342ac946555bf6f3ead83cf6732fbf6efd6fb0835a0959e9a5a0904855d5bf97ad48f1a099ed45669b084eed8319108fd84c3c7a32a78aa45022127819e50d57af94ac4ecc525acb48a10ace06e2e21935d8f409e930e87e283e8441c00911930d3b3ea50bb9177d16e5803ed02b11f69434b08eca4b9ff9f6f357611c293500312246caf16f5fa30e264ab8d034dd670df31698d815cd598e6d6c2b74ee6faba55ed6d0ed231ac41de9ce4290919dadba1d6f86b22caea8be07e8222f7ab827937ee4b54c705f7f3955adbb9a8e5a799f4ee682eb7520e1cdb371a8e8e7d181c4956f4447f1a5363ec7df0e31099ea6365f2a43473c4e444378927fce43c6a5a6fa1651def34f10d3fe928d08e705ed4843ade5f6e0b9d2f8c36a48658d59670e0ba83b186cc41f5953b8b4d992eddd6264de15cf24e1296320893bca52ec4e9aa6db7f33ac47729d08574352a588d49d99bea3ae8322d907c508bd1fcdff192acd1f93f2bdc5797fbec6cd68e2e4eaea8535ae92302b0493350c4bbac1928dffdc62873469adbfe9100e49fdf346e5c35a08abc25064aa1ff98b4aa1cca669800bf5e9cf2537a6d36e6865d673cafbb2c4baf2235d91724cd63f55e3285b532e4403659bd3f260f66d1b3edfaada6dc67d9f60b5591c6bf4f04ea868e68c3c1b08c162ab0926d271b6c97ff56752cd5db180ccf040386de4cd838b909fea27bf80b3e86e4ac9d4a78253baee5a0de886f9ad0094cc1636692b67806b8287f6c97912b3c0e3174ccf6c5854018d88ca8a4ab6b6abd473046ec27ecadb3c0fbaf5b65d265a53792eb616a06a8ee18440dad6476391936df64a7595ffc4a978f88a82629b8c9dea8fd1681f76f7a3ffe78668e08a7b79a3cbcf2f92458a74043f0e118ec46ca16ede39036b234df52ed4dcd6483aa06a4899f47b84250ab0c407a04d5f50e8cdf99cef36f15305bdd8f0a341cf20199dc52aabecbce4c21cad32103bed4fcf367ccfe987d9eadce2c565cefd15379244eb910e5a7d1688beed0ecce56c06e64bee67d33ad1811c6ddd1f3fb648dd16e56a66fb74abb95941a907391d483a19c965a40f28e12d43b3be532702ad14ae6d5e0cc5896612bd3d117fce037c8edf949b84c41263030b9def42ad93bdf694aeb580a8d2f797a4b6561e84038123aefd6150c3875fd98251de425eaa7383f5f74ad0c75bc3fcb62b2f1ddb6a44f5f11bcfbb108f3960b1ac97100fc231be7342727ca80ee0862416504da359c55b827d66133a907566ab6a13603c795f159d2434f857887151062ac52b57b0d6752d818b287a94cda0f6b18dfaed8681e195c06213b9651cca03be0babb907dffe19e3cbd28df5d271cf586c22e8ebe7a0e37f50a6a7450ef30f04097ce7c2c1808e99309f8cb17f7a9ba8e5a029011927d137da215a9d0d608a14742a5d4c3b57a6c85e97c19e33420515a22186d75d80bb696c38c720bd750bc7cf3e5db254ae0b5731ed8367803d0691c0c27b7d39e4462b321629ef37bdaee9e57de3413020cef75a501396312a28318bee0f1f7f674d59c51aeab669cd523d48e3f3d5a0ea3ac14e73750cec4977aea4835c2d99557165e23614c6b6c61246af172cee8f333737bd8e96b3a7f84db2ec07b6d3750d7b45414fc9ac202c99a0f3fcf6f4b99e3a9fa0521827db51175b745541eeb4dcc53cecbe04e25bb4394fad748fca7e0f761e196eaa32cc9308fff6ed3134b3cc404fb1426eb2c02d91f6239bcd12a41f83fd3d7180a64df78b2dd8229f6d7ec98c8b46478e697de401f740832002cfa9970de6ec2253da76615ea45ab619d30f443d4f1903bf50ce6ea4ed60beacc9b9c3b0730b9bcfed27c831e89bddc69aa849ca550220c2868479defae80103a3524da80e1ec1bf8e03c82bc936cbd1af99e5e8c7a9a69a0d1a8470d23078ea2c3e9ab08292ca4c6f4f306f8301cd6088913077f7ec3fcd1a858abd80d04e874e522480ea3e0e41c978745b04f7d13643d00e577493ce104ebd84a8b45340a4734342d024db4f8521d196c3979714f28c044637fedc4fe916d377c7378c2314ecd820b44d70f67ef3c428dcf11d18b71876388dc1e11efaadaee59adcd29f836223acb4b7066e53458c64e8d9a0cafa4a8d43d5824172e83b280825900a9901f4d2030aaa960f59ffd219919720e9b9480795b7281025f8ebf68543313cf60c55cc8251899ca6a760499312882f9331c74e780428a34a5eae5600c250369ddd7363f36a59d8f23717357fb0cc7d1776a3de4174644857ecb855215cb6e7fad77cb9365541c13377fa81c8677911a7daaa79daf5a1c0916244dac151bc33cd3561f0abdc6bd19d16555de0e7268f7921136bc187a5ca8578e87238202d4c3a355fe9d0697d291b8512c27a345e53d3e246813588b8fb4296e6c6abecad346fdb0faed2f1906fa6eca71d70a7450ff61529d9e1aea6aaedfdee2790537cd234198cdf45e75b33c90c4a3a0c421853be8004d5ff3b364e51c0ee009a0c8f1ec428befb0525fe1788168183a03fc5e8b7cc9a74bcfa1562574181a28ae1b5f6b8f0a292e3a29e00b827879fdb00b9e2e87313df1d9ac3c6c33c3d3e038ca963defb65f8ff362763d593c94463231e459644fd0c8e8e489fc4c102113b7b01aca170894bb6a777921ea4373548464e61576fec3648982bece07856bfcf4d31993c73220f4afbd36640dc36b9630969571cd65d6d92be0811a93149145fc9beefb8427a46d593a1ed1ced6fffc99a92075742228238479fffc2c2e950061dd5c3a9dcc6c2f58f57e4f18afec7baac7bce02d1cfeebc6caf3b98bbbc01c50f13f27bd721982823ddc5d923b955ab91b8e23cdf10b08f4d33641def69033e3b39ae9e6ca46d3042594208508d790699b156a5322bc1588697b767713adf9c69adbd79fe04d3297294b325c0aab10c3d629f5be2048a0148f73895a5b6c268ba376f48dd1542e37264068f97a2664d6e553c4ff0d1ad5da207a5d755a166a236c27cc69eda30185781b6ab43503bbf7a7c03c37dcf99638ca816a5846ab79ad216830053d717dcbbb2ff1e74b31f36efbe087f9bb1d0fe5edbe1adc88b2a8ea6beaca7fde59f04cbfcd2086f7222c8ee092b8fd1fb0b007bfe8635cf0ad67ccd1550587a63502f31dd08a91738539720099c9c478ee5487a9fc07106150886b0d12ae3c8c7010064de4ae30272b1c81378ebbf1db5be46c7689bcac5d65142cd5219d655c20eb20cdee214a297622fcb612ac89687bf088f0a0bfdb0bb133024026880e17ec983b01dc68c18a0ddb29399a390e0d917017284224986300c105b408401ec0f32a16b4705fb241c8fbf804496d7319c397b9f86f4bf72063c07b6ea241bf4d6c22bb02578332790643b96af3d7d4c4ca6fbfacd6b8ce156a5814e01202158c55b68327053868392367d291ae9b82f511af1ef7930902a4738bdbaf52b9256a897f4b362660d584def63b05de9e82f48f300ba916eb66887c3cf5326de74bff6c6ec7223e9d206b648913e557ea9f898c52b993d61c02abc83423205c5118f05173826b9cfa43832e5a161008168217a2db8fc65ff525d2310b0359ec8fde2a78bf373bad75a75db1f7221fd5dbe43fc253e8404a09b5e09254c5bf087c829f0a1dc12a1ef508572893bae57df9a47ec96d2eb998ec1ac6f6cc46785b18dd324530e90bda981952a049a0967e364c536e7f3055a0986405b01c51288d93d381b8cffb22c1774df0995f767780db1ac430f547144dcca9f07c7ddb24ec27295045b56ac5a1f4d35702177894291752a4bb58a6422d9cd1f1b7e2fcad6418e1a26d7fad1a8625f7c57e8ee05de918f29ab1abcbe224093d5108e1ea39ad483ec5916ca32b5e7d5fcdd25a650df651021927e23b42f2b48947974c7ea3b61393e3ad4efbe03d31416c8845551b446aad10403fd1b508356149fbdd557c72d51c082a4d2f74e9d8068938da890de61f69f0869222dd386b502df87900deb13c9e789cb187aa9b8ca59eb187f10652ef383587cfe5e38f611deeb833aff3fa2ddc3139087c7c02897c2b6825df955ca77b39d7cadbb39ce82287eae32abd80a461bcd570c33e166bb53241bd8ad00c19908f1a872de0597694f20e203c2b337067bf34bd5991e933eda7218102928fe246bca34b98adb7a8e40124edbb23fb4a1bc5c2b6ae1f731f00d0efeda6bb56e78d4e9d809c7ba4d705504921d06c82ce1246594d179a3851e2c86702fc4228a10e4c9308ab0dffb3bd4fe35ff2954446c48244bdbf3f70bfb8a043538c92e477672224f996bbcb6aaac58f238c109e023450663a9d514577f57a5a2017188ed6452cfe39a37859528848dd3fb55cdcf8affc8da2fe1f84330bc427feb9d45610ffbf3b7ce72c47f9ec93f1990defe08e50c7da664d6f2e032ba9803446de68c37d698f8c9676201c82746b7c144201537e64807162e24d672f4ac0c6021210f676c1578a47f1700e911b5b1d325c545f66b328f1dfdeceffaca82c01a0c26e67814458f78be1f4ec2abb0a1acf7c68eb9d6fd0c7cbc2c359e680f47c25c090f25fe209d727189c90b2e5ad2d4e18bab1d52fe295af8fd9f05a5cc41e54c4a4e3d641b75778240a6200a37288efa3300d0ccd630593ef10e45ab68f0cdb6f9ef3a2ab5bff6d3e1edc7fb4f30cd6ee1ae4c4445589c19dbbb737d838667edaee6a11c029e0bf6182687e3ebf1fc2671c4c4a8833d145e3f5f2da475fc8c710723e9aabde226af85baa26a8cfe6cb6aa237b2b4c8624dad5178ce73267e6ab1f9af3a5b182bbda96d505f626f7acaae280ccf6b1df5195fd2dc4fde8ad99ce4674f08647c1a3633cd1f69b2b350a9cfa934ce2a0411e119d29c539925944c3991ac5324f9663f1fcee934e8d424c58ec3e760a334d3b87e6f42d1928280dbdc27f5e2898d049d19146b3c29f88002d6af8607112976dc5974f7be409932334907dc52d61450ffbaba87fc4d1d7cc68adc078e921c23a5ff822cf223336efabeae6ff284caaee57f164feea7b3ff409e5b99cf417cf116425a268da4ba56aa6ed06174d8c0a9cedbe33837dff182501dcfb2b2e2207a842e02276fce13451d62432f2b27378348eee692a32cc32d616d14aa64deb70f998d7fb2ee612295339c3691c350e6852c221a3ace7c71d6306c430bcec103af49e398731746a941d211c76ae87e4dcd51a52c7e256e49d16d9072a45577077e8bcd05ba81be6afa42088e5ecb8d3a8c9974be05a30cd0d60a2bb418cf7fda807109e9acf75569f7d4e2013160b345bf127751354fd7c3040e05b10e13241612a2104c1ee4915a8f425732ac791a6c5ac09e17ccdcf68f6a499d37130137e9c4b452c2aa0d8a34948ead491c1b7d696bb04f16ccad4f49a52db0389fea8b592a2e4061017aaab7de04d17cc7a7ea2445cc7e7a3184eec7bb581955e002c33ba61a4689b670588ef59cfc826f5c7d3104aa3e64b7a7591280eed0ec6ac6d67901ea85d77679a11394f15b561e47e0756b67cc1a8e31be07d64e1442f1f7575b5b30b6f480f5ef110185f1360b728477348544c46c95453b72112acded4039f0b637ed6124f7f080179bec4b55f5ceb6331ecd697663fa0ba682e1ab699e4a91e49bbc55ac495ac83965494654042fd25dc7be68987286a284e9a2ded1bbb25cc0c24e63366d160d24c6c1db2161bb3cafffced9d00a4655cfd5d07c31ff15377b09a2b3c449a8cc4d1e3eef6d9b0baa9e02752e00e7c5aa6b8bac000649406662de06d1fe560f8a9804eb00797877a7326508588b59b157b1d406f028dbfe6e84304a27984a70a2a1a585be98c19ac6fb18f5fb35655c59edd5b175afb946e3ac6e2163945713e1fccaf2a8dc730737b167961bc9eab6e21137d866db97ebda5ca9a52e80f091d1abd12fd6fbc3f2bd44f670a2490a8fcff501853bfe4c88be33816af894135b4e1201523ba813c92c48cd23b687becb991eaddfa55552c37a61a61c496c5a2a775a3d06d81028dd65cb7e3986b2e829eb205416b9c3c0425b14719cb95a50e2134bf6d9ac7e02e929dcb29f708cf6fcfbfcc23fd6deb44f1ba9383bc8be077e68c4d2dbebb2c8603404bef186d59f6bf934e9412e7fc5dc05fb2680c92c386d529aacc88c9c2a652d96c576c21ca6a86711519c966b6f8903548b0aa287625cc7b20c1d3c6b2bba8aaa92a52655dd187e3dd0249927c895ef27eb1fcffb80ca496d5529c3bdb947e5fa8a1f8307d3f1939a87f7b2e7ae9a9dc0ee25bc8cee8b0457d5c14040f4ae5e5b6a4f6d30b8202bf7a2936796e26e5c2890b06ecc56f0d318b3c8ecfe133bb83c3b93f91e3505dac0fbd68c647b7d7a423feb3cba498afdf52c9d911200cf44c8e03d50f7f266bdfb18211761b4f9da4027da7ff6ed87b9f340b9765ddd67cfad68c3a53f50e724df92bd31445284cdf2198dcb850dcc3dff6ecb8d12624d1b6297c33bcbd82c3b7fc35ecc56f60ab236b2836ee3d341a2fb2d4637267e2b1318b5fba5a6eefdde6a6a3328941fdcf86516f8bd60ee254be75af409f1c834140c2781a9e98e8c40d81634f3d16746d1eba29c719d2ceac149029174b11a0a24407c9d02278558dfa3b245b4faed40076df31fd6c2d5bef072413cf079025638aba162fa3ff482b5b048610869cad65abdfe2c25a7f68a9498bdb6ab676de42b31b8cbc4dba114f8a3a00294b60cce1fbd13f40ce0aeb9093dce28035358b5110272b348bd757ca1ea0e444f2221034419d9dbb94fba8bd0da62e643ba1db663c742b2fc4b62f1a6d6e821ae6795024d341e4c8a607b1ff9ae6b23afd561d1daf811f9bcff98c38231721dd871281b850eb1e177a9a10e1638941ff430193778ac1ff680437eafb5dfdf2fc816bc99d12119c276d131d439e6e650666acf242519a762afc8039f3bca949aba94842d587358afbaf84549bf66e6cc4560fa7b0109f015a911c3868b448185f01e570a1cf779404a60c7a09b67670593625662b4e3b10d10fcbcce1b1bf81a4df99bfbf9ee3d65ad6a377cd02f6b573f74139f7c2522c226958f11ed2bf8cac58b1bd18ffc2985f6f3208cba2e2b57600419ae23f615fe5ca3ae6d1cb464e53c8485e88c6da222972436e03048e497cec469ff2ebcc1564f71f88856e2ec44c35f279b136aca6dd91280847dfc07a4958bc2a93cd842fbeed30b64d4a7d3a85091ebd7bde2b4dd0d082cc128b1639d8d07cb79df28dc01f55ec9bee79efaddb8f98694951e272a16c52b5dedce36b16b1e486828e9c6f9171032392dcb41c800efa4b27fa00d2f2f86b15cddc5787fa88f325f998f6915e8bc1bb090f9e7f21a5faea78a48ad73064a15d4d75fac5325ff1b6b0f5ebc6f098c0a2792a67fa59ceb2892e6adcbe3504e4b29abf7fdb614896f4141c1faaf2e2e33fb6d1d678ebe50121228055dd54040b706a1a0e2377940dcc4b7fa5d1c82ba01d75d73d68efb255334a48459e621f0abb4e23c324db2bb92ad56dec5e9d52ecbb9d56063514c8dcf56e83a17c1cb9a05ab60551b3ebb77305f84d4c0be62926fbd4ef61108c6533edc67505d26ff815dcc103278d459b00a31d450847d476a252d16da3a18b7ce92f65801507a6d71e65243e298418bb2f352f3a9840526ca9f073822f8273965b4d9aba79b23cbd669479496434d47fa6893b04f0274f30418b0479be44eb6966839d39ddd33744110953a04ace91e39893f7cd409cb6bf0d3594a20881bbe27a1be507feb556906aa8083690f1b2df5052796c947cee3c01665f3cd2f7a25f0aa86e7cc1b4c5da3d1d98db567d90485143e454adc85f3bb69359cd3475beb819d37a3599693674229f41e393c8a8de6e2e9319528b13d87181e3b27a89dc98618bbcf938c68d31f75ce9fb7d50f6c59510d83b37daaade53fec7f6974daa6768910aa5f847c05b7d2080b24b47cd94de9a2af86282e6e82390e639143cb88ff54d1de1dbc7d4cfc98f5370a17ade5442add8a6b069807b1d51d74d7a325068fc179a21c8e8878c1bb2dba35cac7c79b4ff5ca8f97293644624d6cdce3fac3f9f78e9d5e24e6c6e20f96155d8b737bb719640185448d5dee04289412a1cfa3ad98b383ffb9c9774bcc2e5d549ea9326a7921010ada7c38714bb4d6ec55e63d4f3f86778e740c2f6de338fac03f1e855787fb8fabbad9a9e9bc041d3f928ca47b2747a3d810810fdb582fdfa6271588fe2c2c2cdbf8d45bf383f73ebb85046edc36b8f50847c45df80f7c587074787bce818f2943490c7986726fdb835411dba498e536af3fce5426d6ea7ecc7da70f22e94da5382ee7ca7d88210dcb26766d840db8f3b7f35f4fad7d967ca782368ea3d3350787f33d6c964712c184a473d7eb3bd301e5204a35095b2fb666634bc4e464ba927d3288f2e7ddca18bbe067aaae6b717ddc32d05adcb5d315266a3614b8fe4cec2a4e4e5db4bf2f1bc0c389d592abd5bd14f19591fddeeb3999fe16893e165d709194e2ad5edb490d603850ab81893e066fefda2f48df89194ccca94fa0fa4dec45706875652419dbfce71bfac838bbb90bd38c012fae76f943d6579f0c483f0f2478069f526f068ba94d740be35bd289a402bda33743539d8950a4fb7bb852d5e801576d1c9b4384ec93c5d79986b91debc772cfd2d00457cdc65d9f262db42660e585985ea1bde436567adc2555b544b563294cf28e2730cbd7701eee8f31070ae626208f86ad49736a25c2f1736a3138a7d5c95efacbf03ba273f9f05b977373af1d7e3efdb562812daab09dc62169e6a9410dc50d534fdc2c3716334ace3ad23ddec23e74f2f2d17947a19d526eae854f3538a741454d817fd08f483af9aa3990a833de5e0beaa2b3301080e698ae31223f0e9cc90eadd3e0d7760d9d676839959fbf64c9a9ea0102f8be375f166e3797e954b39a511bfd1c610e4b0aaa16049367105fcf6203dde6de48e89702a8c70a3d968f8cec7bf8eba0bffdea8c2d1972bc52a87c3063c7341b220d7291878083da42130f18cd374ccfee244ec1b68ba6c819c6a1290ad8d34f5ae904212835aef9d48bffe4c3513a8b4ec0a5d8131dd40b89837ac90bfb2f52dfdcbddbf877dbffd196a6574826ddd6b21c98bc70a49a5077f110249a189c3c76b19bcd4ad5bf36ffb60bdc9f371518f8909a4974e24e95648dda58d48e070ebd26b4879d22e08db087c72a0978ccb9190adec519004b4ed5ba8d0b1c8cafc0d11fc92c3721609ce07929926cf5490a84526aff2d69394394995c061bb24217b7bfb085da02c90d7eba356ee0a59d38754ec696f47e7c14c10d08d1a8c8b81ea84ba5749013f1a1ac036d5ecbe4f80d639e6613fe4c54d2414207ba05734018338bc97e746c8c59b0993fdcbb88b2b5a3a5dd52744112c175c5d4825ecc5c4e05e47096776ee8fb05717d40dc9e9831e42307a6d5c795049aac30fc8a4234bbc8f277d2999807233e53414889fb53500de8fb0573245c02d083f7d4754a45c72b82e8efa19fcc37c7dd143c20339cfd43943664e5170fd49e18a7e0141d16f896783dc9bbac0f3fcbcfd9e2045883d66cb0c44c7d30657a211b8c4c0b14816bdd9543727cca2ab00d8bb7617f794951b09a564001992f820201f621306de257ff4dcbb01f113d48d9913cc8ef2e1e112fce7c9379325e573aba2585a68db9f94b8432da18d1d5871e16dcce1bfdd90203548e71c42fd69869d22e5d5aeabb34a844ba7b75c9de6e14497e66528a7bd23554f3e23025aa4dad3d2e666cdc6bca52c8b614f47cb7e0ee138086a28d4728fcab6d2c0700b5c0eeebb8d7c2e6d10a36c566a9e2077b948feab983f4aa2191bfa9b4903e98c82ee444ac82ffdc5318f996f4b351908951522a70019c3393f954d4c0e6d9c213ad5ef2a00bd39fda8e27a43710143b93973f803df45e213b6a7c46b2eb732862c3f6c07d2414671de1c3e188edc2d897c55c9b21af3644fc04ec76a2c6adb5525ac2d82151cf98cb52526cb2967a4ceb9b932c8d19ac6427c70b0eea55a4e450f89ce0884fcb99bc6b183f2b7f64bec717980cd622f97c5ce958efc3e090d7cdc7e2d820766d9e455250c7bc25521c4649fe2b2be4b0247473fbf562184afb729aba90bb34a46c1e610724ed16ec1a236b7a00430501c9e0b6941d0c9fa798747f6a6e6cc9602f08ef9021934947c708f81487cefb2168af00d2d905a8aa3b21a7900603dbb6cdc08ed2d32dcf886372aa69fb52caa28c5aa6bed7ad1f9afeb2d5b56d0e9991b001708259cb2457e4cdd40b433a4d51774b6f69145ce49abdb2b428764220d789e23cbda6d28ba547e9576a7d038db2e6619a3648cf1d0b561ddf6e043eae7410a17ab6c89b5b0d187c0d8ac81176934aea26c7d407e923060360bc194cc949c3de9c77eea35f01b9561c82f6323aeb8f609800c6084bfb476d16c125940c69c56e5ba2fb690508911af501ad0ba8340add0655bc2054ba52a8fe865d868e3b02dd67650d5f1f2c2869ec67fada1f283b41e4cc7c41d5a7e1522fc379bb5e0fb80aac5c8997b36d58f2d03bae3c7581d58e81eb6b0ba09bc3dd3d83ae3aa9969971c8fb0f1c3663eaf7c4983260aa1c388e60818810fc06b800be2f77f60905d150171295dcf810d201e83a356e4aecd19eef49fbe231285a9fb9aaf3981a4277589bf09303811555768d54d078e878301dd0044cd69be02b88a2cbffcacf5a75345012a91b99a8bdd9aa206008e44f9ddd5bce08abf6f4aa03d291f14a4b6038ba1768640fea63ffbabc5ebda1ece203e7637f30530cc3dc226a730e69d3268b4e5f39af7595f1faded33689115e318f2656097b23063955bf4ad0845a3874dd16c4a14847f6d9774352c9beba5751860532b8ddae19a58e64ff35ff95339cd7140765f1121591d115258284b9c0ebfb33aa0a9c831ee64d9defe4a1ebd2378943798719d7abdd751d150bf381e90d3dcbf37f8ab73f46714ffc91e100f01438b73dcb418144d981771acef12a877d5e31950816b00cb8aa2165902183b59d99ecfb41c2d8562b89c0ff69782ef2cded4fadbb4483df4b2963b58275b909c051757a943e10704b942c18a792b7be9c226fe8630a52ac5b4e7925b268eecf937b12e35256694efbfe3e518f0de6b44d5657981fab8f81998bbf43052924d8ddda16a816fe585bb7479eaeb4b3eda784de71b7827afa4d021b77e0cb3677312f31c08ddcdf8cc62d7a6a96cdbbce16abfa4dcfaa23fdcaad36344fa18b3e17a7d4bde7245970a55365784bb0e602b46a3fb5710ab2c71b6d6d2341a0224ae8c54b005a6764ddba9cc0de44faa976c573ede0b412d315c8f3201c91977f5847724a4eab23bd1a52158922b965f0b9ca8820ac10b03baed859526e8a6ac1142a7ede5901a4f7e9f879bb57cb158d79a4c1f2827f2676c7bd5fd560f941696e20f12399a31e9c41ad36e2c36e02147cf552510cd449978ec1c0c6d89ac2b27edf996bdf677db4f585f56c3aa56b010a9dfe282bbaf6a36789db940fb2c4fe230b4169c87fac9a36e23942094e58d38100cf985d1a19ab64e099edc9a839e10e2022fc3ff19164239dcd6f6535b96ab83a439f8c8b6345ede786021918cd21cb17178a2128b41c39d51b8e740b82cf3adb8f7793c5b545b98d240d37e665d0f0bf241f53fd423a2558fc06ccd3bb562c192e4d7d0e13ad74924c016c8e35dc36abd9e9f841f047e1274b4322bafee2b6155ed258926b502b01b1c27b20810b240f443d51111da93fd7fb923a8046af12917d66a6df69b64d57d6a49060b48ace686a7e7f97231d058a053dfa20c9fd801a93d4a19928e12c635b1d05c7da6128d2dbc871b6f85fc1fe8c046804b270f6a4b9c7b049fddf9b7e7e8ef2eda78cb8c3fb1da553d7bfc74f8645702a74cf80e352943bc6df5d0582f695d82bf7f41058ab41c0f270b2565a13dc5a87d57c9351fae354cfea8ce9194d73ebd53dd19bd6105bc508178bc638c1f8b53e2241c76ed8c1bf5c1ab5d28233e665b8ed1a56b2df7872a95ade520a5a904ea498749c64779bf785ff89cca05754ba001fad91d5a7153f2bd79233bd918f54124d5324611e7a3cf4862f0dbdf7a5629b27aba937da2ba0027d3b8154bc577b2833f24e5315dd9cbd4d35aa11b016bcb98d862560eda211bc0866ea23ca0dbb3cfe6849561e6fd82dac091a329d62923be016a7892395c03cf0a147a5e0ab2c1dd2335c7f28d74a5260bf69cdc06b74a876fd4e66e789dd943a9c451d423110eaa409226406e8904a0eb6462bbc049603c88133694417510cc6842cad5bb05a1154feff19fb0717da235689e63a28cb9845326e17d9afe86b3e31118aa5765fab7e94163675df20f37a3c7429848204770497fedb7625e68ac34dacfc3ff0ae4b276bc8c17f64af2350b2d1384eb4cbc85ea29ea4450e35a1662352552049f760e76a50456a7b0473d2a0607421fb477d94ce755bc4846a44c5ec53ded3d5525db5e4dddc52935b82bcad1c870a449179b718e7e40b7af2722f7e052d8debf4fbb50efd08b32be63f337b8d8c9f3e836f998a4ec710362cbcf0b569222a66d93d7a0df89c28d66d0ec94bd36352f6bc07a634c369177b5cd51bb761faf21a2c25f60dec957e81b7289741342a68e83f1e1df9fb437f1fccfc6c390522f9b01927c570dbcb56adfc28aa81b003e3c91d9006240ec1337f61d52eeab1e3c21da58851e1d1075a187ff180e84503f4458e5736b04a9bbd63b48bbefd450f6c59e10ba6059d6148058e581beb94e7defda715a561e6502cd97c6103fd7f367dda6ee63ffc097a8e20e98eca5bd888e38f2fff2f4e6eb124fde2b866e666f62f2282b3c586b30f16116f1abdca71d97e9a5727f20932c5c102de901cca909bec735af8e13d824e76120105a9ed94cb0ee7865337a76c889b2bcd3b722e577bac3e43109212515fe155cbc5fce18716f254ffefe5c2de0ca5c6086b32a990c3012366ba85938c480662c4e4b858afa77839f819902914d3a60fe17769a385fc491f56cfa99ab0b65133897e8a83055e217bdd80a063c1345dc2be62e51a61901f37f5750e3c166072b3e777ef13c8b0aee4dc6755495f103fcc93ca6c8a8cd772f72c586288124f44f2c76fe19587d3229e74ad5bc47f1b4018e58b78a72e6473c3692f8e9de3258515b682a73a8bbf42a0adc58c5fe0e4c5c874545d88eef534fa4313d051098fd9c20762c0541f5e60845289bea8f396b9eed293858b5ef20d559949833bb0d7fb5ebe98871b808b50c11678bc11586b46a27193407a40995883a4e51f66222319879133e974f35b041ec56b685a541018a9ed9728ca8d6b0675b5f5895e07ac600e2498b60a8fdffdb395c6d6b9827f5ce72f9ed35477e0f1b9a5a623c1e0434dd34f951708fffbe6fe9950e51961b0212061b857e2af5e88de8b76fd1edd39cabbc146a5341b9443a12464388a028c6c1fd1a23c9a724000786a2baa039f658eeca2eb039f67c4a044eb39d176a5d6cc358f7b7cd5cdf913930a9ee521e7be933a9fb394f345c1af42b1f4b30cdf5648f30dd7c76bb8d1550d5842e0102ce8bdff21040da69dbfe24af87236f80c7400793932a05e26a39e47774f46ff6127589cddcca02b275397af757f3ddaca694653cc1ad23b0bc951240f8e9867e9ab60305a933c60dfd5754f78f9191f69a6b2f83def94901a634180fb8ac386742c9e9deaff2dfc5db5b6639e1ba184e01f596856814997fae29cc795bbd8ccad2b6e468218a3619e4a7d41355abfbdc5d8746f9cfc772f153689988c17054d41daed2f77c5aaac2e74a2a45e03b94b3e472696e4b4c46558e87dbea25e13655207bc61c51a5814137442687d7458cf5462879f25cd323dd80715c491ab2ae2edd5a145bb0df4347aafa2546ab65c7f33aabeaa2cc80fd16738b06058f8f2c9f2d4d062953d1163cb94cbba9b9a6a9e6186181ecc9b21c598b52b8ff060358d4790903956aff932fd1f67948c42b109e81e901effb7c41c24cf73b70685a54a19538490c5da8da71737a7cc65d95507fa6288fab43002c383ec21761e17a8394b872e1fd1eae1e73c5a61d1a9669de3bc1bb305b3aaa9fbae322195efcd7cec85d1cdbb5fa6b0666ec310af822dd2658a39b29ccc4c2973014ce36c18c6741bb5e3573c73affc2306d1240024b501ab3f76dbe36f0661894902521e1791eed444e2601cb158a0b7714e08c61389a7ed47214402396cf1b639d9a83748c5bf008f86e281ee85e7e1d5270b5668ea239e61b3db20e408705c48bbbc050ceb54cdffe97b085e2ca0ddb90657c2f69163b8c8f00fd8187dfb68fcb193745370db162da30ee2bfe25c61b72c67e3bd9a028030dd3d2e5856aeee16c4932779dc7a780b13863f480c6b8d2e77b4dca0df66f693d8ad9604e1a1558a355bf86ec00c2707d610d17207a02dc8940490d0490c5ff230e2e6b803e3bab382e5e71ce9ff225fecb68bc4eae58117cbf8032001ab934c32de49fe540020f28e4b5f3e10f1cd1e9b27b55f1fcec52e23ca653b5652cbe5a9f76f5dc2d6c9ffaff13bd6b4c8b606d5e3516f90b860038c1010d6f7be3b45a4b6109a9d2fd46dfe6c43b87fc1e248e50c11ffd7f1b2bb9e440596b1836a3757c0ad2fd1d4f10d4de05b549b51ff30e6a71b7bc7c92d5a5ac11714a867e0e87680df593596c6ebf0e7e92cbc49c03bb691773040aab4bd06a7f89693112919dad196694aa0bf8c310d0cf023fdaca5aa75686ed63c753e110189dc9a27f3b6a6a4915789cd0ad7b527828e7fd6740b05e58561dff21e1645e67413f708b8d888e9924cf9ff3abacdd2f67e4c6af18c6a6abce69570992680ce2dcf9819b1fefe5671dd6d59dd720c4aad715442d7c5aedf3bc01e22e9b64c49604e53815070a3980884a2e21dba00e51fc50c0a443a2c276026ef46470bd126c4ad17c6e0ccfa111ddbf0e5143f689847b10a9d65647e07a23514d6f5eb7008ee7ad05f7989c004512f4feea2ff4d464bfbdb12e26391a2e841b6440bedac66c9add336c469324f2f2eb9dae70989107a5d0b263339b9acdf8dbee57eaf618ce6b8f84523acba7765cc6952f14ed5340d00c87858d5749fe75485a915950f6b427e59fcd4269fd9b97d34b37fac79359d688a08ef9d572658e26cf4f8059f3416b9c0de9c46138adcb3169c6ad4aaff2b2b4879f554fc95a84ef5f27b3400776c8059ec8bd8947ee2727be0fd0f0a31c41ebc008a362d07b6f1985373b6f6988e06d67f5f9dc2939ea99ddf23f57c9cf8dbfd868fceec750d9bf61912a36a4a13f19e45029f69f875dcfe668e051bbf406474c521f7d6731d1f7e94ec7b1c232a5b40f49d38e1de49f77e62b6f4fb4f74300d7214262bace7451dcedb33f01868f034d7814af735454eb3f49efd4f94805f13408e98987eb86fa4e68e62c7f25c34b135f3d810838a473534bc7f691ff5c3ec36a72bca1c62a9582788a2a116a988f443bcab1e66b806fff18b07dae5e4b7a585e140e654c3e1ee57b8f25dd2a5c2db29210121a328432ba0568ba6c64f362f5c80c0a5336065784eb2ffcf44ce8c5fb121eb2fdd0cb53162f73a5d321572bfdf9cc3325c77633794602b607fbf8787cf4b52b5639adf9738f8f460b122941d180459fa9801431060d68e46cacb0be3b3f0b98ee77e1890422bc24aafb950a50f459f29c512c94b8233705c3ab4930e8e2610b73ccd322ec84c18099fb50fa65a520372c451637590bbfbb96f91649667520996953b0c7d5f99a3079ffc061add1e33e47c803eb62f0523bd0430d9e25de01f530ec1eac0491d3215925668a7bad4d37fd0e7f879e05a3a631beb691afd62b8860b2c4ae0a1eecc7d55b8313bfed4bf9336369c303830a7da0a3eb3ba17c0d3de6c82472ac9c37d2fae8b5cf797c72bbd6a5586e206a369f78ada4667c50e32a32c926c185965490face0af018003069669d07d47bfc2f4eecae40f4ca3524367e3997aa49159b0e984aba6d3a859b4be55e7d8c6f0715d694994091c4b4dc8c707323ddd558a131b1971d1b091025c94743dd8f7004fc8a589ec457a7ef8d69360d2e09e721511bda26b78ba0d1fb4b3cf14c3bc64fffbda1c526b85b2d698d4cb630e041db2acc7b6ae680d72ba558ba0c8bf3c77b806506d67eb3ecfbf25f8c7f241edb0f7fbc50cf24f973e29896b824176488faca36464da96021aec0f89707bef85463abadf345296c2f1d2f0e27213dd916ceb0a1ebea8d1de5ef2630874e6ef0fbd6b237b8399a36ec002a5816a86c95ff21803487a4bd29f9fbceb764314ee676d64026b8003274112e8e3c21a0038d68d074dace9275b5b63340a5b725f0768767993d3a0ec97b3ddd8f9a1c4ac73aa871983c9fa87b070d6bf0f9604ecd302a0bd9b5502d702161176a8cd1a109194f70feeefa23198fc582d973e2efd8be3750a529edbf07a934ac6b96e467db1086032567cb1edfbcc59afb5038d9302a4a3d4d6c1ced6af93597eaacd4c4b99e6da4f347e56023c99bf445a84bfebb8cdf8e7ae7e2d4adca1105054695e1e1d9a67c0c9b824b3953930ffe977f73845304c4eaabc410096c952dd91c8d9436fcc79f69f50771e3f75fe4d1888dad31f49ee0a23d47e85d1a6e643431c33c0934ca6c78489b3921e95cb95b905067483369e22f71787e9d51ec72faeff6a7966a707937588f0cd8d939160f86f2d8866a2f086b56556b3babcad7cefec0a4047d31dc3b2d9e8ecaa1ffe2b3ecb2c070fab63c3cfe8c204ec6a42fcb9d0bfb795559333c993b748e90c614142fd9aab6c3ff7c9552c338c6c46f46db3b973539023c92f49c9baa4e1a9d00817702e39aced8e673926be3ab4cca41255457ac245d76eb98cd7c1ca36343507f6de8df560f848598b7bd9715ca08d03d1fe123e8c0920f9d928d0b5680879ead9c9ef2f371bb27e1554f720ba8a1aea1f5f52263c15dd3fa944de87a7d7dfbc3018f674aae86fed03f9a88d6c0bbffe07c7e43785ed4dca516c5f6dd3a5ac5f9d4d2cd857b66f27732f350281ae9c2289bbced013f1246e23dcfab2572c6a717e013796c0de7bd5317eb06cb8d519a799600a1ace15b24dd58bb3db41e35e576371e1fd501e3c3e41c1fa8f011012500779c87e976737a16a15e02041456b6427711753ed5537cb75a01d3bda7409046150b8555945841a4b871eff7ef3bac709454dc5e055e984d2d3e1ab352b1b69541f68958a52be604dc3748bec1de5f0a7050f140888e76911c96956ab76aeb7b9aa21e7ac3e176da57952963d10b8537b6c17aac2591ef786456d5107c166060254281a3c78060b1ccf0025a227c8b7693dfe7f3f17f8ad1a6a10326acf5593950ed57486e92c567e331f66f40206e9e8789d952a453bc8afd834ea7f2ccee61f4345f195c626efd010649cfa0eac5209d273c2f3642b59ca030bf605238fad534c2a379d12a45895221353c735fc5b12f0c281cff8a363bf333513f4760564d82ea4cf1e77f06d249f9ecc6e4ebb1a5f1e62a4633bcbf7800a0d167a3a6ea1bf5d57cea97e51a67d5c02c7f9e00ae934dcf67cbbb390f10d3ef1563cb9b11811b7b16317712e1e8301123d46aa3eb1bf688d11e8635c4edacad8ca6a084dc6772451932757b75ad16564ed85e011c9f336dfefecc09f95701d5cbbf9edb4a97077e4ebb05aa32aecbc77707baa6b82ad1ce4a1e3e3f557af927244315367abc03d0de0de0d1fa895162bcbf38510f3dd06b37cb6776ee5dc2e99fddd6670749ae06241329f1057ae96dbfe945cf3f19823d8686c1c87711ac99702ec0264708d4d831deeb081cab7d486c945f05fac9e4fbdb3cdf2ead951b8dfff63d0a6c3622e40964c3e2d5be233c9cb59537380d48f50e198d2ad7c042ecc8880109f488f90e6ca81f1121d9db2b1f5af1f187ed46a593e81b62273f7cf686def7aacdb96cda2251a34c4ec44b429a36e72a9559e26d3f60bf79c8d6df1827532d8a514aec21a0c2a4efbd0516f9c66e10762297286d0afaafac19b324ed20f2d1ab567fc76e3c46a9a930302faa0aa3be68d211dd72a5bcae5befd031a096979c6f4b840e0c03943f536f05525c2a9856044a5d1192f06f9bf7ef5ccfb19253c7fff764d7bdfdc67ff37313b497b98b99c1c7887c4eaa85c600e0850b9a30992763573a1beb8c232912dbfb7b15fe9f79387ac0c544fb19bafcf6b2aa6f67d212356abb7e0bc1710201626e193736f20eaa29ce96972b306596dc557bd850facc5623fee440d333874246199ebdf5e24c3180d6650d4e633974fa84fdbab55a630008ca7e8cd78af01715d4323d3168eddf10c58f97c7f44e39456337405312abb7ddc1af78d81433499b4c3234dee036d6a8bd0680c80a5a25e3779672cb987c1605288982c54c10845e7a80fae1d5dc0d98947c8726d23737af9727a2318fe43e2b3808897e92efcf9cdd4bff29613df305f93c118594761d3d462748c32e39b67895853e104ce45b528eb8577847efc93aa86ba68c4c02af9e49d70b673bf3829309b8b56fa98a925d72bbcfa7a8b58cc68666d2509907df4009e624dd2f0f2bcba201f97afe1dd74ad712df743d11f0bb850be96b47cabe9857c9cae910aaba627dd75c2b316271da52818e31a8b0750caea72dc4aee7c7e875e6a42874b24cf6a7066be8a2d7712b2907f1c938a2bb8656d7a346f20f31d122faaf4d0999ed1648b397f6d28d169fef5b81a684b08672c9421218c324140bac63a587f3e295ae4c0b4d20303f23c64af70d1f799613f9fa95876a50cf3701492d8b31b58c4505bc725399a12eb618492bf4841952c3ba2ec34a5dc85e60c656d4aef58c06f10c070c787ebf66435710096423903f0b5691a73d73688b068814570e4a76abab3550b04abe602cb10fc3154ecfe969c410363b5de116b66864111ad71cd5e680199c035f437a616e999107574e156613a2869c0ee90b7f49f2b0da4b640cdbc3328dc1a43c6ad084ec585e760786c2f9a68c0e6ca91be3a98216985897f6ad121c4bf0bd2b727204ef20e51fe7c325e91bfa3c9d9b4bcd2cd67c4de95d4e6cdc2d8a255a32aa025006d3cf683d8c05abba6ed2efaebfa768b5f3eba673404302d62ac6808c50f1c9eb880a570f85a9a5a6940f15210973447cc736ef91bee557085a49c7a8468eb33ad56387a0719dcdb0687edb14651688db8468855cd6d8a693c0f7652449a5071866de6f1629c383e6fe91ebac13ab5fed9b8087204c17a1b1e410bf7dba04275b198df794709865ebbcbc9428292fc0c46c5fc58c1bdca02d981123fb4411afe9784b3d24cad8a5f04b528a0a44cd2ad28badaf1661e29c609a39ed276ff9f0cb397f7023f97d4b4022046a1b95e51066b724202491cefd1d1797d487bb41ec4ccdb5555eb517d8acd8a13471cfdcd9746c8ec61f51b18320eea5f1cc88bfafe6f28ebf9fc5de8b52a62e94e953ae1a1dbdabe8800bd9d601ff565c25257b0648c2e38769570dc61bdf0133e52de5c1a351ec4a1cc2aec1e99aeb6f8ff011b71aa5a69149ca5de856f10e78e19231a5f4e9507803f1757b48d35c316d769ee7596c6fc3b852c49b34c13185717d4c8ef7260f4cca4ed2347434c16d5a73ecf4c9474834fda2d5bea97994c437af2f6c08c9aae5187ebf4b9215a428f51cc92d805cd6e29c32451eee3be2af958433d64ef9dd36f3ba9923de6affcc7a30624922edcc54d9a913b2bf7bc4b843c798db3006dbc648ad5d7ed6ec6e21a90114474bb9714d80a87715b1196bab55788b828a7651dad17b562e8041326437595609806f8e6ece547cbb273db5809ad88da3f4dcbc8a4c981064c492c1fbf7d62a6537edffb547ad428ae7cc7328800697f543afd1787a91495427aa14552a036995b47f7928f8c9cc23dc5d9738783b54f94d18dcf5abcccf481746f3d4c9a1309e0b4b86b178a498291417f8010e21e6f554f268a4d1ea6ddc5299d8e802f0fd01abdadddad954c0535bc39b50c8fa8e40b1feaecf5264682f0b5e8440a65865a4e056fac4a9cefdaebc36d6b3d35c23c580ea29025ad2ddff60f7f100f73b5265621df39c7c9ae1d47e33bed289090f78d984f27475ee513d17f3ae675e7e8245651db539511cc850ae01020fbbe39b2fe09d5ce901e9eb5c154e21091b264267b05337135e0009bac14362a110e3f9b7caa79d451d6cd8e3e9a406765a1e80d246a2c80895f9123b58cdc83302599df92f34939861c094945d1251bd6b201bdabd64598e17689e6df478c95395d9b5c1743ecda6240f2850c09a15e595ac10177988188975b9c43614e206891784325927fa4a1a40416d269e61d7d73edfdbce1b920fe5bc9df0e23d2a15a279c2c4c28aed36b3a3dedc1a1fe04577964d4974bddab0c0bb8fda900368cde22d66cacdb2a1e6970d25ebf1c1f1f75c96d7919c67dee23800e4cf3fc6a21f009185cc305aca35014757a314ceff3202aafdd1a71b44781aa847f7e86c01aafbac39fe0940edf26c71013e4f56b75074a414a996397be8e09a1210cfebc01113f93c5ac323ab91b06fc9ea045e0ae2243274be9ba2b60f94d1c7b67f776198dc3d8680d876ad52718c08af87ce9b303c09a01dd281ebc33b4a497aae95825d3508ac10dc6d93e582c95b875f115b7be591a9067e222c6ccadf7f9d9c2a5d1853fbe6c8c146b18282e1cec6f58422864e93a1c31386d8d6fbfb9f91a0cf8dce52a85a6cf9f9583dae97dac113518ed87ce05e607c1dd2c23896a26448a2f13cd32f37caa5a02b17595322a80054d4e9840570d72d53eeaa79a04be89353abb2d8748f0529e251162fd24516452ef320cc1308c89f87e44ce360fbfa2e4b4f9c7604e531ec8d93e703c09e1d46a87303bd412e408441f566f705fd126ead4033c8b5f9d2ac6b9bb82a03c75ad6d0c0cdb42a808dbf13dc85ed13ca78bbeb11d776edffa72cbefac6a3026255c7b0c05180b1fa1db3665196b7ffa5fb13300adb780b589a63b5631738ac5483ef0ae839d24fe4f3cdbb16b9dabadeb85fe0046875d7b57e1cef068aee8b4f3960b08690b22a90aafb921c49e87a9791985b3e3ddc650dbcc72343bf1997a69f7d10112b0d766f55081cec68bb23ea33c8c591528ff1efbcbcb85ff27f89e3f7edb0133d342d7d8afd6d9f34e24bd05206439a2eccf280dde769c88c085eeabe01ec6dc211d97efa7f6408aabfd112797d988172edba4fa893bc63fc0bc02b9805155184489905dccd7205f769898a46877c80b7be794002d038387bbb1b69854dbd101a2823718555f62697610ec7b90ea6f9ee1a7bf8ce8eba43a3c0987df8f6b63d70abe9cc6e5f60d644ff7ab0d58289b57dc5e17d79bcdc5b01adcd51858cc39ab101f994da3810a95b1580cab03ac7c736bcef568041df91ae9a0fcc2f3480012500c7a2b2e76fa0802f95a4ca9e12f6f26fccbafbcb859c6a72fea2b5dfbe13bfeb33f1b257fa36183dc151dee4137d196d39cbaab8f874e0f829d217ee506318b6369f7851d1e2cff25b28556d2eb8a2de522e09d2e1968a84879f918621e74ea72e3bc4555d8df8d190014baa00efb39c6778d093884f2df0098212459182126603c2e7ec6feff4f01756997281948f439634ab11e1650f0d7943a6c9bd069f06bbfe801866211c167ac688c7c58d9103bde283fda941c1be2f3da630386d855a442067a4bd95f7aa3c6d44dac5bcbec2c17f2d914ca067d7990a8ddce0edf63cd25994714106501b316e84e04cf86ab09ab507d1f80f52a2136fdc79b0c865da6324b19650f1d2c1813de3d5f5f03439d44e2e0f70a6c7cf99523b3b1a409a3c530547a09a2947928665e6d9084c816ed0db35b469af6503f564f52dc42d9cfc6bd3bc30b9b3dcddd12e811027acd37a99269ded24d516d94ddfb2f8fab47bec182740a2f4591c5572abbc074388ca608715f1ebc030803218a986bf84eadc330270e7255d65df5beb21ec27774181c72f940ca73c50e4649491b57f575daff1a862cac37af6721a818d7ade575f5315f0b599d7dff15425ed8e1ef02b91dd02345a148212abf55609c67fd61c731922c0fc98fbb1fc11282c6243dcceef643cc73b2ecadeaa13b5a96048ba78c4959165822ca8610dfd5676ef63fe0544a8b44e2dec9c0bbf8c5da61dee072c6e6f98c3d48199c83b64149e7d86b427e199dceb7a6c71b4c27ba384e414e94def10a9c2f564b2023d76216f5ec70756c3662120caddcce218d61c7dbc75838c27afa98aa61009419a8212dec2a279eac170d4d89386f05ee4d223fc0bec597992bfde3b7dd9b26e0c2f281b67b66686decefe5e86be1f20409a02f6e677bcd4d7bf1e6ef9570f4ca7ac4cb30642c3ab1cd0a17353c0c29b180a11ee5a91ea57659bd8b3d3fcf8153ef3fa2d95faf9dccd5ea77249326516d82981121a69b5e4e7f1c964325a5a8689ea04488851149f2428a2261fd8dd370c4400a9c5b8cc5ab44f06a1ef4a23d5e7ef43a94833cd08994e9ac9eaf89a70c8c857b3d272047079d3ff547b825203940d33f8c7a0e421fc55e036f8fda6614564b44829ba99d8758e6805de1668aa0f0bc2b8ac982a4859249983f58390a353c524d53dc3331804c26206252c2b608354ce1d75804dd0eadde9c34014164f29bbb79eb54be3bd7ef19a40fdc3d04bfd9d797c4dfb0df7e494c76808caf57310c7695ae302be9b2569336e35ba958af0c522852408f20dc3d3e5d953df5701787e0b902e06e03ad10dfd8fcfd818184a5078c826adc001a52819b511f05e0d0470e61da2dd795fc329c6bca27790e0b9f96d78a14d2fe8e7f9f554d24fdbb91375ea31746d93d2361f85ebd78123ff87d19f8285f8452a369aa1ce0447f718214e629cfac34baa26865ed4ca30166e61c411f4c331c6981cc39f207fe0fc1201712a56fa45322609fc61b4819c7ed3e3fda2e51134fd8831da575b7b1ed15465ddb37b45976f423eaf0bb428ca445fe674a0a47063f483a19d798c8436b7e0adb2e6660a7117c49f23dd17871dd26d5959d685954defa450a664b4745bcf54ea62a06f37fdec44f714ce06643a8119e9c5c39ce3d7a1ebd7976b98960dfea48a72fca81a8b5bfca23ac2b55d685eb4a8bef46009ad0cc4ecfa0ffebc0d670ae253721c7d38fec942b696319291ba6c7298a87a7e1b56ecbc01ce9384683c119f659535c82ff633fb4a9291bb88a5fc7033876f6f58ac838847e7fc40227bba58e5adf097343fcc9f0dfc9296f8c591ecd42d8d3d824d9c6f7aac26d197df47e1f1eb7ca2916365f41de95f2b75be66cc3c1c2e5cbc4982c426c4738a364ebf10903286d50990247b421a0accb46bddda24dd308793c866ce922731955940ef7f7ec0c7f32154e205d7c3c1bc8a52bb25b8bd6d43e49801c57247a2a6ab6d17fd0f327fb050281575053fa65295d676b467b2220ec1ee0a526df2399be325c3a79bad218d0d0ceb16a26e8c40b147170b0598ec62a40a558088936d85ec0d5d49414ba2d1677ad01126fcf649ee29213517544e10a219668b204dba2f6d3cebd81a8db3c77e1339eae945f1834864fbd49198d768ccd8ab1185f4dc15929e34a09a0a136fc827fb085a213352eaa600c673373c016f8c4ca446b436eec99d2db131d2edbede67f86bf62a714e9b71dedb9f44f896d84bca9724a7baed44094f74d17fce252cb332f866f4789695466c58afa19e5441829b7d346d3a5a3d42231d9a246672359596034e9cc2495adb196ffada9ddfdc4015a362823388c0bc0e02f4f1ed611ad25a9bb3d370b1d8a6f9bf145b7ef54b830ff907117c6ac8e0360911a1b1f1146994be7d990c2a9554f7593f9502852afa206a5292440625172b58b8f3952757fe997411464ae1fbfb0b581dc77ab28918739c0406cb27ce1198c32d8e1d5bd71080f98bb13ec2c9b60dabcd9605a31a2395b151f3c7c15a7cb348049cbe28addd482ec6d88dc27bfe1d285e80ee95389eebf08e01cc762dd29c89df0ef25e64935781d4c7538e2571f50a7d0364b2896ef4c1620675d5e35f9c36dae5909b693cbcebfbd2391deb86d89734109b84889178aebb7fb3ffd177d9e170e58f28736250de85de5756b77d01a146421ae07881536ae56a9da051aeeb3e264fb87e0935d94c0f934ac7bc531117401973f8db7f4ba1c8a240a2eab748b74a442edff3f2fe3abd061953234484cf05d360c4d0879b9dd9d28e068ee1ef591e24d412e20a428878e4e38ba52f39b1595cd72fffdc03965b61b846e5c1d95bce75c654b28e449c4a6c7c832c1d6a81360126343d88bbf130a4edabd9527e72112c5b980c2be935a590b780a089ad1df27573928a21deb394b10db1caebc2f8a5dcaf139cbe206244163e7d59326306876d568792871cf4e17973813332789f41ba0a1748f83aef1e73b129f36a106f602cb607e69d3096f3f70288e20298918b1a9291b45db923b4d6135686929c047c920122259e389d0663d33ba421db91ab94f86372f27526b082ccb78402c5ddb18c21892835a1b79fbce3704848a4a6b3760190a9f8dba312989ad4abd908b000a7f7e8c4de244c33cdb350ee03e11056ba034a9885e06d9ee8d606c7a1dc7e0beac151352f0ec40486cea6fe516c7be23fef3586c51528cc676dd7c436fa56297bf85fb8ef497b90eaa90d17769d859194f7a8ac6e0387ece8d27bf5b6d6dcd15c57a8328e93a08384a41e438966cfa1734b36880cdafa7e68191f05eed0db10d2ab6ee50882692e95cd00da0aced6db985320f9cd2c841acc09d2266a69066d64cbfac03c8ac3eb182a9709eda49d4775cc5cc7bb9ab63f3083a0d3ac71dc7f80798d524e0d3e766824d0c3977f69d133355cabacb8e2e4696721e715e76e1c64063fb006cfb7ebabf0f076d836aaa10dec852fbf9f2063fc8c06419ac20df796aa24b23ce268527abfc92c34f8a63a743633eef1e0b5a86089b3d15894614b24373eccd5eafce50df8e8ef48c79e562d3b3145d2ece3dd0c5c5a526bd71678b48b57811c08d130d605cad7b4ca70e6e612c6ad8a23a0aec55d91a8dee9937b4bc8921024260b140e8de56cef8455c27c1b4c48bd8a662a94af96056088f30cebd62883557062573d7e984d79fc55691c1924c9e93ad0f91ecb68c8bcf7420cf9d3571f3ceea0a0a9205e7f4e9864ca0f7eb6c9a30c5b01bcc8289173847ef8be712e4e59241b374c4400034d8be667178a961f0b4b84564fd9677106866f8a59eb1fb7dfe03d5e9353a4261bcb1028a03e1d01ad3fe8036d49915bea0a7c954a8ada1be7ddc53fc9daf7c9d8222ed63e91b78a388989c152ca0e08ce8fe5dafd37cd36452ce6d9a10ef19913df5efcd89b0095258a9cf847c95ffa3820fbf901f8ac1c5fbf756995d25f2afebd55117411347486858293bf03c4d7cc2bf885767c7b3f237832a331403aa0728fa520fb138eb91cd91a91af7fb5889dca92a007ad598707855f30ba08b540d3fd13870e814f34587a3a7f294e0e2e5680aa977b6a6033cdce2ddbee9ad06d1e0ccd3094cc7f1a801dda6ce669d9ba0b8cc22db4bcd68029c1687b2197299d4b424123847875186364f22ea3bb80da5c7cf22d43a911dcf0d885356d4d3390a1566458c510ecb11943425772fea547fe0fa85fd958583ab48b7509d1c9ecf7aac5c4b97b791f755d5c6041dda93e3abf127a8f0108654935e0c4302cedf5ad8856127176f21a6a40abb59162b000f6a484f28e2f0dc1b43c77e074216064180b4b2af807b8f9bdb8e46b5d30288a1a38473638d64f86ab30ff2e57234e9199c5d8b979255093683db3caaf84327e42f2d25f59496160d56aa939d26372428b75f34c1c91976137b2ec66b03d36e214ad4fbc1f724e69d83ded5f63289572a6a5ca8663a795a059c8d06a6f7600d0e21a1f611218eed03bd28fef664f0492c1e9874cfa2b0356202afb5ddc60ac81a140d3e02afa2d77e62f7d2752fb0643750eb74b99ae6b654c06698aebcab391047039b513973356d48a02dde00697901a7b7353f53cf1512749ebeee4021c891e0159907e882cf5a61e6e2655b679b1cf38e02691064ebea526e97fc04289d65aa16c5cc955b6c8dbe2f90d657d2c6fc285888630c429f700d3f286ecc58e94680a3b43e50437757f85884bb6c2ae42bd19cb1cce839605680cafea439cfdb1275495a78e33512f35e83bb7d2597a805df8ef3946f05c18d34912cfd8b032e4e71d3735ef92edbd94fdfad9cbe940de6d9d21c45447404ae1a6e5124a0c9ee4e104658a959d11dce387d4a46b0247caacc2cd36db0899739c54b4c0be1523a30375bc38d7f7d42d0f93c8581062a4269dd445bd7449d32c91886145906e5a39d815871c1acc0b7037c50b88b0e2dda8545795b53d394b7810626c3293d85cf51d02d7a31bdfc6002263a8624b05779d36e6bd0a0d4bea0b08fe046aafd179f20ee2f9d8289a503e2a629ac36ffbfd6480a3838e4e3f5e506e12abc09dca65189bb272c026c2c2af7e80dfdf5a1b5ba863cc97c090aa914764899c9a5dc01ab3e713334e0a3818976022e366d7dc785e9a469bb2c4eb2cfa922969cb36ce742d26508af9abdb26468c687f09d03ad03ddd9f4435d57dad4354ea5112d6de5db671280cc3fede8f7d249a881b6f607275b96d5b9f4b1e55a3fdc3adcef9bdbead4c3d725adab8423622fa3ad4452954fbc9c16ab674deb0c4ebc07935403aa3c7b5f2abf23b274c9c734b95f0f88b249fd84ec8a8b88aa5fb5899c519caa855d9d7d11d53e17b19065a78a6261f78e7bd8a9928b1b4bbbcf8a9cdcd853836987fcf4cca845af1bc8e5956399228987d44ceaef923f7915c90813b2eaf1da9eb604374a8a1d0dc38332222299d553370d914155208c8718614f0c6673b4efa156b7af8b3ccdea0c3c7488c1404bec85369d9b16147e37b061602cdaa927b95e4afd2ecb26c5b19a7f512b523b795adfddb048fa28300d420984179835166dc5e17e0d6415e931953e46807ae2f524b7ca21a5038fbda66d09bc4dbe44fe98d72ae0f1a588b607291fdafe44a88e1c0ad0133e26060d491c499556484e2de1461f220f24d99b97eaa1f2ed6c86594922794387cfe80924e340a4f0346da7f4edffd0ce6e43d15f2e170eeaa611922e2607fa8b6bcaf94a76c950bf5fbfbda1cb306fa9d1385caba794e77478ff4f331ac2ecd79465baafb080572a566004548dae14d7da9230b6be3a62b0272bd6b4701e59a9d069699bd7c4a5f5f481237662db9d319cd169ff5c7521dc6e2a66ee633956bad90033602988c283a64373a8642d42ea12a3012b04adf849cc2e9515890d69b9b3012cd2667a03796663972611aff2a993b3635501c3ae88e94be535621b1d693d5d3ff2d1429d9517179f9894e9f040a19f31cacb4586abc13a6eb7103ea8fa439bd14b72e2c42906ddf9df96eef486e4fe5bd65318a9ad61696b789258337362c79e92735053925324a9ca93ee5c0dffc40d2c02b4b39cbf322c2a6899ea6467884eba788c7e80e8b8b09c160de04ddf647ac547cedbc70f26d86d2e6cd63c4355413cc0c76f455253f7829fa933e6f5973e3f8b79cdc5bfef1a138e372cf25aa79c7f80274261000d103c82bc958137c02900e8f06a5235313b081b7cd296ef2dc5be52a128717df33ede1e3c9f7d2a401594390a1146f8201f2e7fef2e151be526ff08b2b5fe85b5b933b7dc6ba68905f80d38ba70f3ea50fc49b9006c35f58ff63179771b66b63a0613087bd4de2b0d429821a15809ca4fa7cf65e07dbc0edac22204b09d068f2edc7d235c97cac207179e810fd11d6e1d94a7ee16c08cdec345c7e04fe5d1ecd9bb60f826f1b66bc24baa79c7ba733b61ff6bf51c20e3c1006db879872b05c0593ad49b854b7ced11aefe847f92d8c691fde4a46b190342345ea67e6890d7d126ef9023be500f36a22eeeb5f18f89d79136daeb31c3b3a939617e21db60104cc2107060a0d6b5865e624ea3fae77c32baecac0a854e5ffb894f4d4fdd3cba8715e0e8ae42eb8090a301dfcce0e87b15ccee7a4b3aec53a93f71752ea65f9115eef5806737d3679205e7b85af1df4d67e1c19fd851884e34be57eee4b63392d99351a31fcaf62d8d9f73893c30a82d3588ab2a157ed0c5c193b8857d0f293efc879cb140fb8319d91b69c24b6547b02b9e1d8b83c510c63949c1e802431507fc06fefe8b5a6a4df6abd17d3a598df9b2961bb073698f91b5519239984082e9150401b3c71219a1589d050fdd19b075c4b36c28a0d723aed7dc9ac498c08286ce0155f073ae14ed43318cd81e134b236d2f6fbb85d62b80c91afffa30b64a183dd26d9a1f0f177bfe289a58da07aee01e7f6afb90d1826ae7d6743d6f4003f61c6b31277c4ba683fbda5f4fab7e7afc5291dcedf4da772a1399f89cbb0460e6cfc65069705a2cf88f5899cc4f4131a65f69ece9c1150a1b0326a93f393fbac637d57be6c2d38d677325c36afa6275eed3bdfd911e035d835359d1e7855a45f064aa7e87ca17f55245e3b99c50bd9019f4e5ffef57049daa3e2bea8327f887423ca3b625cce4454ab59144917b2a2578e26deacc6b83b6cd60105ce3d95c1661a99ac87734be46296c3756956b95c0b4b7328e32f33f78b8d6265411c64ae05b1e44f2e3ab767dec6175c9d8a30e97622a28c3ee486ebb7a08cd6b06651b551801014a0244e4df3afa78c89410155f837f407a876b244e2cbb453a44a7f2fbe820dfe3180569c610d9af92e55f1a6dae270647d5c31e46c21283069579ae335772d7fb2ca63e6cb1f122ca66627126ad347705c957edad75bb5570ce01da62ea9e88f1e6587501d13bd53a9fc0958f3f85b9f70babc9a7e53058e216b4c41d1c0754ff46e0f80f5d7f55fac3033806874f97d8601aca756428601160c93c99297f5a75f46a0935e10055e3cd0fb70f7f88b66d75382b2750b214ce6d8fef3d803c4f826591939c951e496bfba64ab00f2c2c6d3091ccf512988fe3c73b632b519049715a921fda515d999262edb5fe6f59350517de7e56b83bf5fcd0e8077d5f5eecdbafc4133e1fde62d0c52956a1bad298289fb96b7765657347448f799008fed53b9e3856484a461330b0d6a7952d1c3cb59bc668ed5b283fadf63a666e0176a02b40c9bc25399ec375327ada036831cfb8ab2530cdf0baac16e07f4bc918894840c022605193d94e0463ff1943d66a647b3498340e978081d0b927d7d036aa13e2907185538f9194bf4f242042abc5bb9effd96f16b3d21723aeb06eb7198565b241eec37bbaf2dc65bad05c9f764a867fcf75dc76196a85543d2668f75e441f9300729f79ed3dac37cd36a5978bcc4eb7095d018eed9a9b2bfbfdf533d997f2f1d51bad58630ee4cac8ffe205f57f7dff17a05722cc2d6c7d887ca0447ade9b1fa6e0327a25a736109e45b5cfe3d0fd1218f18634c23a1e54ac6d054e1e7716eec48495692ac9ec49415e4a7c371bb3ac7993e1d8c2839f7c4888b7b04cd48c57dba3b5bbc4c8bc1f3de3b089f9068c436b7aa28ae6080fa18dea0d888ada56ba53582963497b4ce67fe4e0ad6247ffd93efd86725abbaef47a233b69d762822427d1ea931cc084c7578444098a88d1b0136a49caf7d4cd6f8962458a782b9fad355e8432adb5cb596379842bb3bc175c7ea55c6e22092553a45e83639bd1ab0605f319fa8a18b392142bd519b5b537243c2fe6537503149d671ffd52d</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">some perceptions of gaming</summary>
<category term="情感" scheme="http://example.com/categories/%E6%83%85%E6%84%9F/"/>
</entry>
<entry>
<title>learning red pill</title>
<link href="http://example.com/2023/02/15/red-pill/"/>
<id>http://example.com/2023/02/15/red-pill/</id>
<published>2023-02-15T06:07:10.000Z</published>
<updated>2024-01-15T07:36:03.608Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look."> <script id="hbeData" type="hbeData" data-hmacdigest="58794e772d43d8286a5f68893ac1d135ef4440d0e7eadb99c71144ec437af492">10d79030e8222445804370796b90fca1b3149e2c2a0f36d6b4ea04e548758c215c6f168611c5a76fea7c5afad800b58eb9f5e0dd6887a51b70f07afcc18d403a1bdc6af9da662f26ca1b735a4ca702e34321f8f37566ae0518091209ae59b03eaaf03168a0ff07eb9f4b7999ad031ae55aa5514db31cd7797757c2d7e447caa10de618f5a69e1385afd689b367197f4a5732abc7e31bbad5551e4987952968c938b0f35f6adc4abdfd08d25077003d638997cf1d8839347ecc661382a0051122d18e5c58a68bd1fb72f0b588d950da6f728e3055b76b60234331e801aca44154f955a3e361f174a88a3cdbcfe9eda27edb6757729f7a3a10e8979554bc1ffbd35630f6a4c0221c9da5e8ab04efbbea39e7e58f1986af2cc37530ce74362e1ff4a3ed18d8dd0d3a04eb44b138e427f2f0347634666194ab0ea79828c6aa7815a870b9e591aef112dfe2ec0ed125c4e0ba83197c047a402a18f454fa2932e693149facbf67116eafb7222d396877a473bdd496edeb0e8cba24b3b679737ed6236f90daddcd709c18299737bf2d582c302a33c01e91f8f7fb840f6062b6c32cf836560c8c64545121b8962375d870dbd2f65746bf88311da250ea424f4f57796920bdce9a104f4ba644b262fe057fd1860c9daef39285bf39d3853b4651b5a76329b1472484740b403a6d551d0b494943f4008c94b935dbd6dad0386eca6af91a429b88eb47ca4052cef945f2f52f4d60300e76a973a7776e975095b070f6b02c3dc95f4dfa99be24dac16843bd6f42a9a8f6b57bcb2872aac7c2f47d6fea7cc52596544350c9c1859e6d527c6dd59219248e5d81c5ecda5e0e50e491e15334fde3ce75f4a90c6501192cd3b065517eb7d9e2dd99cf6b964dfdfbdffe79d2bac110dc8c4eeed81a0b1672d3fd3022b33c96292a7c9973e91518afe7165a0a77a05cea4f6e2f13ef952a7169ccef5943f80ebc5a0d3513cd8d258f003ae99b522fe80341f1b2ed4a2efc9cd07ceb05a0232ae5871ca7317a06e92ba51c1facc8baa92ec518b6ae58217358a2c01c21c09fed7ac420514f79e928937bbce144f3a083ec2d46d6ad9cbc384bb4a092e800f468a1a6244adaddb2c5688ff14e277e86cbd505a2572c35cbb9281f34deac507c84f91fe0078aa6185f46d82c87f7bf47da33460b377dd229fc81453e01d91b798600566aa6185fe549f0ed053a5ba0202f04a3ec7124ad22e470b1c11b098d7420eb35dbe061a883b385293d9a90d68028e403a16d066ab31fc06a638ede18d5828715539baadc7c735b701fc8c8b71af018ae7464b47133cf05b18bb5f2a5a26f1d6da7de8e494a7c9a0c54ffb7756a8fa71ea344e8975c9c3e758d0b3fcd747d12a6a000ffe9b3f318804c940419a4891e91d377e33281935969bccf72b307a7f001ecc21c126317f710abfba810efa75522fc7932d12366ce0c44d8b5d1b11179865ac38122edc069b6fe7ce7821cba0169e332616ccf46ca5e1513fb9cb48ea3cdbd3f0d85b0c78cf464b2a76a9154bab5f9cec5ebe0048c259186bab3229ffe3a4aba18b29c85ce62168e3edb2e742aae30db6655f302ec68c3fea48052a0055ec0a473196cee88ab35f4149f44725d4b148b5575b6db28cd0d8f905c687fe7b1820145f2b81b30193c13fafde92b2e12fda863c1be3a740f1979c1d62295a4660059c92235b55b02e13f7cb9b8e4c5ef3066bf2ef35ebba986c85347fb4edb93610f83da81b46993d145af68e9901d166ca935b1afd20aa05e6ef2f85cece0633222fa15d21446bd01ff9de226d207ca57a8b3dccf261726399c042a72d2786ae0c6a4a681cfb04e21dca9b998eb2b91ae0e7b3902b2cb52c3b971a2483fe4753a670c00e59cfe178ac1463520eddce464a35aff4c6ae5ada2f8be65c92dc387d26f30f7adabf057e565d0bc58c17c6c06342838dae5a91ec6ae2d1918d4f9f6de23ab3698113dce59f9d3d3e82ec93120aacfd79974ff67ddd40727a3d505b286ca98813fec42cad0e6654c2e20fd17847b4716cfeeb4250aec10c11b148a2ab8d42b2a128750e0c15a5a4330576fbfb698dc368ca4fc684ed6c1ebe1403f9ec9b097bb4f8e9221bc111df9ac3598308e93e4eeb0f3befb65ec6181db2b3e4d50fb6c556bcd92f67b4f6ff6f4e79e7951c809b7cae48b2b529234b5a3ddf68599e6ca41c3ebbef3c4bfbb30c0034c836ab311058e438e6b0eceba038abbe979dd00d496feb6fd9b984630de9cf65b555285241db02a0eab9e4c613fd154abd4234c14d069d15205418bd3b6f8a2c171faef9efc3d258143689e43b1151d5f56877ba64ce667735c4ca87e6bc09e2fc44affc090b897c08aada8776fc2b6d5fe867453291060c606722f13f04aae769564a6f668d58018e3e321a0b6d9f9b8c294030660e842ab4794c96d6b95062988feca27d1b79e80d95303385c7a79a0ea2eafaca4885a94a4cfb72a45ca6f3d524656e4ae1b2ff7418c68c188baf44257763f054b45ce1a78e04e0098b2fe758cf6d3a14bb78635c8ed6a6ba444d564f4b7dae8f36c62fcee81ad4081304536064f5ec964c42a5cb48da85fbe943e1c6c6268124659b9d9f390bc1e45a21fdd834aaca10cb713ea7aebabdfc3a3157a19638d932a4777c9f5d285213e3fad1e6cd9067f7e73a031b365b4c13cf96b1d889f700a5650ebfa7cbb172211daedfe47020aaf6e642ca11eb475444e5d6f9382452872bdc502a148a3969a0696c655cb1fcfeb148f2aed0d153db8ee3fb9fa58acdef4c3d547d78e5ba7dca87ab285bd9e63f459f87b7b86c10025bfeb6c7e5e2ae2622f0f0442d20afa852de3a42aec6261fdec891b4cd6a4b2b3f34111ad9d82d10cc0abe557cc69005d8c38e1862057e61c121ad600c415c1d6c4306171ca5453b0638161b7b46a214a65f8266c703b20986932d5a29cc141e659a7d63fe35d1ce4d305fe100136498a05eb8bfa1e610593f6a918b3067507189080f6693f5c97c13c40ab0448ed76112b0dd9df5c29e462d094ea05eb6261a48ffe935eef4c9f93e8e13ee28f48485181f4befb291cde23c0e353d051a0485551c66bc8f0060da8226772c441df47a06e2e45eb88a24178bb161ac3eb34d6076bbd2772d668a4be9f3f5a9cc5bab9775162d4210ae86086c1ef3b0151012ded913bcd63bec0ea9953204696fc366d631d9cf05770f567cb00481010490cfcc71e145a8e3d9c1d3aca8c8271e0d7d393b1fdf4d377b4e4a3f63b122a266a3e1d855096b028a8a52884d0b8d61e8d6cdb952fe558714455c47ac8c94ddaf854c5872540dbce2aa3e7535fd9871f49246e321010cf18da0833f9c477e29970bd6e9a3fc29efac61e65bf9f7003dac8b49d629d8e44ab86b1c1d929cb27ada827602c9175b58aef245c2a103a9d4f7ef9de37e96e06b1dd19b5b841931ee20fc5a0e7f6ea5e82b9de4ca352d59af0a4a0592f990a0787d4d4078df3dd9851ec4432ca33821c80546a3580a7339967dada5ebd4c29de9c31674c452336fe6de0428e0a1663fe72f42f9f2292afd0bea7e5075ab337967c15f598a0b8083d70113b03b4e72932cb8a04138ce7fd09bca12f3f9349c1875e7462d9ded75d52a319d456282dd6e5dd5e7b3043cc0773297b25070c4e46ef75f43c68156be98081f2cfe7a2a92ca22f2fa7cbe7f09ca6adb06242f22376642918918f97ac3433a6fe3c4f7c3e69292d74855304ef4a547e1d3cb4e73a23ac710b36d59b6b7067b96309a0f957dbbb6a30b9e6c68bc1d0489e36d4fa4132001714bb0c6b6d6f39f62b302d7bc36014b0027d4c3a00f6ff07475b2c88c17a4ba69bbb8897056a941ec13b6128720aae54716dca36b15dca84af8b90486bd78b91f440beef6603ddc0a2d76fa9e8e8d7fda2d5fd55443d46a9029004c6c749640af943189d3fc05fd4695b5b4996a587241b7e7d998e5354965963d68de8635e8e55ff04c650e538de0ee6cc20667cd96730b20246da3e9bfb66adc7fd7503b13ae61478e5cc797f91ca4e50f4898e974e912105564e111a4ec71b80346657a8da22a1545073d28ee4c947da22b208c8dff13e3b54312392bad47d6e6afd05941096eba2fbe5589485601f0b8c717b77c018e1d3ef3a0f3a089b0a4a27b7aeb8ed8c841488cadcd27b0c310638078b5abf62802926eaec0d48f0b0a32bed5849aaaf9bad3e02a63c906f22e869b330be0e1bb57428afbcb7c24376f68badc802289a2ece355e6611fbc5d4dc6b42257b8fa0ff3e8e6fa293236022dd6008200863b538f2d76e5c5572554781a6bc1e79694c6b4e319ea01cd5599b2990e9de0f557a160f0627a14bc2e2bf759d616c1f1c77f0b967e9564879afd06b7f732a6720db0fc0bbd14d62893ce9350ab16c182fe2793d101d66a6779fcf1c4d55bf50ec444735c0981e3a5e6a42034fdb78dfa5813c6c2c9c23dae4c019d3575f4fbba381173492d4962dac343ff0c1a4d75790404d51a5cca492bfdd293b5a114c06f36b275a8e6e65d3fac4f4ad8d495af047c7ca15f59b7caa8948a2241dd6b2abdfd22957d0e17de459c01a7251545507b58d45fbfd8d99357fc2c2f9c9649f16a05cadbc13cc2aba1f9e0a49c395c0e8ba12933dcb188e00683f42e2cbf8766af3f6153b5b42b56ae24a4e2ed75e49a95ddacf94c43d92c2e18e6a97a566c56388824f9d5b3774ff635fe425e660061b990a504d6c0d60f7889225564369215d8bc3a659cf75f3841099bf3028145e91750b34c7b8b0e3af97402a0187060ef310a7a0660ffa25cfce626558dede69c4c91e47502c753d3aff97eee123932ed300494e693d8d5c6e0f9993c3d7ee24c619a8252d98eae30c46767d9bcdba5c8e0882e339aa04e4a08d7d8c4235c3ae59307a3212404cd117584fd23c0a36e5663190e717ac1f0a491c393b026f5cb90e05631915a12b8e0fc90e0d409532cf8e7900420f7820c5c1d081940fbf2787d2c150f17b16d474264f6e4fc81c4108f7499166c91315dd43c04be250c175965dc28879837a05b7a5c599076a930080370bd92ac6db60146cd518b6d70685b104a040481ea1d3648facb34e3dc21a463a03b71c36e475e14d0448a8c7112f1e4df6793b3e59d0f601d81514ed00305a6f19e5136cb343a6c8d4062a877c2a6984e260c20b7b631c1597e46a4ec411611de3baeb483a54b3eda8ac5e9b82b3709d2d7d2b4c42e7e1fb7fb4099d3166b21b6b08457e2012f22bd5c3d1f83fe1b36d1d7aefff1cb77e5560826a227a19914dbc063c1c2c36377c79da09c1763ec240a68db406127cf3c34f2b7e33ee60d23b16245c33abfabc79da9249a0e9634ac8dd0c697e7b84cb03c209bab0999bb982b73a35ec8522edad1cc4b95c18cfabf745784e8c90716d304170330375fd8edeef3342bc4480755c8d87f173ff3c7ac81397705feff1452adf461b732f82c45712bb01b4324aeca2261b97fa9cb6f671a77af76423462e7e2e17e6dfa5975bf6c864854c00bf0b9c27764bbabcda8503242fbc0058370f139b4f8a8efd04a20a2735326f79572cd72749b03ad527bd3ea53caa7d262bac88f6a31923121f5977dea309b4b01ffb0d2212edaf27b8d0ebcdff9759692045ee240b6a2b17a64cb82346a0e1a4f419256b22522853cc55797c5b9b1a25c0b3a65bbfeebbe29fa147013beb2d8355ee3b753a6264cbdb95d46cea49e799180d4d76ea04003f4ee1ba35ccf3610aefb2ce53ff141889f882fd5be93c388f0b84df545fcfbf4a3066faa1b9d765562b29903391921ab20b53f42946c22bc9c3d1e77b7ee12fb0525476581d1805db865017f5063b96fb0c61b64703ad453a9e6c563795da6de431251a4bd2dae991779427f19f34ca18d746b58b6ed86a302dad119a354ecc0edf976709d270921af80fc8b7c8f487ab9e6f28e367c65cad120ebe4d4c86db31a96b1ed617d4ded422a1df8ca9b09fde8847a7c2a5050014d7f6b6c30df7393c7b1cdc9dfbc90adbada322a968ef9b7451ff1dc6b6efde43c0f7cc183e011fc296ee7e0efc494f505eeb3cf00d0de11a147e7527375d113381154d528446cad91ae0af421d7e5fdfd46628642dffbb8d61b878f76c655c5f1d21f21938ac8eed0b2a7f8343af1a6719d7dd9f4a290de7de7dfdabbc92b4b4ec44dad4d10f12d40d3ceddf8a2eea778fde14712450809454a7df33c9e5bed132409e911709a23382be632b6e974ab339e74dd0fc807e75d18bb5f0e1708b4ece84fe73361311c673998441a9e3ef02691d50fd9e89b18e003052d6084f17e61f177b08f07acc0f60383eeba583f876454167b61031b4f0c439ae81fd9116a15a0190f442a4466a694b5e93a0b0e447ac7cc3e1704a20307a33bddf7897c4b986e4d946645c2b407054168487aa71cbdf57d7dde412d2040c218ab12ef140038db30b70284efe43e0b0ce067c1c49852a16d4b93edaf2616b33560d1d060260c3e3aa183622c4a1030b6692ee9eb66c60b669b0125277ce3d52379567fdaf6d0f64d7101cc762e97042e6a88fbd1ffed65e81f1b7d0489ff1e9626bcc82c70736d094ff76eeabb7cfbfb940831917254122661822bf854f9575129dd0f08a963137a9814f3f00cb78d567e0e804b3c11bda87502a73eb21d89ee798d12a6d18f2d77d17498ce83eb20b983e44306ee0f2be1d9464c57656ee96d07d8f18acb5b546686612848fa299608f845d9f87c1fb99dc290fb1ce37809df4dfd4bfdd4375eb1e6fe5a436a4cccf6b3978bbf4683134222f13b4bbfa959865972ef1174284d3133a9c839d976f1ba6211f7273676c77631815d05fe7ca03ba714939ac1697de241188c7b8ac03a4287432c4bcec980947f0a59a6b0b80a00735ecd3ef1a2746740006baeeef5ed1db65714d8bc46e005f5444957dd66ed1ae9050d56817b511ce18573a5d8be7b3c7ed407301486def2caf5ddd83a3893b5e5cc2b971c837c7c0af1979ba35cb0c2e54d9cab97098907fa738db96cd1360e3b62f88198ca9ae2f63a899c1a3aaff70db0c745488bb510fe667bf0c7b75f36bdb6d25ad9226484afa02e53c8e465b0e3584060c217ac30a986cb1db2312b309c50ff247bc8968007fc627beb191253bc029ec3b13059b375e0d9bd7fef1091a61d01084e7b0224d30e8fbd94b896c02b87c36883a02dda1555377a2b44f0162ea418890fc75963101f6d8aa42e4b86b2580fc94cdbd8f190a63c88ad739ec0fbfb32593229285d02e193a6b0897da68591ef80bf2164051d4b55bd192086f0c94b568c61da7f9a73331c8524efa5576659748c794314d5b181db834f7f16c8f9db1b70bbe6a749f41f2a56bd8f829f06410d59844b7a3a2b36d7f0130a9bf855b3c6862c355c1bcf4ee580cd1ac001f4eaf24721b01e853a0002bd15dfd9a7e13167da8502fb7e54330d2f1d8bfb6aeb48e812cdee99de83ccb8c78cb84240e4498c4d3af1c3ab6b0cf678adbec73a570686cfb37ba7cbda5731b90b838d08a854b727e1e3cd8a004e25247a5a0360d9e9279b332414a4c86a4ff4c61102098ccf355af5828c7d3ae8f8b7708f62a9825496fe1454770635ca837a3880e08cb99ad11541a87ba6068ff4ad6c6cb0d5bb92d599bf1e99b3c5fc70c735656a6c0e5be1b749359e2e7c349d4c48b426e60795b0ab2cd5c156f5ac29bb2d2506a41d7a01e973379d284264adc8c1d585f8a48c2fd6adac68918c1c104c89586d66e3e6098286ad368a117edd96df77e6bfd1109a8b2bc1cebd014f0f1da767c15cc356abac59e44a0a79dd00e466406da21a5d9289eb09b4b107d38b2600127e88ff52dfbb6a5074b2685bcd67b7dbc716565f6826735b9e1aeaeb6288d5060d96f2371828b8afc20ce65f9836161ff9f8ea4c25fe63637779083c32e37931f7551bd68e988ece5335d79c636fee5a9340c437a8db2fd5b0091de33fdb71530c3da2885cf38a93c4f26ce88aa5e96c8408c1898a4c6a7d9c031fb9911dbb93ecd4ea8744468e0b9ebc2b1f2c761f8f620870548da7bcbd49df875a90ca55e6d713ce45b19e78538da0a6319b4ceb89f743a0ac0c72122304e02ed6a94da59eb60036e8954cee48e1fd6ca491e203a62dbcaa0fca4994a95e17dc457c323742a5a440999c7c5f76775bb7e772d051fa2b4e4fb6ad43211c9284ccb8a9089d2be7842c2c25c352341d2646f12507edb355e5d980aa4d451e02a91946fc9fbfc001c08df9715b5b8fc430c23a0fa4368924c00a655172cb808b21a5e86ae27868ae5bc04f2a75a617fdd6c5b651669b560e7f702065e50fdbdcc8a4629c0705ac513dbc254cbaa87d3f18c00454d4eeb43775a2013488f74d1941b61fe1fef15ff31f41141e34cc8f3591ec56a67fc975fef82dece9dae1659f569a8f7052f15045610c2c3611496504148e1e0f99796a1e90d264086e227a3ee47f978a2531cb5650338aaca3c71a6307fbbdda2eb71f24202ea1ccc3362dd4b4737a0e0c96bc7383ba2b95b822ae5b86e28c6698e729e4f4253bf44856421a3b1a4f1f9f9c8aff9bd97296a935e98528ee089737330e7aeda57d135f5c8d6e47b7acc1260b67113f9f5a582485e9150f6bc266fdc223325677d56c91af186e466ff70d4e54cb2efe48e66bdb47a24560b3c6a90e04a510c84cc9b8cce199d3614737c49949422974c9506279a4c1dc6b44da5449751ce6f866e980b0ff0b9602382e6674ac406740169def70fa773b5cba983e08f39b43967eea1628496aee25cea9c7cfe23d046ca6ce4915ef1251542812d843e75b807be71a9efe1711d39063cf6b8fd655a5a9f38ce091bfacb247251603ea9221bf15dda027f9508d883b1d393e71d93d9b8578a488c96cbb59552867508fda73a678d8fdced2d6ab09a7b8212bf0141db5002177b7c13da64db88e343cc7162002a17aad810928a5f26bdb4c5daeca736ccaf2b20e478f2e5eb3bc302f5e6860faa198347c0f1e57732741c999659f554a7ce7a4ffe5b14f4b5aab9d6a0f8e190ae9f1413f66b94524239879cf3109348da3b83976d28e9c33265e0771d190f56b1cb9cc6dfb4b46ace4055c36148a746f5f306fb1adff277b667b84da3f44b0098b39262ba191988bc3fa45b77f3a89d0e218e11eeb1bcdebb74a0875eff25feb86b2417b82baf922524314d82e6e7103909ceef143392a686a31aa2590fc3255cae99255d024e6ab27543c2ce96ee7356426c7216f357ee2adc6d6f11e6ac25727b413bdd2abf9aebaa47f231e6a7aa716dbd9eb3f42b25331094752a4264351150972496981f4cb0bb5506687702639ecfaddfe29c16e8050b2cf121b55bdae17bce5a789251233cfbd8d544d8251736fa08f74e8b1f3a46aa6e4fc60522cb666d857e78b13d3932f22c2353049b71282699b20e972e2927e5adbd0d470d00cc9f5179710584583859ae139e0dc3b0e8cf03dd0cd3ca29a8d3af76c6b5cf481ac7a36fad5d58f4e81d85405f121855d27aaf74e69c42d5cdcf90bf6a0bbfe3c57c8d9cc7e2dd965610cba84d654493d0def978750f879b7cbc7269d1a6cfdf096f8aef62896dc70e1c088b4387338db415fb84d5d5e5997e179fe17940a6bea320fbb77bdfa72902c2219bcbfa75baa04c3f45ba2a488a247b4d00952d9cbea9f5139f7c89fdfa6e8600942687fda1865d32efd545e01991776f6de05ed56f95d6fe1327e3966774b58bb37dd60ab74a4c7c4bf417cea2943547261a21aac83ff6734875146bb71095af62f8be5f274edd0ca763d366ad3b84818a296cb23f6d3bb5b239bc53b39a6c9c08bc85781cfa5f615c12f938e81ca3bd02f528662355018385c584a8bd0def6e428394e984c12cc2a14720fc9adab3e8c9a7490c7a263411d1e900d8da042fc4a1ee997b7bc552fe7ee973cc70cb7629e540a1740fc5f321386eda4f670425da2c44b853f42e52cd61eebf5ca507450d188f22af1211a0abeb661ba0b82be6212297d1924275f42636baf1716bc7238547a4f3e1f8957ec8e565e20382ae39fb0c39b14fd091c07b011123bdc2933e3886a87b0aede60500375be0822302be32910dffe024f9b1b0700be43307ac683068cb51c4db199d84b77f0f8b13959395d05d456bada1ca4c9af37e6b3e6f128a3b4362b73f518c4b98f32e53aac583edc547d560c564cd49c7de5f05593ad069a25970114c9dafcc8168436259df2c26c1b1a2b6ad19ba0ea2ac3b0885dab9aac20b2edfb3fa4d6572338a3bcca447e8c75f804ad47bfe6ea9ad613be7b2254689f1262f3c8861207d04b55ed644990b76dd7fc5b483aab5c24c02db9a903aad5b3295809e8613ebcdf9a20d552bebecffa3c8e90ff29d582c2883949cf383a9116e68e8386d6073b7bf72a137920bf6925e6b3092883683fe5a4f573e9374927cf3d81d25c2a582f8be00c4ff63e9cfe9fbc0fc8562e367d98f21e4456ad0f79358d43d5e498769fb8ebbe2839ac640a5d898fa65e371e8dffa77d1550b73ab1ba29001d281fa4c9e770658a17ed0a439284074adeada887a90279e87de73ce71fa661bb746cac352e9cdc0b28ed5d226d4ec51ea28e988674f7213e1d3fffcf67666f3a52aa38c70618e801ceb6a18747f50eab95154927ed94f1b720dd9db690a7b9912733a65c2c0af444f8fb62b825b9df8c5219aec56245a2667bcb807c2d84dbd4ea3ea9d6165e89559849f8ef779130af43eb6accc9a8c76f16016be5f762808c69d76ab5bd2e67b4dd5f57f167cee3759af3fc86f94526da1b9b386f14ea0fc6507bfbfb09118df2bcd4aa04e785f5e43139d46001f35ba446a8f05292e88a91283721142cdd7c71fa99da78b94453c5400d568dd17d8350e48fb7286941dfbd5c232a117c2c86d7baf03b2ccf1ee3a758598dca4b54e84b1d93009ae699bbbc3696f7c65bd42ea5ea826d710632f1837ef3840f787aa1f39a04a14760e4a6e6b38bc6e2561f0049d0d2d4512b4432fded0c5ebba2dafd3fb8171a206d301ee54603e1e3a4d6a74e8174c5639931d850db95315c285ffa4f9afe5f68c86cff973f32be32a69d41e72eac44eaa5b1c732d423053dea22eadd47f29c9d52ec6e855cf8854c9e6ec64266c318e52e37f3284a820bcbb674b472b0f9cd17c4041956ec5f051684739a22ea99accab84eb18a7beb2a75060df9c4eb1d31efe36ee15d2b08204188c346c519efbefa94265efc3193bd5dc9b3c8120c835836e30cb72006e99c761bc2011acced8a9db537456424879292bd7e0a729fb2e48b72514db48d2ac95a91e039616dc7e962b858fb5280b92554e8d0b77eeb66659b1ca66418268d4115c80c6327ac582b43df173fdd1c3271619cd21cf7196d2ef3d3471b8dfeeb31eb00580b874d27be8bc3c50351b7d0afb05afdb8630e635f1b2c211190a25ef8bd3b6e285b0ca69fb3bb08e0821a4bc4b60b6bba4724943bc562df5f2d686dedbb9fa93285f09eed168f087ab0179754dc82e16d88f3432c91b7f0932e3ed992fbac81b2cafe5ec10c3ecdefdd8d0dadc0aac7438d368997040a3453f4fe0a04e163dba5c4e0b60943b8ffe81307884ded4e0c83e761123cbc3c56370a1b0b2b0c859a88f0d5a1493e23fc239cbb7d1e4b03b2b0909295d4002c4d63238afc7cde83308ecec26bcb4883e346c97b70dc1313538f211857d07c8c3764b4672826a6192d32e829395916e7796217dae2ff0c3922ba2aac5234e039a7555fff110ec6dab314e9f102dc259a6e3a54f05b40476eb19d6cae71b5a5e30a5d41fc92b26aa9eaf32e4fb65c5dc292046fe6cf08aaf1f8012e0cc03385531267144b882e451311648e6e2b9596669ae8a73af9a74f5b87ca8362592a5bb08c8a08442b7589a14011b58d6034fcacbf55aa5f249e9203b5f524a06ac3bc1d2bffb6e1a572d4b9529fda6dd3c5fb72eeb6dc23c0679df4359a89468a36f59db2fc8104187850b863f692bca326cba7a307944b21f695aacba7d598a24970e9276ccf23cf4ee02953e29ee2fb2f9f2086e03dce7ffa6678a4a397cdb1b48aefadd677a027ef7f57f871a91a1d670eb91eb0beebe3b49b5f1b6a70b216d528de7abb45e96a28cb5c2100fc1af33b4b5a8dd11e4e4f2760d6f7f04ce8998c8e5eb8b0d09e6db11d66f9ce2fbca7b19711639fa823fa8439d07a6a530ec05512acc75564f64448c1208b19a5f7158f266c78bce62e403799ce90e69e4f9977576afa971d10131b7a88f238cad8c7b8dbd8ac8df8ee87051e44d267238145b8b15f4e79be3d81b8394394dfbb7c712469264d6c590145c1e451a20415b43e497f87f08541705f74fabe703d375a54467845d8a31e62d46f8305424e3edeb70bc4e3021ccb7f3bb63cddf2439f10b4abc4c31d0a877fd58477451c49c5527f5b0ddaf4edff377ae3254a8c52cad666c397de3d6423a01875d4662e455c0be6ac51abf7c32371c8260e6d8212a7374db0a8868fe45b01181b497525954dfa40eec9f95b6701c7d47379593130c950c0cdb9640535b46e24bc52ad24c1c8c781f96b2059add0f4038a9bfb7147b6060da197e64e5152cb2058314f70fd579c040e0d7abf300420a01ece04490d6dce497b56835a17f5c529d1e2400a252cc6a08c4ad8e02a97f564e4c4778927dca6ff1518e5a4c55e008c8059818cd70ba54cdfcea0808e3c9856220f47e498f70858359923f8fc4260beb24163db24b3d1447a981b0a8f1589e98ce4d97b8d8213488909b355c7a4e27f1b37a223b544cac088ca180508a83d403504b7a099de4e4a8d8d0722fc9654b5c622740d4e3287933a12faedd90053a2f263e3dc9e5fc486139ee08f436094d4bc1ab401a8a1b0c17d39b3573283f5df765b8151ff38e91313ebe14e29b027b115af7ead5766edd6b8b62220c80cc45ce6cadfae2560ee38145a204a96431daea12b7119587cba03ba48d414c15ec915f84761849c5ab26253ec4a6038ecd03e8f2dcc7d96059b2d5403000524ed092c1c84ec68afb72673b397b927c3919314529cd26868eb514543bee69cf8da706b063d887060c4d3588f90cd36b68b8aa0722efe6184cd7b3730c6d9a49572141191bc29f7cf71d776100489e7d86e642ce8b3d1db0e483c786d4bcd65c9b623345e2c28d9f932628c81f773468ada1056349fcfeac4a44fa476d1fc3f2e0e3701555084794bc4f4f16d2ce345ebe919d4c2b4c878fae93f402c3bde200bf63dfc56dc44879e5b52f05fd3b05d2b45d5e84844c05cc18d84efe2c42d993532bf3ed68219ab2648a7a388b234b1a4cbe2d67b909d145e0d44520e5aefac98e7808e0866cb4f0899cd365697042e4751e7030d0289d4732ec59e0f8ea89009908c59fad14a851916a4ad0d471a8cefff6afd02fb7bbdc21a817ef70cae761e1bad265e1785726f28c815309f3a02a5cf22337f335c825334e5f034ecb349f6318a3d52f2a4214176dfae7dcd19aba386c20a35b6889d0388eeb5624e5eb14efbb6040576a1c4b192149adaa0058711d062e3a2e06231a84db3ef44bee131be0a34eeff14b9f0e788ca9bb5cb464d3b36ab2bd23b17a745ec5d6a4ec3c8af5810ee3894be2065b69070f4018729704083e33f47864e4ecd07d51fadfca4adb6b42b9435f18128e8736283c4c6b6f369c71ceae24ad355281281f443f13cc1ac66af2faa6150864883b4ccaf24aae6263d8a73910b3595836eca37bf6de4c6b4adb2538db22ecfde82fb7d2f702c6e42d1247f37e7641d9d904008b742ff8b818c90190722559e7645e354b315700f333de8066b14afbbbd1e0027052cd8019259235896e4cd88abff9cea6b91c6e31f8b8e7517e74ad9ce9d63c0382dab183696ba07e94e50de21c9e2ad6cdf71e349f01869d8252dd7550e1df9f3b19be6776c63377b3f79bdbedec5c438b236ba74805127bd3c797a2ae7e53a16785dbcee45b87a0cd14e57c5df83c7e56ae3212a4ed5e6d52471da0dd031a03bffcc14582c6e959b215c6ca1d9c9efc1bc068638b24556e91a226f412440bef68c1b1d5301a5cb4e0e39796cfadb7052c15b760a033e67ae3e81010c91b5092604347917e0f30dbf558c0d44f7857d4721f761ce6f7d6197d126738b252645acc51d0bcab07706864a28103d821cf2cb75bb3d1b0929ae9d112f5553926a251e2db211e3d5aa8cad15d7135b6d07d5c931752613610002750a4e3275f147fe9959687687066c904256d1081b45a07bb6873ad90a90703ccfa546714a7cdbca93d1e890ab876b1aeb877e473e497a9b94aab7cc989602e7b141b7c23c33c85e2bff465c9714728659ea91106a16d781bea612ac64965b5dc028fb8164346bfb145ae9cfee343d8c5ad37b5f77d52f1eb81f704c881725104e6b508392ab2abfb5bc316595a65dc50a8d54501bba6b1cd56e6e48ad689b4c862ce2f140bcaaafb08ee3998f954aec29795ec5d887c78d04da9ab5720fb0f17fb30e0718ba6fddc40bc044727a46b9cee9d8afa86a9df188799cac9eb00aefa7f84e04276f516dd3c569447e15d78804fbffd9119316bfeea423932c2da7e414d4cb6be9c33a8acb880542412c9c446f573b76e96d61a0d8591aab19b49dd946061d6a4712568cafcf837eb0fcfd9fb0237746e81d7f0fac410f390f0a2437b2f3e6c86e6ec0567b41033c895e1d0cd17bbfe704964fc7c1ca5824ee913c49e763d497e5de7f24c0b87991d17c7cb52ffdc0f5de2b2ff4f42f3bc9c4089932ff4ebca478dc8e948c147498d0b5516e61bddfedfa6d5247845890ac09763660bbd98ac4fb9738c4ec604cdd1ab7a2bd4cc40aa36ca2b0b0fea7220a777afeabeb2719fb03989e0593783a69a18e9f3a2e4f4b064697b5d5b687d96a6422215b4586a1d8ee48e6cfc8d05fbb8e64833c77af2c6efa6729a947bf122a853518630c7681a597fa6be50ad50ec6f468c382e8e96618485bde3bfed0e4f77783cbe79c89bc3e485201520e502016cd37c22510596b5f603af5c962a3386c793ecaf0526849772d8632a09852044ba7923de98d660e0e1f0df2a3597e1d74a9d925b307fb2fab0b270b35566b8063fa0c45513fb0d7bc6d6a330fb994c997bf646e117bc05ce34ac80d476bb115e9046b7bf14b4d62528442de7c6dafaa18022e537192cea18fd18e50fc77a5f23381fb3af51d39638848b08aacc1db5614fcefcd3fe20496f9b1b68297225c7b2f3f5c8f2ffb2b81d548827a4d3df4027ca4a3100a471366b46e6b63a3335ca223345fdf99b2c74f846c1e720e12f1426f2f439b2e8940574573469d71b6eec8cb711f40140227ec0dd037621afe5cdb410ab638f4e6d5304f69ed8087f5846e3f49cc3b0bd61164eb9b1e82631d4bd1c60c4a6e51cb4a86345cafaf5fc7e35f6534316e43391d363bed738c60849f35144e93f77367274480794df6f92cb8f6aea8a7f01135370fa43d3414e90bbaa163173bbd342fcd36f626eaeea572bb7d03218d1b9ff39ac40568de47d14e146e975fcb858f7fa26e07af332f4d0b674027a2535105f2810b2667731a0fe1023fd37fafca88dd00da02ed3eb73cda7ec2985d76e9b711339c442d5d38857bbe8c1b9656f1a4b119c9b2d299bc2f14ff115ab713b08324054c8377032e317ffe8610c3e82f7bf59fc1ed96f01617baa6dbd14d3406da84db6ee859eb5bb8b27e24a4c5ed33a1ecb32c694ddaa09f5851c080b17b74cbb629fd6699cbe7e27a4e2454b744e375ba6b81dd4861ed33bcb1420d6d347449e73a44aa220588497b30cbb72fb7a91b2d55e41fb522af9a08a0316d59aa60195580f998c477599a04113556556954f8e49645fec230ef97fe2ec3721d6bc14426fe5831ce954d852d71ba2c8893c1594176910572373fa52779ca3bcd9028f690db082f65502f5c6b4e08feb599811a63c428bd4950b63c792e3e7dcc44df4bef40c20808f149c277d785fc5dbef761494f9f1b876081c49c13db3a4acdd65bd1ecfb546d0efd55d06a351872d61edb9722ac7cb8d13894d4a743ca108228c603ef7d054a2957aa08d2a4c1edf204885871405a93af5969e864994667ae91e5007163ce43acc51655a0cbd2d982c9382d4c61330acc4ea6f289737162688913795cc7794092009176ffec9b2a2d2971d4029ece94160480b03b5ce9142c67c4b85a2e89decad5ecef1033cc90085f4f997588925e2dddd5b8593573238bc2ec9939f454731dcc312ed74d37521b84ecb9bd8a27ce962952b0f4f0e0ad4ee9cb6649562951af35ac0814d09082c62db43cd23406bbee15aa24aa1be7ae7161ea75d48860cfbb4001e1a82580a83903bc95765f9ab37875f06ef033504b490514b560326e211afa5a6323b11980581b7ae4b37221964346c0d4bfb626cb9dd95b3193853227cc7701c224e8783acee27d1b91147fce897e93c6b6a0b4407a107ede18b20eb5e68b04cf823c5c3d798cae260a7e12d6f555a8857454aaf19e31a20fbc049ad98b1eb3304c15da591efa2d02180a3336fceef32d5ef0dc6fe138b64cf2057f31b5a798554fca7d47fce4629d85c9b1dd77d4467c81ff67b44819d8b8764536e57d687a682e3ac53cf1a688d346220e755a4891b34527b7f55cd6790907c1a243f6845095ae26fcf6fb7bcd7297817e3352a5f52ef29ffa05a09b4689ad4b1fabff62d0e4f3c2d6941db56a94441ed40464e425d3580ffadd7be264002f2a360b91815270370ca8e4ef63f33772775bf056c5525efa44752e7adb74988fbceb9c3a6f7d66cbc5d93f1f3596019f2a724dd854ea04d42804efa53826ca6da1bb3c5b5ff5f38eca463c17709762bed58264fc1f798f8b158db5090e37f62be8ac9c5ba2b62655c1808df5e15fcddbc7c34a79ee88dfcebe83f7dc0e6b88bdeccc45c4bacb500298bf196c2e2151e5d69395bccb4b83a64bfed747abb42a7357ebdb92e013f098f650106c18fc21ec68840df0b3095620ebd1b37b2b3d9add803586407a68759483157a2585a939035c54723747a7af55a5b28e7984a9249f7b3b6645273de4c18cebeff59d0ecc76e14e470d69177ae92812c9e499076ff7db89c2b433b5fa35b121eda2468973c946895131b2fdb81945d266bc69830355bfafe1b91821bb9ca03e93c0b31e44e8686bec5d9367be726708026c2d2f904a7e1ea34adbe46fd1e4a1ae263d7c6201ab0dc0307ff361aa5c5ce59edc120ef98608739cddb66d04850768af0695f916f9bfc90aa126a972df1eb5f3af1511b0fed46a229a6e874e9d30f2ccba51daab7c92a36d87b56b0634bd99135cf49be1c6a77e443108bb652d4a46869425b0ebe63c0ec5fb9277fefff80bf4a6e6a928d57f770e307684880fe8684632eb50b2d7b748115c50f90acdcfe2926bb05df68b70b39ff2b74eb16dd511afd3cbd8518c66c4bcbbd9317c4de91f3130c07e3a98c22e525087051fdae359f34f2431f41804776767fe9ba3a080c7d695d2e4481a88cc157fea8675ee12f994b0ae40d946a2785bd85248efa6a9e3562b11e4f097470abd12d414e7f3485673c64df217a2c7705b9389bf38ea22b0291c2b8e5f810a6be41a2f184faa361f420d71c1f027860a3660ac4497e37a2553078a5f0c3011992c08e9ff93fca25fecbd3f88ffa7a952377788a1c37c7131408cfacc1eb8a3822bde7e3d6ceae0750db346dd1d38f5fbc3bbf3cc93182c2652a95bdfe09064be2a6a10c259b284a2a8bbcd93fc75cde353e21d58232008fcc7ad91ada9dc52df3a5c3242be912010a0d6144e8156343bf9684f01efc142181e628499d6cc7a8ad8d07b40275808121b374060d7cb963effdbda79cd4c7c6ac59ebf1a7fc6db485ec8c97dab07c9bf64fb8498b6d42d9a86297bda6fe7eeab6968c69e8ebe4a2f3663e8e6b5c758a97ae0c47180bf7c6fcb4548110bac25e004b8fa52f274af80eea0bd3ef7b1fbd9dbc723d339df0e807a45e544fe279044747fca9a3a0af959e8015ecc2ec44a2634c0e4c1447a45e63bdd400e083b5061e4b56e0b26e3dcb7c206b7e481afb7333536c433daa945cf83f1bd685ab1a62197b458ca63a919822657ccfe213cb0553e0fe568f695b379e0f4574497129cb9ad6bfbe2917a3f9f25dfca54ccef60ed4a4f3c9a7558d0899a73605415811ce886936572cfdee7896d0df93cfe77a47ae74369d1487f252e6e49bd4648e2a7746c881802a6f647762e1d89a061b683eba70892c12aa190182796933d2b4b41c945c1ca2390cc628db2ab45c5911fbb74840b190a4b6f0b1adbb12993bff9627a8c4078cde5d7e1480ea704e802a465130de03aed14407b9ba8dc8fd5d03cf309ff0170d8e8784c9ff2757c970b3d49ad335ef22eef933362e1b440bc6b9acba277a59b3bcd3cf53a03565d7ed8e3eee2ecaf956d6ec8ae9b08e13051ef6edc5b25ac84d2a3a8d45d917785accfb90f61ea3c1499912be2ea27a0943f1653838a89a3feff2de9d257369b2bda124c28442ba10146233e7090499768caa008fd7218c3ce7fc42c5d8e7c6b2fde89cfe5ba566d96620c1b0e4647449c6eea4c1682830376cd6622d965567c91febe706a5f707334e4e3051448fce0e5e42b35141ccc5507bb7120de4437cfbd8264814f54d2f5351a8205698d71a12c8acb0c651426917cfecfaccff818c92d3f0a03941cd8d27da7d385ce2bfbb87ee28e0a8794fc24bbac45eaebfa682ec06c4a6024b2052836928979b2f9c9b70366b874678fd7793a82ee5cf9dad747ef7798893a59ae9b13d6dda142e41ab9fd2452bf8de24542066c712039a16045ee3f10577281a2223a13d078481d03b90e2dd69f4e6552a25dd97446c40378e829c510699ff4af867cef4ecfe6ed32ab5c86435e2604ad5d8b0094529ce92ca900ac26a6caef57e3e4bf6f2ec859eef4dfe194050ff844bb2bedf2763f7fa2ac6df2019fe88c38969e3661deaef30c8bb70c8acb9f5f65b4288c209b930c2e39bb3d8db6b91f304acd88bb3788c82f6d547c3d39074303c50c7bb01028e14f18b108e0eea5ec4af3fa67a8e26f66d0e8b33f57ffe65e20ae9f7adb8f417ae0467a0e5ad33ae366d20eeb8e1ffc574abac96640aa0dd6ed445a75882d82b1c90f26fd57e474dfaf48a3daf3c4ee2070e923385fa8a0f8b953b50837f8f857b297a50b52f423c14cb7cfdde0f242148c068948d25df5de47a390f75e121f9a9e3561c6d84dba3abf897922d58903b9599127fa8c4164a16d555aa6e9e46d01dc81f5855f68a7542f437dfdf0fe010ebf0ad127e2483b0d0531a4a4d60a17a26d6eaa72ab5c9d36f7aaf3ce64406a32e984eced88feda86255707099e1780e66c401e7aca1e75f134f3b71fc73ccb774bff60b33039166881711637acb8fe41ac69bf8cf46bdf7b2ffca5a5ff1bea7303b9b8430207e3235476ec788639a6d1dedde178e67e5e2dec7fe7f4bfc77f0ef7aa9e25924579f3d1b92c42f5e876393d9772057e0d0f2e30742a5c22865a1e2e710951b3628b3c2948f1c1acb2df8ba2be6f23a75ed5a7db37f746dd6d61f9ab0fe9cca46bae57f64da17f16c900e526335c8e71234e45313ca3ba07df4a1c3cae26db59e5dd97ea790eeadd6e5fcd1eef977ebf4243259801aeaba5de817a34af24236c56035249e6fe69a5b7ec64e786ab36989f92b2c16c52846fc8af0f108d58b5322caaffaaf242d37d2c2e54773a7dc551061b6e1eef38a6dc8cafaf1e3f9dc8db09dc17a08a223871cf1cc9d749a97d4842a578ad70015b02d354cb46a2ba91508abf3149cf0b0ddf389cb145957b415dbc85c0d14c83e4ce89c5886339d81db406b970c3b5ecfe13f833c1516142fdf8640a12443f470463bfb80e1a6337801edcc1ef2b46a487dfe318b6c5057cbc0cb67b39c533a7e54f2b305d1e0029cb3880b01c4e5dde1c1c145304aa26be677aca9e60f5614227fd1c3bf0f2564c6b7e933fdcbee8716294ba14096a1c4164fd47b8622814d34ec7278dc1f667d1e991882affd97ceedf46e35d06e86d6f55ae19ea62f919f396cb8d0e5af9ce5dce033a9dbccacf2c31f3234994cc016b8859500a744f0f8e7319ca59b85268cd395cbf8e4ee0cf51d141092d3a4e533ab761c53346748fc77cbcd3b1b314b2064a89435f43e12a1c0d6b5545c9f0d79c9790ec76e35e7477b963155d74e4a98c46230579b5518067c575ba09baa4ba760e037a8a10d3519c9732d4a595c869bf5653484a240deaea04fd8fc6bbc6bb0432762866a3fb8f82df5766fda3093d37846f480bddc2b691dba87d86422571b7818c01c9afb79a4990f7e4037eef4c594b286647150a5a602de9aaafe0f3924433731f5d6d289025690f9ab49c325e7045d3ad13d4f6a35d0b18d6b36cc93369c162a336de41a66b5b41372ecf00e85b0e0d31c4b0cf0de856ede5f6e5d74b79ff50a8b59a2a6c161d26e37bed197807aa90fadd273f050518dc1cd74aa268490383aa9a0e4163e0090e7a6b7f22f9f815464e991eb785d8127dfb209709c9df4136d0caa9651652022168cd48929224fda3845105fc5873f09c740cf7181b9f07236d589408343de7bb2ad7cd2916351d786d20d488642253bfb1a4421e219a1f38df403b7826c5594b6a6c3b20ee7c370a89668af82ceed2067d151d399b61485934cdc40562eeee9d9a37dfcf428a227f2f3ceb725dc247b97a67a85eaa4f3ddfebf3f4e8470df9c8bfc288c6b2384cf68c8ce6fcfd75d4957af8365539a5a4e0c449d383463d20e404f245b920b897a21a0800dd92691ebc76cd25d63336b962acdc65afaa686987d49e110d2d9d6c4f1c39c1e056510d81d7ce46fed3396cf146f0d6f53698dfacda95f8bdf32338da0239ec1dadc930a49d72dee61f42512a147ce8cf18c8618e88b5e7b727eee3d331485f0387dcbfd8953cbc089382ba1f88697d14f9a02ff576c1864a3ed2a2f6c26afbb618fbc1f0e70385960a932f1f7f4274bc3d4f29b1b28516927c0bbf0b487f36bf2c8fae189f1ea2fd0b146d566a3a9fd0b57ce6fa4cd369deb6b1696aef8ab2d99326329f25509f56da74b463bb0ec5a1d126388c32cedc846b16bffbdd82a7b2a386701e67c74775619ca80228febdbf84f820195c04b772e3d6b93cff587fa3d0be3e152656de86a37e40fa3d6cc77e6a472760dc4c4cc8bfa9c36ef5fd79cff94c6ef6916a388c412007a3e32d11522094e6faf70f2c7ffaecef50f6aeca0e3ed079cf618cea079f3e0c42be7ba8f2c8a3cf95313081c048d26d0c992ba9cda9d4c95c5358c9598b9eae0000219dacc4dfef877d3e722c375998765a373bfebd3f879cf736c85b4efa747bcd0b477599bfbe7e643385051bbc93f653267cf99e56e7c05b5a347285bc4fcc23afe5b19e113d9f4f51c5b28da956fae06b8d55f35cf91284085005446973589c3114a8264720bedac09a16c3d56c291a881ef9e24853c0fed1baba3bf2bd371676a3bd2095e0467fd97466b11aebdfff6bd2418bb93b0f25ee6ddfa5f2761c9abbd0a041af57a86d603127ade435d89719d535336ed69544ae445b008e2550e3260850bf0d9487b7188667ce25e2000053b2b00df8c571733dfea395911a3b0436d5bdbbe5ac020c0c2faf62590f233de50bf65ca38257344d2010525aa52eb88494e96da6f9acb23e468cd4412fdc80697a4bba6728dd3b648fa628cf4aa4fa5e08256ad1b6db4fe7d53464e8757ed4ecdc909bdb0e1d5641dac5c3128695c1242a5c50d4f518497d01855a76031bf39db6e403b45d3115a17a80b133a7abd5fd84c102b11efd4ad1b0410ae078fd98c7c25fd19847a6949dc1306cacc0a9f1d9752d1fba351b835f05c6172876bbe79cebdba5d264119650b082aebfa0a94af34f486b43124497366b20da3caf701f0a04583e281afdf907e77172b4f7465b16eb96b3bca36e560db5a8697652e58429025a1ccd1f74ff2e80250fcd335459e9d805479212b355aeb1435676ab3a09214d27e33249d28d3ceb40477fd9a129617b4ab339d58d93c2889aac3a89b4772167e94d522d5f49ccd08817afa4a3e0416d948e7588f11d5817b90bd4087e30e3834a0915448cfb898a5aebe76b8841606895aaa44f71ddd1be85e11258e86991993e444ba0a890f74a0be43221bfed590f1feaa2499af5a81f0baa63cce8da9021b91ccbca588b7abbbe88ec65786b792c2bc93ec651280f35c76ba0fef45c5b5ee861e6f62775a2e56ff56912d76632615d153a5272149997548df56d8a0801f6340a427c59d92f7e216a34f98f445b2312ef0de7c3a7f71baf2bc23a5c6848fefaacaf0fb9409c0ab0d072b76a40318ae4cd370ebd29c0097e7c1392a1aca068329e245da9d58badc68779e8309b1085de7d8a718601571e4c70fa73e3729df7eaa28b4394e76ea7f3351b65f5f2876ce3cabf9d6feb040085a5ba5edf07494639cecccac80f1897056d068a480c8e547a2c4a730ed9d8c3d1a1c38592826893003a1c6c0a46deae5f16118dee5073f087149d7f485beb6a6eb2cf1d138d57206efd682cfc8c2b7666c0dc4563e82ae533dd01919183399f381ab003bb7d0640da496524200a84d9f0e35c648164807cbd9a7cf4e7f0ecf31438ef914e9311927f00bc261b8467eeba60844ae918d48d0a09012186e8a976db76298d17cf9401e58718cd076ee8d14a0ef9282cbd15d409daecd8a5d45b7aabbae987139e84d5d1293cd7508473e95be29d6287a47bd747e3173fc89538d487240c3a7957dd305c94420bcaebce5daba67b0d7c5cd34266804392801c1ae3f9f33e136167ff63840100f2d903480281c59c41c98c24eb078a6adc2f6fef4efc02ebd8817107c8af2b0bb1370f7b1ba993260d2629817e2db2529059058da008b81fc1c85671fecd0d439ec2fde16e8d78bcb6f16ef4e6ba95bf58ac475cf5d9a4587117bcb1d3d5c26ea022a5e718041e8c333792c095f6105d70821fbe259aff9b906fb78ecfea6be0f1063b3195a7247b12d0be2fdca463522af138d7c47795b92dce6392883b83bd6a3acf5b360847b13cdc578fea8d1bb34ded7ce664e484cb783b1eae6543d2a09c44bcc34630f37f8a7cd2b9c0e1b17c9c0a6e2474dd4944236db64fb45086c563459e0c9ceab4ed92c71e169c00d2e49ac2f4315006db412c925fd9291ee2f70d5e6192c5ee2e8536241300ac97dd4f0dbec2f7960f5508c1600829db7f96398196dd70348677790143190be886c1f02895b3c0bd984e66ec8eb538830aa5abdc2e4b9f23f37d2289d40cd42e446b4d23737b6336a93c3ffbb6d34f058267cb68136445950b8d4fe1998850680fafd8e7c830f0d87a75be781826e57f5bc6154aab56063962bd7794563fa9c575043a69ef194d4c0e7ecc8877492f2554637e74cd96ea36ceae2f40a2b18702118dfccd48b8bdc78e1c3f6940d5d89a6f652a0a874d6a94cd4bd0ccb6be0ae42a519a1943320faf4c934bf3ab5ee2aa40eaf5e831720e3691b717965b12e0a2f793f7dbcb98e9c1ef9aa250c2175238f1b8fd803054061f1e1be54c9609b4ccc1c8a9b8bc21f39b906bb754ca668ce3df43c819c8f410ac6253da6cb6233b68a820889eaf7c4e15fd0f3274150f080c36bc0dcf00a101180e6ddc3669381de775365e9ca447c7c70f79691157ec19573fdff24eae6c5f44c8f9ce9833ab2db1d5e6c62fddb3391c9f553d4743e9fa008ee9a97ba9f079d8299adae19c7e1e538693209ce1b638c6de8ac876f7fbbf0202ac389288aae4ef1a5481347078b9ca2c1d1c733c1764abf57fce9aabe5904731f43ed5303d5bf2ed9661e6ea417665ed89ce93157f4a16fc692c1e0310be75166425b313cba6b4abec4e88cdaea1453e8bef210d59edc3478dc7c2a7aff40119ebef2b4d0d1e7592862fed7ddd361a4f7d4f3a4e1a596e230bd5819e1cb1a7f0d6be8a94cf29cf5d24a7f0230b7fbfde9c6b7a9a139e503c1b3aaf718f4b2ba0d969e2c1bd409f38d997282d11d2553deb0805d1015fef53828e941c73da6899a21a7f0ec07687a1fab1b2a65937aa2664429f1a5fc7aca23c2a40406bfd6dfcdf23e24d1493f507c0ced736ab848d2a38b54c7b6a8b984079d452b265e1a57419954ec344d01eb4dc0510bb782679ba65aff0891d3c6836879cb56d16e9d1351030df3737bc4e21d1b234eb347bfc446025440d8871f2c5ba6bcd05a328d3cb6564e5a3e9abaf76dead4b8ebc2edd840076883955ec9354c8c7f34b01d2515c83cd58a4671199069cb5821e8e3b16d7621956a2a8e6d9414468abb6d18f08daa589b37880615e94e629885cd0e7dde8b3c3ddf2d7a903e7c75d8c3365930f6b88f5e7103a1fa36b090198774f65b9cf97a63040fa26b64cbdae368090c19af75e3f2de61eec8a7019c3ad4e000ee27a00b9481b447a6d2fd205c19b5c67a9461a6bb86e49110c34f1acc6ff60d4bd9d6ffd0e511bf6031d7d6c045a8cf67c722305c73e7cb532048887f09a0c7bb44d3ef6a3d5ad6a1bb90eaf06b65ed3d08ae79c9c799800505788894de541574f38765e1b4830512261f41429e262ef5b3df93eef23246c87aa93b290ce761f058a503a2dbc259ee61820920f70318d1c0c2c3121e5f5c7aca4a3af6fdb25963763efa1482a52c09611d109ef24bbd3bd7932bb40d1ef172103517670a1c7f18e1c5c17b36d45a00a4c5e1e135fe0d2292c338e3d4f174276852d79d086cbe348f102d18496a4ff665d91dd4a1d09b4d19b0ea8be62c21abb6c78e2bb8f7e29ceb82be8272ffddf6d6cf86083f532b5476e4814cb132523cfe498ea7af0dd40f221e8b672fac1db3d221652f0e4e8f888b2b87f27e6c1b95654290e431de35565f55887af84f1507465150fb1de72672d5222b12c11aec8683a1db2e4e6d25d29f3ccc4df10aff5939756bbf1a73fe63b1b2ca0c7a38df77e97d7024e5cb20dc5803167ec9437ac8de4a34bae4a0e1fe93addeb3ed6fc3b3ca2d911cf081b7487463def6b3e97ea77591124a734df7a1cb2798973826d96a908c9071ed85b761d88e6be4d7a6d739dedd205fe278ecbd65e71076bdfd5caa5aab2b8c84222e926e2cb90473d662cf7a89c8ad164092246f80fe44fc90e15b033ace54720bd57f3f60f5fb019aa58dc13037444f0cebfa54475ec782124aad40819cf58135cec8bdf617c1e31c01c41a795a178029a23a4cb3868a21b9366648605f8379ee0ced04fa64a8f9d6ced0ac7051c7f1db1c0d803e0a5eb3cde96509cd8d1f5a9738b12e0400af08156524efbff9d5862ca8510fdca77717b3a2a0b2b1750a83d5e47734dbb6f1cb0f388368ea126db58183f6b1940c4dd62a2415cd9133b6f9bb5737b0fc3b19b053c553c7954ba5c1b42f28b61d4490609d118fd2182dee86822ccbab4302043954acec2fa01f8f45d963718ef68230350fcca5360a6b5defc6753b661500612d43aa10b4f81d7be931b52166f3f0f6a1ef4402ffef3adaf559ad1040afd83873ada327431e6d9af134b0a05a3bd7a717675b660538b6a093201445a36d83f75e1e803de243407f7ba217ae0a39f427827547b8678c4b025617d75c00c2d8cd10ae683c7e48d8210eba004fbdf686d5dd66b967236683243e18765860253a58ee1bf0230d78bd88a54415aea9c07bffb7b79209c9ea8e3f5912275f66b1f3f640f1202be55ce6d59dba1b225ac7f3ecab0a145983278539b87aff0613b177fe38458a64febb251f28cf81fc72149c92b52cf3dea91220ba479555d094c22d3e2047a37fd0ac8a92830216c3086b610f6fd86a0aec3eebb77c112b3d039eb15e819fd9a9506b8e162972aca190b638ca0a38c757582d57d63dd980dbc5b59709bd3865a5cfee89ac5a420f97bf3633c6f818713e6faeb6e6896dfd37f1541b76e11dac06a9558beb8892a9b2b61f835c6cacb73170d41b488546c156384302ca682ab933f3768c87c9b81e56d425cbabdd548c966a2907600d92a02ba39276dbf1ab1c4fb4f7cbd5a0c2fdc32bfd58e92b116c8447d87ee1afdffef7568c600dd914b9cd1ef6457b0de9336eddfe5b1b77aef9b920d35b7d98cd6ebd5969f076baa5e4dcee3cad45b13003d395168c60d3e55f940ed4682c54cd1504e50c5f78fcf9dfd9a590f11776fd6515c911665d78b8e08997aafad895f7fa393a4ef0870e00b7dd400f17b6d241e44871651048a82d2f4225a235b87c0f34331228b184b56eca1cb85e965387ca65fda9869164e92ba9583768937bfd7496120130f366db2e15eb0a4f31c3d46272f625f257ae4baa96fac8d98025371bb4bef7a34efca363b14b6c790adbc41b640b791b6cff9c582b22c3b597fa9439554370511a917683c583f1f054e4b5477a5dbbecefe7b5a65c76f24c7c079f9d0660fbe6a41e94d7455191468d06fd0ca619dfe28eb1f0f4a1006e39c501c55bc7f780d6bf1fa572622e9d698e406b0a9ad5005914e1da8cbf8fad1f45852b5bd649b26b50e571178b5db66a2d3e9c2c0c3bf705aee7c048e49957de5439adfc8fdecbee1cec89c4cd5a38ef3d1dfa634ec948506abca717dc3c3cff714739c51713ab8eb1055cc5f253096ba6dee0fc19d2423a8caca46fcfb2547926a858d161a208c3e5fa6c917fe67614f91e178be437d7f492a5f43e3b5f3d40dc2ee1f19eda76ced737d95c38f24b58952de3f9ba9d7f11abd8754160ccb4982e34413f14f8c725c5a10fc0789a7bab45fa05767ac2d706b840d57f934a5f6998e2757dd71cd0cc9b5607edd301bedffc9cf1c8ab98bba205d61a33d80aaf703f541fb872e28ab02dea21489fd791e5f2a4143ffc680a80127024f2e248d5e604118b58f19f11f74392298920d09ced8b408ec5a60a89320fe9e101922bd59fde13eabecab14bf9cb746a9a2104647b4f79ae5ff460cf8b57ad21b89a5859b4260e2eb87f5254cf94d78ca29bb4c3f9b7511ebe7580fbb1422add3d9c3d23625c8f17c63da406925bc8670d6ebcb68e450a082de5b7ad96fa34447cb27b90abefc714eb038cd5fca80e1ce7d7d78cfec7e4c21ae5c7d1826151c07f703edd285b0457b8e940b4ce3fb6dd45a41a2c72aa040a549ce1cfd8f601e7083127b6000bc4efbb0bf9ecc426a90b78188a836649a0ce61b85883a173dbbcc12055f82eee8968ad7e856fd12cf02d033e615f4726229e46a3eae158d11b72597a347534b1f51454bc9358a601201c9e36701d516ea57d90258279fffce62dc1a860a79e8b7af406afa900403f0b0d09ad482afa216970930ea1a920ee2ce02990f122bc8359b5e8abc2382239f3a3e00747b3b4d61ea4107dc61b8dbd228d9bd29cfeb5b0883a2693f245e18038e4f6f66240c7cff56e040607402f4e002386357117b8dfe5c4d2e89dad883fdbc16573e524aff1170d630858538b61e44bb12f66370a740cccfa76f9866dd1cd3481944fbdafedcc11d1c37c20a769360dbbcca5d6585a0f5be533d1b330ae088fddeb5e907c7b8462dea4c6104c8e61dfaf6a0d53085fee3b34d98f6e6703ddd48e4654dab08e6509eccf93fe130dccd57097e6b836fbe3525bffee6d09fefaa2674fdf678aac394b950dbd8ce3642f70fb32ec1052cf7fcd1bbf9a7f06d3123adc234930f3b707fc428e89db206dae824275e86359cffa888c75337ec17f3f3a98c8a5a90f8cdae4d154e6cc6c4114fd333723bce8dd1ddcfb666fbd6ac089176f2fd11d8e78ab7b36be375bf8799336550236c1efecd8e9dccd787b281338c2e10197fed1846051729d0cdf0154b6e09783761f0efdadca167a5f77bb92140bc5098e8edd865dc85e4156068601abf78beaf195ed817c0f697bdca4408f77dd4677b56243af27b9c0347d7204eaa5bd8c7e038fe185c2b932d88e9fd94355e228edefa52aada3a2c7c70735012e3bf56c9190885f07d0b20f17bf1dbb3420cdf584977e71a9e1d6d731374be0dcb3a9f2963c8117a14ea11fd56bd8fd1f04d88a96b0a40cb439b87c0d1d9754f17fe23296e5a92ede3926feea74f6de01a05a6482184725535b0f0d4472a3190fe551e15f319df3d8bc70bb2e2d1feb2ce2218b0446e5d929c21aee6f9c715e95cb8bfc5986a28fc778d261614312926020c67a40de4456d9a50b32a1589215b41d51527781595f4a667f9158b13dd502b8645d189e9a9d007a8e594f54d8367d9a8b787fefcdf504fffd8a7a2eb17d8b4554e162ed8471edd5ac09ab221b3d844ea4628b4df799b632bb7deb95b4d24259279b84c61a3120cd6d3b345a739ea2f5b0525adefc2a173038792094b2515d2f05825d9b3ef199987ebf94f3f72a5b4dde22f3235c746224c42e34fee9e5b4f2847d7c3fe77c1c3be2226edf0ce910d466cbe2b3e825f437b48721ec998f6d8f4f2449510f0824cccff6ff192187d69250591e0c414efdece203ebbec7173ef41f7e5512d80103508e2a259c6ed08af35b83a3ac38a65211ba97446d595e6984d82f99da64a01b2c35382d439aa394222e2ba0d562dfbfece6daef444c30eb2051f4e6a083a1aed6515e3dec1e7512692161fa7e2b187fd66c688091207ee085e55fc2f29aab3f71ff1fcc274964368585b619a79a768670cf1f399e416ef1b8754dab6b101f13f77ff176e82609736695cc631425ced2ce36035a3fedb42887b5b038f829491d3618998f7bbc1b07e16f7c8b6349eb53dfc150927808fa50db8510450561e884fce4b8874a66ef2912dfb900e38db310143d6de326880f074a167b6d3c4f21fc0a6ef6e3bdfd075f058e2895dc6e9845638f06b50e2c422582544b400a2f18f0fad5a0ca7137116f445bf0045dd6402363074a530fd5a80883e8eeb314c612384ea4c4dcc7b7e546d1bdd6c0df4fb3538d03df9b4d03b0df444a1c0b3d7cc5bf6a4f65bed3a6cb6ef1f6f7ec0350557aee22b99bedf31eb07dc3e8bc924566e10d5448ee382d9a4229c4a0586bde4606a9f9ba40d7bce03b4c4ee9b5eb2ab00924ac9fe9550ea79133d38e7654af075936a3ceb471d5efcadd51e9fb5112a8c5a115093d3c32a6e48c65e7dff44305f9e79dc6e2b483d136880290ef2b05cdc924b43a580b3e246cb8c649a9990365e414067ec817dec6196b3e39c7ffaa2f4e2afa55239c847b368b8ba9ee2c1707c8ed08e5a77a8eece2cc9f0c9c66aab8a88fb269968f985f039f3a85667c3fe88c5466e786f6f65263c752abb36941834c7b0e4df6c2d4e602c15cfd830c1218a2b3f2a04420341d4c5fb1ba1284f41fc1b943ab0ebc93601930100c91cea61cd22ef775a73699adb84ea03f5abebce67ed5a679c702cf1f33be5a73e0369cde609f8849d1012db4ec6b9887512bebb2ac557d6287df1ee37a2c2bf60c08e19aabd037b3914c00276ede7dcec4d90278c461bfa50035a08d7f47ce3b09a1477bb6136e1a9ad141da876148ace6cedebb30a00d3c7daa11bc75afbb7daee73749f5cad3cf7d0de189c12ef5c5a0c5b11d5172834edc60cfed28039b2e19e0d684cbeb70b1b6f5dacd09b5ca2a3c76fbbaadf59bc6386160ecd4444d1d8a0b1d8424d8503646969635d332b387447b86ae7ae7563823597de94366b831c7a1ea149972d82ffb6f73a94c99d3d6d0e98da2bbde7bb100258ba663d9b99ec7f4d9f975f895767327f1a06275316da2d728ab6dacb79829626082d08cfc00774f265e119f7359f339ca7357eb31aae9be53c2fe51527fd6aa9fb421f5948843068b70e8d78d21dde5bb6fe992ab3fc1860958a0536034e582494a0f9bb2bf04796821220f773c8cab994f224518e138574adfa5e7a4c395a1c4c0ae386d2f3d683436c44ed29e9ae3edc677fd64e6b92ca0d0c91c99e3a887a48671838a6cad518dcc693558a98c9dcf1ee2060b70f8eaff585d4996d786d1df3fe9ae5dbdd421f64c4c3b593d7dac4e397c2ebbef4672200ebebe9b8015fdb4d270aead5c674f7c945aaec00af5b8bde7ecd08109449bbb1659f272fc678dcea32562c1b259cb84e766361987f853be27468239650115805c12105a636f8b7265e6275aadaf84d269a3a39645f273798e1e089d663a65cccc1772f8081e28452067813cf3aaa1cbabcdc6d4e6719b07e45837642241d84fa2836e1a2f1dff2932092c272fb12811cefd5d9fc0e7539af8540be4b08a891168ca8dd045802e8f30b992203d2d80be9af9d164218d58433a40f136a43a059844129ae34aa5ec3d66944d84c1dd58824041ae8919a122a24157d4a20bc3969d2fa951e3f3c4d9832d4ddf8f7d77951eb68729f2e34c4ba0b06086aa61a4f678ed451700ee5a77015dab1376f485df2e53a4f38ef43b16f84bd71e3e33382f018da0bc384bf9b51bb4af9c9acb65f503677eab1479abfaf280d1cd683bb785f0c3f6d9d991792b73ea86e69e27505071043e1db623687c703bcf37d7281b5bc538a93b893db6d99f5a9bb990881b0a98e682e455fcfbff8dd8e6e61e1950ce0e885ec7f432fcf81774efdf0a51f95f6bc88d6fa72404ff97e6b7ce27ad546d67294648514d946ff553fa63b325054872111a5697f57bb374e77638d2a4515e0316da3999d41a654514e5c56c6c6e15d423f549364653ede6c70e27c2f319d3bcb5bc29a8e9fe28295ff0643877c5a4dda37b338e5ec20fbd1b0ceb71964bdb9902862a7f58888a104113930cdc8377a32df06ccef44ba445fe2a142777cf1e49ec84b16738972df2120789b6fe81805a18678d484800c1e6541458e3622f27a268345dc96c625fb4c37a07c107ae336ac3ccbad7bec2d04b4d9e53e7af5db12475e93909b1691f1614451eb1fd23a6109ddcc9012d858f06d0a0739b7bfc22792be40d46370e6f7244616f8d6186c0f2a169a5fc749ea9d277c414025ef2a8bfe1cf342ff3c911b56f555ef3be67a62f51f4714c0b034a56e71ef5c450f70bddc3d6d084d9df2386f17eb4e78320dfda4f1b4871587949688691cf7271b371552c4c6f252166f28d1e8e1ad38427826f44f50b953d7378845ecd1d41499c91ef467a1e8acddb0d4fac890bcc55f224927568301c5ca11fe8b8848f322371d16f62e8c1a1f53dd2f727c4391b8f3c60f7c1e47354965267052ae5923649700fd6c9328d5a67b0ca24ada22b54a798e0397059137e856b4223c64068071e9721f363039af689786c603191db70aeb9111af165ac381b385ab503d2fe997663464e9d667df2acf7403cff3120fbc733df68911dd1dde40c4af009d32ac781507bc2e4e0c8ebd0f3cd21af09cb737713168ac87e8a990d04d817b3e49f5b22bf50877046c87b1aebcab457457ab6d0654cbbfb1d87a8335a86c30d2f9d16e49b1df21d0415a7753ab948c3ba22c05602e886dd6a2e6c6f957751fff1d3b58ce9383b2697e11fab11e260fb8e6e1176ff1a5f6f64e2cce148b532084a64a17cfc01015d992642b5e2083e56f4fe652eee7c8e69922ca643ad9d6d98e704df1de91902346906fcf75a195cfd3d0bca3a9a1567a7eb32918dddf445076dea3aa53de8012e3bf0ae1c62aae3b96bc1aeaf5c82aae67799eaf0726a600ac1d90d285e42066d1778f2a13802f1bcbe895a40550d38fe3016b752f93e1eb7e316d28dd9a3eedd2a6f194ee01e1f1fc9ad7efcc1cee102170c418774b7a74aaefc1b23dc2e02ca40f976ff09b021cd301e2c2a19fd014e6b1c2348474b7e79479f45f7a890d13064e088402cef1b06c83e33d95f27f4af47958aea2f44d1ed8e1fc9d583ecec471bdfa4496238253f3b7aa5e826350456f13fa91e14bbc85ea88e02038420d7203bb2d19098689b107c9fb4c366bda0be9eaa7f530d18b768c9635712f19bfa180a07646c7e56ef739585032ed41a85e39961744ae3b773efd6c3e17ed6923254ba659e92182aef0309730eb66be4c0b00ba96404a1405b1732cc4f3a223dc3ddd9e3ca78a4d4df44c3a44e6fe75d16c6dfcbc1fa2d43736c6876a5ca967f680c0de31ebd97da8f661b8e2c2e98088c77d3afee0387e502cb5abf6bcf628babb0183b8743e130850e107eb1d0489480ee2531e6b16464fb7259560f74ce467e65dad1786313b57d8a797b6e5a753614a1a42af51dfb89b5b76bd130eb3b0226424371a4916008def4e7d9318c365a61377577a1dd92243e0cdff44b6fdbbc8fad5fa55940ecb487c779b72fec7eb8511c8e079e96522a62c54e4498300f1ab2a68c7fb511c77dad7a24aa319657d549fcebb39918c56df279ecff6d93e721107c34b6196ce06324db89c3a469dd8ad9122b11103cb1796daf96071ab0ff2427940b20c5b7d71b262e86ecc959e233c62091cb33c36f3ae929df45b0abb62f71324252edaf51f82ef22d3cd4ae3464facd06cf4a7018e2ebb24ab91b0c44d4139298916306ed8fa6973e0781370fce90759394ea1f3226c581955d9024261bf3ff83cdd2075b8ac54f99ea4f75a1640df867d7bd3fa924a47d98cf7af3d3910e2ff8c3a768bfc6a1cde62caa471da8d2d9ff854a4d31c541c67b5ba2949712f6487ff2ec2e70972df9925ae20e0233ec326375ec44075f83556cbe923689a69a52cd1a2d75edfe1b4f10646dbb41a9be271f49b772852a4acd86709cf0057a0cac5e0a984bfe6201ec1776b8907a386a411b6d4fe9c2fb97aec57c213268b417eefb8bbe7b3cca864ac2a45a90062d0c8b3613613068c1a5a6cd36af180662e22c4834bb37d4aebc840111986a496cd361dfee432c300015b1b6bbb2fe9d408c85327f97971706ed819d4769449ed5fd5670801201c1e21aa5991bc3d50fed268e73cd4a9fdedc3478462e92f2697b8754648675bf099f8e76d90bf58f27c3c6499986914e14c58b2ae99961fe2dc443c4b021dc4ff500475380e51ed04bd405ae42d35e05d6cf06cfb58eaf86c68195c8c26c02e7e35fbef55713abcbb98132697af9859df46001071dd57b659c31cefe40dcf0d7128499e7d76b0d6e478a0b9177a62b16cfcac598c7754d699650412935d2a0eaf5ce77554e1070477c8c3abb9699fe0854fbed3833a8c3fac02f977bb16d97264acd80d8ce6b13af35afb7c5f8f58b5924d1e092e96333159a567f2c05e695a476256ad814def2cdfca17433dc8d320b357d56b098a0f9014cfeeb834a86399e5ef604bb52de2c5b5ee21eee22089dbe717a106479ed9c926faf1f0f346506d6e0e9e8015dd8f5055094a16763c35d54d03da46b16f065749a8a632ec22add6babfc54ddba08cac79db925cbeaeccbc6c0dea91fcc73036e118a660708a77dc5ec5f8016560cf9e6e798151b1387a9d51bb6048209972a4b88cfec796e498aae14140fc85dc78bf2b5f067e3efd63aac9b1eb9258bd24ac1fd8204fb8a8f909b21db3c43adc58c6a66bca3412276c100b44d7b3e26178484c4fc02c1549baee271a58330abf374a62a50b0a0523f7216639376d9d2905e6a1a664a4858bb58ecc8361fde10f36800549025f551fed01abaef1d812e1215f59170b797dc0883db476a52e48ec96e0c8151d547e9a36f4644a9837ef390d917d52ce9f1d55e4ca1b434eae0c193500ead0200c7e55ced66354b3da9c1dc6ffe163074a4d7d75b8ba36377993f80429beb7682730d94b8fb90e519add83e3b04188d6659a28b4a78c14c134f56ac01261954dc7f04b880dfb5be51d713dbe7d4ff386606bd115c58d7943e98a3dfdeb38668935e3d4574ea05603ced7d8521e4a7a85e2b88baf30ac092107a015611cf4e65bc5a2539d7026f9dc74c094fa22abc097f4a740bda9188a0ac38f30e347846ae2a961461ace6200684aad6822446d7d1b6bf3d4e52e8764cd99c70e36a5a2a1c142842b8fb88dda1d7ed924da078691c01e1c4b7879ba24e7387741cafba5a52120799896f636b34006fefc9d42a467704d98223a2c9299caf77c0418d7a52c0e04b34cbc49cf8569f6b80ea7ebeb0c6a119de8396931e4ade411fa00f11fcbbcd6eb0832e71ccbb9b8f538441d41b6106f2abc5f7b4b9b59aabfee37096cc7e1204a5d995cc6ea4cb163aa40c5387ad2ee282fd07357b9f16f059d4feb15cc4eaffcae0cefcad74f64e0259986cbaacb314ab5e9878085cbc4be9f1d1407e8008aea993989d863a44142998efe51e482aa4d1196cc9df3b6084101221c46cfb908c925a69ad800381a07c3684d9a0e5aa3c606944ee076e12a4977c7897fcb6552a69af7749d65ae01cdddeaa1f2f6f7b2139f138540f4917d81f9dea1b74a178523d79f84cd9f51fece34d7b6598c6fd2a833603f5e1ead26537c50cbcb536dc50b48cb0e44a742ee46579f07373419cceeb5303f6949df73086ecf6c9401e2616f4a13a437ec78ccda892ca47ec97a9a8d3b4228f83341127a2f6b63acfb881e29d881c7eeb31242cf81b43391ffcd2a96a44e8de5c72c09114fd93fe7eb3289d32ff913cc6d6b97cf23ed166601d2f5c41fd2cdc503f6228ba3101fecb83295a473440eb438710bb8668d25c2de21632437dc277c00c1e165a5c95fedec28d28b1d69a69fa42cc73a4fcc210099d87a451bc7cb29036f445997b7f4087a1529cc0899f8d9fec6517a2909ec44d49e10db622ac7bd905448748d6a475242afd78dbd99300de5e6cc4507d3d7f9cad6a13450d9276d581d755bbc3f8431437038570af31d4a1ae1168b72e5ded276e2fe050f7a99734a8d887e4d46fb8baca65f2f0a4df96f14c12c8b80ab65b94bd3ab753700c554433719ced8cdb7d251d3e31cef0b52fc6cc8ff29238097a39c06f437556d4fcea46081ec05cc3a49773a73b548da06736ff07065e81423283d8140fd56898b49bc188ff6cd7fa271625e78d60b6664e0e86a0a772b86cc8fa719146d9e8b79b73cb774312f89667044525a7c1e72b1405840ad76621621e9c666f9f6613a776df449423d1f84ab40264b0d0e70d744b6b767cb1570bd237f751b5a92fe129bcb52c8472443915fb140c96344fdaa365f1e3127cb5c7803aa1c84b7a038e1949cda44db6afd22db23a8779321b271d52573b87e2d90fb86c5911dd8e7e14c0ba56a18f18e67543bd836e70a39b99f9dd36f9098dfe2a48e77b639f029c6500afb1defc016871cd115bbe03b8097be0003580b0c95eb8967e36a017e3fe01e7cb133005b616f680c8b81fbef858561e3f6ac26285147d684ca27f63d059f24829659888a9d1b17f9ce209e1ec2dcd73e2ebbf72f40b63aa865288d7365e5a23caeaf8291c5dc388eca139ae71a78f6360faeba22d81b72521558573cfbad2c7633f6785fda936fe67fdd9ea311c822aaf395ff7942bd0aa0cdf747b270815638104c768709a1f197ba25f69c40a6c8fdbc4383df7f50902d237b705816c8f5a9f09fe2953fea1af36f51d1f60681813db5882897bd158b9ac30ef6e9cd5c506c92244c010b53a4d60d311fcb6ed5bdb7a4ab7c64ac590760ecbb736c3d875a936399cf8793fc5933c60bd41439b790997258c30ca2826319649c11882057f2374210e5d3c3545d8e44c3e5926589194fdf2deb8f3a210fc5aa1d245846d3309c3fc716bd6bb41d25032ac55b2d2e27772446a326fbbb267db4b474c039ffd87f94cbd46bc43443c07bce76f50dcd05dd2dc363abd18ab6c64c306f7a14207d46102e0de0f8cbe4cc65c3527d67558aa051916fc833c0a66a1b7155f05c0313e2bce4faa1c3bacdee79e43f07276fa97e2640fc2e4f253491013734ef1cacf52fd6059387bd282174c30164d5e966365fc6cb1784b730f4f703ce677f4e54c14ae7fb62339249a498fb6f58eb047977e69d2c98aee6f9369ddaa8700050a2a1bc199a3e3f507f7d2750fd84e69f6b1b138beb00e28d714a0b193ef237f5e0ef30ba58d0138fc1bb2e701c41f2767bd7762fe42fd41fa593bebe88aa02e6ff8b8243b5625a38c00ce950e91ff6c3887798634ee4fc9db6bf99d5b8b6035be0418c350ee3d4c80e1de0ea3b4f36d5cb01d6ea36465ea1c436988fd0a9fe54d42c1bc3f806953b7d1081fd80b12a8491dee450b262ce00723e229a6db9de614db0ca76ae8b355f66cedf8ca2a46efdad2e561ee0e2fc433afb845af5f046add72198d2d8e1db55a62ef8d980a1d2dde09d778487507f0546a4655d836cf29a2da23915ebbc72f8cb67742c33ebf06c107465f0ebeee22b109e69fc0f0c61eb49660a3ff7712871f4f5fe7daee5cc79b9317852d4ecbd6a2618b0d69d6258d388950eb64e7138893f910b465c2de39c1fcfc6c68ee34800177b4b185e3159671da23b88442f3e84f2e87562fdafbebdcbebe0fd81ee65426bb72c074fad78980d2623b5825f348df780606a03064bc0e1acd3764bd7e76d778dca0c7a97fa67b2667fb49734d775389d7b5016fbe4d7fcb2c933343a5363e605c0c4b6f5f0e5fd6ed10e30d423e8d48fc95797154beb5a99302e99858980b374fbf7ec9b27ef95c2e9f847e1a3ced7ed93eb42166076aeeb25c580b62fde2f94cc8e8d4b1bbdf75bb9337790b485f55790646b5c1b6fabba6ccc3e38d3ba5c4184966953886f178f8a0d5eb19c8e235a721a34e89fc0b5cd57e5db1ac658a513248ea3f0c9ea4edcd04c28bb4d7350306f9f8ab4e5882d391bb3986c7660a192361aa3f7f85a8fc8987d345307a5357f2d05b69dbb869c6f119f294103fdf27058739865ae8181194d71cb94b841aa14007a7b2e7c1e5480d9098264ff1801a171c288544190fe7beef9076b5713d676eb2083273150b11b0c977b3c83103f3b143fdfeb93e8c65d58e6248d1df3bed5a2204a730c966f485f69c9528701706829725766b389c3cc1886d6217b0ac299fb9326c4d0e15b8abc8eccc9090b9cd952eb88613a61480f626f0454363382e96c1173eb3d72204d3b20aff82630849b4c217709dcc8e35bdc5bf9ace607a7cc27acd56f2b4ddcfa85054e7ef430bd60e345b89132e73ba2ca5c669247bbb9d81f54b6a779352f9e2c3a0e611f564cb1e74f50893200db2024fc78d4e86aaeb3d7570ed62f17e693e240ae99e3989476c315cc9b870ebff291d139cf9a3cf4f1550fc72472f2bbd9f94443eb8c2ef4168cafb7fb5be534b1890d8f2e6a093669101a97300d5a8fda50ad4bbe6f67f5b7db20ce0ec0d8be60ea5ef3f4339ac400747e8e9443a178d63a918f0aa5b5ad408f1a515a8512cea8bd80b17eee6434122d82babc177a88c385c3d58632d322af4a86615204131f04150a2f107eed7151a3506ae9b37a623a70cb11e07b5eb62a5d333ca7bd2767dc2d8064383c536023c34c41c83a8fed475d149ec7778ccba85fcfe9311e4c71738af353a1e38f38b6d5221c8a382cd0e5088efe32a643a6fe15c25c0e8943e0fb891317ed03a42e91966a2f2837e274917cf522db52e10f4912015d6a822f425c23b1c082a61f2b30dc19a68a3cf8f59f0273ebd45c9d93c27cd64e30a9f48ca684b23fafab396f0ac32cc657e759a1c191b6dda519c41ca76be94a877e8eac95e173ac8e27475e879321f95082c8252c1dc0bda5fd52c8c6ce91f7b524f9d43a01014c1a00575966781577eb99e5760702ce3a1d15c3d754c010e09482170c50ff3e93d7b8211bfa5ff911732b95f87fa772e18bd5db5c5fdb812e4ccee5dbef21a0c315e7fa93d05a90f86727bc6290880fc4df9f53f5e6efee91fb95dd78d8c230b504330c184d3f064301394544745d73256d9706521b0c580078803deb50d572e763f55826d0fc1dc0789fd3bf94e7a21b0a50b5cfe40aa018aa34761d07c97f92e42947582ca7dca415f7ac45d16641b41df10d60b3e7f727e806ade4106505441df925f47a9ed171cca891079f483627268fa0c4193eccb6742c26a7bfd947ba9804a3b9d77a7b45624ad0e8e845b710ac7cac30f9ef2857a2c983522fb7c513b456f29a12593a02bee8abcfbf90d3373e046ce79ac58897e5c5ae11931162d7022f3e3432a2e63c158544148e42b6d1a84756b1971eef68a1f3707bc06de4d7995f855331ae6171fff740cc4e9bef1fc334e5075e116939788117177ad9d07ec1e6a53070333d2df2d5fb7636b3929f60dc17cf280ff48afbab1d8dd999b13fb0e733950c67a9af66331a4cbc315123a077f9002648d17ddd4878e787c0a1c09f4bfed8b315f0d65b79394df3f2f305a28059b46590a672f5ac6fd4c375c39f1494e668ae5ed98d1c1f2bd3ab74a6c2ea839f3904fe3a76c601699b88c1cc16642459b64ae11ca3331e0c87843df373b277677a37c4c15e926a8a3e57c7e2d4caf60c9a60f18e0ab517b597dc5df26fed34a09d83cd87df9c3e65137f291e8aaa670172390d996214ff79e46fdf7b234fb5529fc663b8bcb0a392f7720d0bb449f7b58eed46ee889a77c625b600e1821efa9774cb2c140175b1dcd010595f7f6cdb690288afd993bea37817c1e8e92877863b8056370da08f458228c3edbb0ab4ef7c8e0675f1eeea8959f0bbcf4995142a64e84b0a933700c52d91b280aac9cd69a26f4dc17c710bcfbc1933739f8cf32d119f8d8accbb361ca0773c675a05376c96aa437b6f8755983210c868fd8ca028459698b5965e5ef381c0e2c354963701cb3bf869b03317f5eb4697ea44006942801875d3f43dea01d0e8435b17693cbffc0c6282e6d35bf37783db419fa3598d296f9897f2eca8409701c91275da70deac17225e1a44cc51a4341a67812534a950b0cc40fee5caef4a129e2345450335a84f32ec492d4beaacd758f569ad5176109d45c2ef522b8a6dc6d779dcb439982e91da52321fd2dfa734e250b113fd3c0219956f455c0eb358730ece3dbf5ec664ce65446114e31f939bf6fffa4738a0560b9b4c0c737fb0737696b718f5aab20ba0cdfd041ed651d80ca1172e39adc52c7665b36c0ce4001642ef166a1ae5163c8588deba5b753d40e1035608d92b27349fa005a16e4233ea36e4d1a0dd4d99137205e7b9f10e0c411d25b23fdc8da6c6dcba730c7ac2d9667a5b1770da4c9b0c48c6fc8b4758c9cc8ca2b1a70d01f52fe0d6b09dfd62abf7189912c5a75f0e07ce6de9a50750d5bbeb0b2b7bba14af8a161238a378a8c4017657cee5a0a07057aec39a2f3eb92faba86340df3db39954ad62fa7d8a076b7bb100fc6771aa227030ec21fef21c526a7c98c5063d710dbf231588077344b8ccc76df1b5080c2915dd774dfb4999013611e17551ae295416ccd1acff7fa5e4ab1e330e3ddb4f7e4051b4594535821dac4dba91bfb030ea9a88f16cc17b2e933a441c5ea3e89a304fc1e84ae0bb4aa43df7aa836c3d9657fc2ae63469dd96b077a0e5a21c056cd8dd709dd66daf7eeb5dd4ecdd927fdcb1665017dacbb082e9df0f88c30914349de1109b20c39af4995e8d17b610c78102e34d2cae1d23d3ab133ad7eda043231ea9369d5924f0678fa5c50c3f62d272122f6d66d76e9cb60d90b0dbb4d61d6ccc0f7afdb93de40226c911c1174146ece4ce96c5c521001d08e6e1e05d27e58a0d23cc993e43b3fe7463d84e905d8000549cb57af6739ebbd41ed6259c6a1e5b7d297f19b7d52a94b0e581fa45899e934a9993b2d3895f91afa448efea2a40de181ec350b7ce76836b58c7d1cc664647c4c87734d6ff98baa8cad47d8cc2dcfc1de077c049f55c8fe69a2fdd970f6a058db6ba014e48d2f299f592852ea38edaeead0dd6a7ba4f928b4fa378895459ce7794fe717c4bdc43480e5d42195a3a4b04a33ec6c92bf86691b9ba84e87592caea78cea11075995340a70f157258f4219a601ff18e98124146ee0bfb246883688c40f3a4bf46a42d4b42ed15000164cf438d036d61633addf09b1e16a50e09fca026b0b95b8b242bd89a61dfe86d01aaace9edfafdbe03611da0e11ed87c21e00f31bf36bce707c11431f38df480c81f6f730548bc69e16844945a607e70a444c433a98439211353f38896b86e3afc62410c9752f844909d70d87dbfdea411a4741f8ff8002ae9d371926d2cb1e0c592ad8d5b4385640c523e7b28e916fac7907ef803c8863fe00617b3a3cbcec352eb2a4c102436670e16a42bffae46b49d44894243f669804f0982c22912f3dcd75f5b83741c92781cb9b1ee4595903ead314535d45bf494508fc9daff9db13482a0f73e0d3f85ca560e3e98848e9f899d476bc6a48b4ecbdff1d2eb50e0422d4d3c03391eb00d6629d11ee768913dd87e1937d7c36fe1e9d114d4a053e7964da1f9c3c30bdd200fc2bbfdc3edebbd8cbc46e1200c34483fb7c6c818df379b1fdeef10a6aa1e1268e6249d7d8fc97cb42efd85435b20d24923c7d80f6949b65dc622b0bde375bbec37b97847da7658aad943100e25d2fec900cf83fd1ba02740c19305fadcc3a594a0ddd1f2de44a6912a60c20749dd4171f16950dc3f904a26f6454a7c6bcc808005e5a69eddb9fc4df2d64e9fb44f99cf8a1af804b858bdae6f3f88c6270ce826761db99f5cb1735708686d9955f86527458423aeccad72d62bf39dda40f0a673de1ac0608cf02d49913d305fd77893acb288cea33ac9334951931c47182e4a42fb7a4df7df149e52a9b972d57bf84dccb3964026519c39ff504798137caaa1593ccd4b1304703a96684d240add0e3ad6a62cdff352dea725e320d3cbb2f21b98d9416699d21bc98aa16a214987b00ea842520b294e926d575d85bfb0f59719cf3e421270f3400a9663a67bddbaf6fdc409aa9dbbbb7b4848338903bf88228e3fc95b1b7a5d15ea1ecae24f0091b4bb562e878257e8adb8db98a161ec94ba3e18e4107c60ab4fbd87f7cb0d2b20663e1b14adaf4314e16a50d08e5ed5ca83d5a53a8f4b46b5915871fdbce0133ebebe15480cadbaf834803760710b89d35f2b1961ee28fffd9c556c2a7eb8e0e52cabd60443b0de253a8fe85fa6fcff513a5435f9b2c75cdbbd34d44da54531b962dbd32ed70fdb90a3548efce1152e9e4871a8b6ac5d2910a77803022ce14a9495ab02dbb08eb5f97462b3ff07b1508901a95e1e22f9c073b52a1de11ef61558084dfe4ec722784229d16c28dfb6c287bd1b0d77ee201004541bd02f7fddae1a0c4d00b77567a151315b9a335a8777955ad8bd0f50a86bc3c91d1f497fa66271d9acb06a298a3cf970d275701f5d00d7bcdf67a5ee1bc1c85fd21e1ee25d867b9f8c25d11bbca99579c065a499cd1abb2f115d537ea1b47b8fa4a889ea30a9bc1c3e69a835c94fcfd4b6e2be1d73bf050d9a73fd2b99b0167ca9439cd63cb31438d6fdb333f0d2634910d37b351e9079c90aea04657838b0622b4144f66f0bcb4066683ee26bf0c1bb3e4288f6b5a4b2b0c325140fd1fab4c3c11aca576f0ded63db052bbcd2097e9e6a8a2973774773397939352e1bbca294a26e7b3ef08376419d9eecbcde662bfb22a1ba19736ae56cb8dea74e5e139d4a245586db013d4979f09f9db5e62fb7897e1040fe9cc948799317f689e65d28956c688a64b130845dfdcd41fa2f54d0addcfb279a6158bb72a8ff514221ded746480cd6e77e5e29e144c6950f774bb4d11c986c4693332e33669109b8238c41da2b02eb84d85981cb190dbc979f8203f53fd3b7d66f1abd5ff94d3cb0fbb20e606291c8aa167c4b097a5d533ed9cd9f2f6823070d7fec4be47bd77f89b102908d65bfc567b6501b029fcfab62df70f38a3ef21c691b503c0ddb24a32ed9d3194c53472ee89cca8358a093fe83564b6db1daa0552d9e0c52bc6c9fe09e6965bce8136bb101de4669c6b042aa9080951b17e3c08b993d4593ade64a5b56ec0ad5fffe1ebf5303681029aefe4a27624e95632f7fa7759d2ac1379e9d934cff800ec6d967da9cf3906ce09067a265749a421a0cbf6d5a31135a9540ad74db6e788430cd064604a6b1a9b0034a0f46e1c13cf2abf843decc7f5540f538b4417118779b47c9a3e06775c4750b97b2aef0d34b90f2d5009e1fe4d6830352c424c62bfb098a28c0f2734a2e91fbd7d222cfe893232fc63c4558d42dd83d4ab25edeed1169e98409214be687c45c347ad3863bec7c8c961ae839ef3d026753a8b23a54ddff838469a4cc08212bf2aca31889a8307a7e9773c42e4d6c79e4158bc25d8ec0fca21f2e0c14fbf25dcf917620cd741d01f6730b58ee883ee1f97b103413e06ef005d34cb6459bdac808b73b66028c13471ff4bd9ffd09ba87d35b930e4c9855137c5df29101a330f18172b71a8f89e4288fd363439885363ae47ff2d5d33cd75e3ae1a1f0ac7fe572814f43324812e8b539c901d8d260f668d9ae3121c9ea9cd4f2148cb0a877bda42a32f6992277fa5be16c2ced07b0801f857c07e4bc42bc1bac4b30d010b2645fbf10ecf01d3f5310a6980955b637e58bb802e7f4466069683efd292792a1a88c28b62218c4d1a89c161bfd038ae76e3fe1d6962c5a95ebb0d8259422f7a76c50131192559147a0859b115dc07a0a01bf5a89e541d234cd061bb515d67910345b50f20831b3cc4203c2ac3cfd479cbb28ad4b9815a1e94d495d65e0da57fb73892bcfd68959357b59f532c01c7d2900151582643af4d5a083d90c2bdd2ac3ff1aed0d6da6bae793e8d3b12209b909e52177d5e36d11e75cc8575286fb8dcb2d3283658bf685a2ad09f5ddf942776036d1346b47f3638faa8aae8e0787b27eeb1356e2303d1dce7db93ecdffb6b0e17dfd45e9fbbee5df4bcc6e8428f9d7dbe55665e4da74ee5bf968489df952803132fb4b2405f30eddb151e1568c73c5d89547f0a5f5d37ee24706bae699527e92f4cc8e9f459f6ee70961c28bbd4887cab0f694571907e803923d5f43adf97c7f67f885a620680080e8bd046b0fde9dd61f74862cee92b6090502af1fb13909af310c0ff766611b13c7e321fdb947fafbc0a035e58a328666c3591cbf08006d1c38b1a37d5b5ac4498e8ae3995999eff1a003f50946af78537d981f8464803c76ea2cad8ab0f2cda2a71be5fd70b812c82113af75f877c10cc939ff0d243a9616b3ccf79a010f78628495f61ad63c8c08e7c9edb012c8d0f724283d5fd7845f1892d05958ea1cbd4c642e4312fb8b842bd69c9df81da329d645e79286d3cc7511f2cb6cd371de19c5bf9c3d2804b39f1a6bb40085f2a36a048bb2d71af8f6c38d1d7180f4325da405afde6fc4c6f2182956db33db5ab8840e2530e3cea16ecc69488aba1a37bdf507adcabaf9b26b997553646200ea627eac91277d31f11fbb95e17a854de7e8db2a251dafec2ff1161bd663ac7c0b790c41b9f5413d44cf9202041d4f31af0fcab4491b07c991d51c713190021770c24df40aa86639665cbad145fa34d32d1c699d6e79eff05897696e062460221e464457e9c1156821a4b6ad05277894d0dab852f8cb8e2e9995da2fbebb7240649aba80ca36da242c662b38f7f54cce25df2bb5da8364a8edf1fbbdb2b0c1c9d5bfb765a8ed2a7f479436d8969acb4e3b8ae4f7189c14c0ca1ec23db6b8c8601ea25b433b3398cb6742297afe5694a2722cfb2532f11ddd9e479163b1525057dfa48902abaf435987842ce1f2f57cd430ba7b693a1ac129b62da76acad4f4c681e9e5da4d1b2290cfae0eb6e12725ccccc27af14236e2e45939bdf9ce86546817609646144fb100bcba002bac7610d9d1d3d07143288f9efc621e6434cf21fe10ba3b3bfefcd65714fe0fb7be819bf661d927747a58899a7cb6f0580c4302f91e4b497f839f65ebdfb8c1f3f29719f60a01e3cd0d5d9029f2c944b1bc959fdfa5082cfb866056484775ddc7205316ff121468bdd9ffa5cba05c591ebd5b126690054a9652faa38ad8a9b6b8a1a22a0e8e585cf947e4301403fa498509ef25183f65c6f771eaccef1e468ec777b6540ac8e54e23af5e6a0f0ab12b33913bfdcc66d2a3a23fff152461853a8beca9d6c8ed988e121d041d51d053d507e860721d9ec7e52f5898d887eb07a0ea7388327d55560200b37cec94ef2a24349ca8f066babef132c77dcd92d7a1f3fdcec7ae78273441a5cf746ef8226e332d8da38210044a87ddd0ef61685fe27b79e60f299b4103b4aac32f1271a484e5397f30362d593cd4d31b8a123fbccf1845edae5d49f3b66332b9d06e195f704f142836dc5fb6ec2c4338feaf1c244c86adaab17e4fd4ffe98db91018c46c1a743563ae6dae7c404cf9c2d85b8354f7b5e563ce7fb98fd5b81ca3faef517b587e8ffb45df345b41fe44e2f78dddc0bf207682e43084596a8fd042424a7e178e09d9e0359e197a34ffa5d0d65f6240b43af6ed35c06cbe29155907e9ae7373b39238b90fcaa202a41595acf6a322b8583745c4fe209a783ffd046babd3a25045e48f9e5d28cd64acccefe20ea44b8f8e25d84ef1e630f76f7cb4bf21459eec78d5caea4e56bee9b615b753f7e1c522a2fcb625d6afe36c43c26329bd7f6c6a407b29aee6bf129fb901e9f71b71a566273615c896b3001d0473d88a6d79d88b125bff4b5e11cd5df6d675d51041da4e64c047eacf23073898008d30dfd83106628f2f21a688175b9736a11b16356135b53a3321e57c312625c5fd12ba173ec70ef9eabe338b92b29fa0a2c06c24e2c9c90cbf790f55824acd42c90eadc890f7a0bdfcad8f5465249f4710d87e8113c05d2dc1c65d48f101ca772a5ef4fa3873d395d1a10705fc25028a789be8620cd9746285a146d9d5c4bfab9b84d1dcd2f68e121df0b8f0d26f28285c4e041a03ab281ced6d03f4b5a28b218038076cd63a8d6ed23e70ff1a94c870fd6dfabdd295325ac1165cc42cd3f660f2d6d4792b1b15e18bec58ec68128bc301f1e4766465401765a2b86120ba8b2194fbc6154feb3ecf966bcd8ffe506d4ea706df114dbd4e8f01167e0f95963b32664af079ec5f11ca4275fff6f2cf21f0d6bc2d6b1643fd59997235d2e2877aa6c1f0b6c3c2c20c57a4ed8cbfd748e574251ec1e0060a7d3c21eba3491fee6d13e4335be76f23b83695186a01c91f41397cc49646b9b47137248caeeca96a93f264d8df568791f75af700694f4b209a9807f218976a3a6ff393f5ccc0dedadbe1bb4ee0cddb563795c404e8ccf3b8d4c7c2af885a3b24d353b0673df6620d97947f282c72debb4ee7a48c0cfd5f53121cf4acf76e3e0e9ddb1350b790588f47aa7204326dad86556ab920b2acaf375d9c87f1102b346dc169a80bfa5b40cf3d45b4ecfe35421672ba61878e1c34ebbdbfa7eadfcbca32e4d24e04cea4dc08d1fb64a8cc13dc9875c79df938d3875aab0cae9e9c5164f615808d1eb1a6cae559a9f254f2bc11f30b2fe6180c7dd8de0a4e000d6df3c5656ba7a64473aebc8d6e6f736f0cc25acd957205ce2f00c358d2148c55a9430c22f6a26d054992843257a99478df3916d8b56ec6b0bf9f161cefaf8798ef8206729315f639c562a74485073c9a2fe7755ffdc8d6b419c94a8af21e1465af6723be4dd7ec84bacea2957bde44e3db712351fda982c331cc09b99f57832d93d5b528bb63ad2ac466706495f685c96fb946af43e09edcf252a9befdacb583f772a5254e298a1dad9faf20dbfea48b0701c05584a62f9c14ec9c5a9df57af94cd93ae88b95c43addc249dc6dc2fd8355390a50689122ed00ae0a3fc74732064fbf914de25b655af4e815781e4d237a351e0fc6cee29fb6b3badf3ae6330042181b651f4ffdacdf9dc1d6e216fa927f1cc95e60f552b108b8d685308298a93a79bd309ef6081293124d319cde8c4388a7ba6b0561caef642a38ababd582b7f947d75c9c2df49e53890f10223b16ab1271fe7d05784af76d16c0ef9a518bafaaaf4f3ba2f2d5256a0446774fa2b3525ce8cccfbdb510e559a7db789c0e051b7966d3e4c6a71bcd17c7aaa1c9e117a35108c7c30e21414f22db3edfa07fa1744eaf229b013d40d143bb72c7e4223d0626fe9689d7be7b300b8fb01943da887019b5a3941d933c7b68a54a601d99d56f42c47aafded87cd32b3fc535add77b7ef1a74cd7abccbc25ad0683de869e0c21f4d3abd3ddb51aa6fe55fe29355257e44f25bc5977eeba420644c77525b148ae06db4166aa88b27e25d6e92ac352019649abfffd765fc9145b703ac660891dba413f48e0680dad1840c26cfea4e6a70a73556d43635b288612ae7e0f803e59ef15682222d77413f011c71ce1b79349ffc5994dda66c359bd6846cd665a6a87c33e0d1b4c095a73351202204c11149c63e2b1c11276e54644d3fffb96512eb50a4937763dcd730acbbca89882c84f764fda6e19cfe845362b2711a1632f2200866dfc519308d6179487456a9ae97acf6ad66098578f93ad02aca96f6f3aad6d0bf4cf2ae7762e76055ef00ebd8914cee4f0f32517cab50812877eb0a10b56f4725bd27bdb4f935c302674942abe1ffa2b77dddbbee30fedac779ec92b1d9715e0d62d5401f0c8295a1ced0b51d135f9be45baec165fb1711196f19428fff6f4c1ae3489bd9cc037ba42fd5fea76d2b17e444c00752c4a716d97c2714461b67388da403e136ceeaa8dd17b4bfa5c1ed2bdde2e25c1a85781de0f988ca73e62faf27f7bb4f2116462c409ad07266c81a55449e452fc6626ad906751e4e252fd9c04e8a8dc797d3207036495a0e39ee571345591962130945c99df4488c4272f46c6548be030ea333ccdefe5f4bd8c51d54100def818d8d14fb906e80e11e664b7903857e873afb790838950f1b1c45cef3d425456024507f965762418fab92063f662e7c9cff8679d3488018cac46a35f46e215caf40ce582e77982dc09bc0972d5e1e372bf221cb320b40eb56388ba6eab13ec781735774644752602fbf00aff2f8933219167d0353add0005225f9ac595ab4f7a6ed55afa5c6398583643582aa6dd248ae067a7030253e71681c47722b5e101c687086d726bb9d529214394737e2897ddbafa6479d3b13a5a4156641ebed0dc5fb98493761cafd1412fe319fa5fb5cf871b3119d413d11abd084b0286a72ca9b09f26b1b1bb292b31304dbc54a7d3c3794256a8ca5ba63802b0069e17b1a7128417c67c826a3c172e238959706e2b3631f6e46b795ae46dc3ada84dc3e521d06ba688d1e0075d37ce887fe1192d856dbbbe2e4c29d232054e74014a53a22d8782a1b58a0bd6cd8cb2172147402327199cc3f678c2a37edac7778ea46020b9e5867dff82002537084b257e58cae002f622a4062347704f6e9ec18285378df2b374562c6e8508f58a0fd8387abda3f1d7d663908b9c454425eea5a8545c295cfd2d7568033559ee748d361ba11f37874d17932a7246e85f25825c73e5031e7f8b9b76e7476b135172305caabaf176e950667bc12e901bfa47191ad52048cbdd0adb80878018246786510b3e22cd016e4ae0d47d664e35e69a3fb95495974e3d72ce5b87677a0c1d02c7dcbe5b846e54a3861c27bffd85894e03ebde92078c95b463154aec15b37286de2eaac1427d1c30ffde77fbb6232abc7bb8060212f308d5a60c82e090cb6de288b62acbe9ffce7854205aeac9332f1c84073a1aa113752fd22a601731c4aace52256bc82440611bc8c58edae668c67f027b39575632d4b202a650ed2f6e7ef36dfa043d2d6fcf883d308def19863bce9c06cd1c4301fbdf97bb0b34f79ce09cbcc2950bb0567fc103cd963708cf9b0c976070945eec2a9fcc631d38a6305f5d600a258d7bb25aba4f2710d826a2639fc8e1ed20bdf29c6bdcc4126ff44c43db90c837998d0d05068b9431fd1a823af6d821327ab3175fcd011af03d14b28c7b329bad51808c45f746b48dfaf68ec16d3746510fb96b39458c5da5e85b052cde6644be21b622e0293188431d847be72e41e0805f090fddde8fe5b72800ce1378dbe1c9630be992955082652a801da59cbc3eb7383608e38ee929f6adb27ab6e10611742a481627b41107af4e9758c669a6cbf04a3989ddba24b796c60a530f986d0aca12fe7c0aa482cefd82fb3775e1ba131627a61d0f41116e78c1a65c5a07b09095d1200c678964423444c6dbc388d8d46f5c40922213f72b71c10b54930bdbdf7203dac4b12d3ae92a526ea0a2b92045284f67f57557c901bd51b428134ee50793fd7bace90a8dd31d72d8b27c43245ca7870ca7b6a527147eaa9ed98396bac96833218669c820ccaa94f9bfb8da2449a5f12fe80dfe181b3b1264368f03465df0333d71923aecf85f858e6d8fa06653c7ce54bfcab7d14edc1391e84a2f9fc1f5ab892348c8af551ca12037d0ded78990c99dc0c0a4e6486d8f48aa9a6953743c103f13820273c5e19bd2520d6129567fdc2bd06df94986f3d4e9ec4e044067962d1e4f067f49ba919b7680c2385e8a087522315b1441fd010fbc57811aae98c71396dfde5d741f5482cb2f9db5833465b7b861b7435d6eb2289fcad8eb2cb0001bd79d7c579d3668259f5b6945f1caecd0b37a3418d4c7bfff406bb6a971b9e935194c26d7c3a595f6556e214ea32cadcffbb546780efaa7a376754f029005e78f43a7e752432a4131b5cf9e012252718dfd17f07f523831003ccb5ff38eb5ec85250fae56cbb811d3e546ed913d5aceb52b4826d3d8295f6b44035e276284b39336cb6cecb37a0c95116db71d7f309e946fbeeacb15c0241a44f4f35a82ae7d825cace2fef5defbe86e1ff9e33931b3a9c155ba2553c0f44ad7c43e5681b39310a67f2553ba1891a50934a20ff50e3091ab85060a3c91732d059c69b2bc33baa8a281009346a9f435f2308251c08a77f81cde50396ada50fef24957037c345ad74dd453151ab27bf50c8e350d3734947c203a3fef53abb474a5b34c8b327c534e040fcc279214201fd4695e75944de3a6ae7d6ad525b526f4c1107ad26317e9428a4d09a18fc9caf3fe1cd7de3cf9bff763ea10d23278924bcd0b6bdffdeee4ebe435849333e3b996f1fef681f455a1646c65192c38e35ecab8ed6b935b01ee15a040a04f3af1322dc9a8f0678556a4df6c62a42e1d24a08b3483549b40027695238e82a1dbe1de72d32f10b9d9b94709c4c90386cb01c212ecf51184a2a669baa80192e1ca71829c418121816b8da856ea19ed997c32044e4a5be0bb89dcde26c094e021514c458c8c8121d5424b02a1d5c890870d4c779b8ed47795e93ea50c094eecf0816e2eec3bed1d8eb619f8ecd2c49f0106042619132deeca82dba482a5e29bcf52118fcc43c8db6d044c1c580796352eda5aca95d8ccaa397ab6b13286e5e49b24a9b0051a2759f0b19c8b39e2c23cdc8a40eb6c19fb7336f55b7b6463df5f5b61d7399a714dade57fd205cb7a0042899cb1f8f9949b36e0550407a7e3e2f370b45d3636833dc96caba14b7e8ca5f0594b883cf1c20878cd4541df1517eb65abd135ccc2c29a21c3214fa1f126d38c5b516d240aefbd46f4a05d35bfde07578b6bf0b74a648851438aab556e751d4aaf026177600bf0558f203cc20bc91947655b72d8f0199eb6678a2347f9ac52c0e50459c18a08991eaf94dd53f149e6e4d1671ecf6fd0147361effb2a1ae9e036a4b2cee901be59f74d772f4546c73fa4b78e03585cb3a1d1ade32fd9ca0a75800fa7fb673c5c78f180cd4650a12ce3afa395b1200024a76ec5000ead3fef0e0d572cc652e118513686e2dd04570cf48c8efde31ef0fbbe511ca733e5d7ed1a7186d6d3c33c1903490e995c5610313b417dc80e95dd64c1d5141adfd4768a150616d6f17d0c89b66379dff3f734580ad50b308f67987a33d9f3f3e23e1754ad1eb46c044c36e24158e670481092d7263c0ab307f1b5fd7208d94c13a608c6c77f1256be69ff04b67173f60ad9455406c87f02b7845c70cab3d8410d44336d10338a85a2f2bc04da0adf4e44c7f427dc59dde5e57bdc32ae78dde4e1851ffd1e033d5a12fd9a02b2552b81d2b344108a0391cf0aa50041fb6a9456d890cabe317c0f6fbd0f8f610a5c8ac0d672a3bf551b5df135cc4f74162f68bdc15aa13126e9d802f5480bd56e4c533328691d8afd2fa93fa717d1a28309b5c3c51e0a6444ed6d09af7418aaac278729380c3886fe3fa6d19ad86796f4b679cdb0efa67cffee04de6d2370b219b6597f17b3a6d826aa78b5da278a3ead38a791b473948f59754bd712d972a7d43e2d6252641e25457410fd9357a7c8ca25b8bceeffb0a1100ccd281098d9d3172cc1b0544fc81f503121ceaa065d290b1c91c8f4909c57c6c64665de56c11850377c367dff49ab54abc0a5ca9008ee0befca7bf5c7d85f35f6ba4c16f630c7a924dc347c4296e7f267387cdb049d62798099c87b4ee6f593930035a2656bb90aaefce03c9e2e73504c4a087cb9160c2889d35dd8f73346ec47930524b54dbe9f8f33b71d178e9074fbaee640e775720b9b7ded77f0c454f42656cc4cf6d2a66e7c93b3fed7281eb86aa8543103ed167e47b30c8a37efbe21f6d132ab07cf2d4c3dc7333b8b67e3d964e73fd3fe0856a3577c816cb47104523e718397b5ad53e7d26631aa728f5822058528b9f818b3afa285175f34b3c881841de2931ab46de6ca95742d96a528d2f40ee46562cfbbd6bf151262e47ae42ef923fbea8d10d648b426b2627f832bca8f9f8dbb9b880aed8494479e38b4302e960b13217cea971b35199fb74be06f9c46bbdc1fc4003ec3ba50df677836e7f8d24b1dea3f8863556afa30c734d90897c6d0880a884b237bdf755507d3a38d9b0469634702307d4653905bf65996ab95e035f81ee82d5262b9f1fdf796bcd3a46c009c3744a90bc8e174642a7ed183c7f556a085133f05e34b7164cca6a7d422484e78d61d274480dbdf77195fa24df1c4d37f2f07d6132d0bac8e95f6cc1b21fa8774e5167a4517eb77eada6912cf3ba986431f732d6b7a4e5fdb2bd5e8841506dd9c791a762092ebe362cceea1b6ed06cf12625526b30808f3ea07f4095cb5699008427696283d768c4d39244269e7eaa4054c8e54dc79d5535f5db0e917a321feded25e087238a302f06737c44ed5a196045b645d9e7a32eda8c3610d07c663a32071cd0a1bb1ca4241f38cfcd59448f7bc6824b1bf85cf6a6db5d5eecd8e63a259e692bfe8b1175b00a17931ac19892f1bba570ada67d968eabc1d5548589b21dc7110aaa3742ec7dd0662e962c40d33923286c6b5553aedf6b21f2e21cc07ce9d2b42fddfef89da0570308d9e48ad507d9a760be7bc945623f0166ee66195d110a614a6a246927c7086b5fd65ae99a80e9b226d6efb29360e55eb4f451c39a4f620e8986e1fa7c614ea0fb8bc454bcbe61c54fad81ead713463bad5e9b35d4230cc2f93e9b5c21c2b39318189eb4ec74c165f33537a47cdf92224e85ceb1c49a7b3bd421165fcbfe6bedd84db00d4b6c1edbb078611367b325ed763cd9267a4c51f5c44bebab053da6c8366fd2d365b258a841c2fc62356c77388837fdfad03d62f773e225f08beb2d7fb501ed206d80d44c672805e1656efc33d30dd8791cd445aa2489f7a0d362db83014649694fc16ad000e8fbe147c8effbd48ca82b31a8a0e7c8a710f7ac43cad970b6dbc55246db9e230d94a378990bde057d7c3750914113697ac7d8ec8e3e6deb38c61eb9cce2fe15a70f5d4c868c34122becfc51259c34034d87a520429a2afab4281ef5dabdc504ba04e6f3098b71836036ad8522a646d61f8b75ecd713d2c69585fbd101115a81248244c82c4de0be9923a4b4fc0432056eb63127b7e44c10619f570ef72c0948799dc3b399cafd9a3faf0b9f9b68e018e418e80c6e6df6b9749f864eed95b2627f15189ce46cc5bd72b44d189a0db7ada4a5522af920446feb83e5ff8d2fb8067102d1ac3e3a30c1ee47bf7c5f7079d5313027352e8c9f113729fbc2bb1ef919b487750eac32e8226eed891e44a913c6c1530c83999ebd95a704bb5da08049cd8860ef1ad1895b2c69df0c161f6ad2b2bd3c486636eb78087132fe24a88ce08766f9813eba97a77914d416c30aec532d63d4989074544afb0ac55d48e8ac5858b8a5e94c887e4f9584eaa198b5db802abcd191aa95ddef6c16fda7c3263476b550eea95ace5ac7d87744027ee87330ca4ac56c9146c4e9a9cbac70f7a644cf0ec5b474da74e9c55ba80c69d8e44ed4e46d98664f27623f020d95ac6d336dc14f5dd044794c85d8d78de0aaa0d062f167b1662c5cef05d2138cc92ba5666bf87d8d92b8c4d1fc9aa18208cbdbfdf8b5768114ebe5a9dd14e078cf16cd60c20342c27e3d2fecd80f6eb40ef73214c9b9e1d51c95b79afc3869cae49206b12ada38288fc7c71defbe2ce78e28ef653d100673bcb5a6a543823bb87df7598f2db174febe5e563079c323a10f584e116c216482c6bb5abe48ba9d248a269e90f17c47dd5ea83f84c8ed2b1dbaf2d93cde3c935b9ffc27957e0f6b9cb397afc95bda3fe86f7a16151367e0792d79f43bd55cbb35b18bec610ff69ea8aad74b824b95dbb12d06517205d25788e605b2ac30f38e42d1a08d16c6204b165bde5dd2f140224eb4e0cdc0208b731cc798503d00256fe3e8771c47b6bb9dc36f7dec23601bfd600cd349abff61541e639ab6ad1a6e16458bfcc3b02db1a67e20abd2ab4913cf95c31ff5edf0194a35410e108aade18b20810c6d0e22cfc3066ca1c79d05faccea79316dfaa3cf5fd4db3a6ba50cdd517bec879ce4fd3a9fee82773b3070d8d506f6b850c3649dfdaf37e86af39c4879d15199a0bdece5f6a7f0558faf58c999d4c2d4eeba1268ab065248c0fec131f03120eeb55c8c6724cc4ad7df37fc8556f66fd37d7242fd87f1977bc4b61b2b9d82f2cc07e6fa0e0efbdee959dbe2d43dc4823c85334e37e912ad75e908eb7bd2a780dd31fd37fd03cd3819330f8873147feed6f739fb94cfe9017361d2588180c83f9babba8b0d12d69ed90e70fe11c96ba431e9c95c56f5d6359d0987a9be576b0f4456dd7d1d49521a3a3ddf34942dfb5c5e8eaa18c1af3dc53aa5a5eac3a1965928cfe193a5fb2743ff1db143712fde1e0c1b3aec2cd824be86eb81fd14b5a74de1402bc9cb1f3011963ccd150a6feb2485d3e900ce8238ac012bd7ad98ba66a9fcd50f111641549d0b7bd19514d98d99ea14594bc93cbddf6f76ffeaf72745c9b4b9dc04dbbac5da0ead7d3f81dd263a83bdd9a046c96adac31e479bf61ecc03d374160090f0605075a680c4514f90de41b085a674e15ad1a6c1677b91851793a473da43ff212d4fbc5a542411c01fa37c70c385bf11821adf75b4fbb693155f5f7a3b3d2e32e7f40940b6f0ec96ee06b6c86f40191236f4e459b52fd2b5a61ccc8da8f800945b61cc6013cd61816f310627f4e524b6054b80102a0f7fdfcc97e5d0ca80d3e9abb5171b1044db12fb5d74fef717808256cde2d9b4d4a91ca5ab51c4f3dfd794480a7d7c26865ddf0c8c3324ff650dc6ddf4f897ff1bc11d30ad48d79f66ab9079071987c9edc43d3768e1731670a9ca0f1fa741c8450acce2e332ac89ae3d663c76484712233f0c0ceb9fc1e74e8c4b5cf4bbf3d1306c91573853458615558f37b173e5b087d3213d1ec817807bd833fa3e678fd55530766804fa50a40f972bd97d3a5a3f347f85cd1e15c503679ee74ac4abcbdea344bc6ce1b28645500956c7162f4c47a74aeb4cd0702e16fda32afe51bae08bb92cb3580c57f0867faa4e7d450b31cb8825bcb8e5b247360db8f66a965dbbbdd657e9a34a3a6d6c677cb8c44aacb2d14017a03d9eed7e9800a0defaa39cc510d9728719caa64e1179cf64cca920365003ada48f599f180c2844c61ac7428446d180238434f1b2319c0c14d185a8aed39773629884529c2a0c6d1c95d9cc510cddb2eff8b7d5d310bee1b2683efb19e196c2348f5b3b817424bb1cf5101fe6bcf8fe9296506ac0e50f54d25fe9c1404336ee82da7abb5249547343c9f2982f4220a489bffb8bde0dbb4d3d5ae2cd691444bca32e1272abc9b73d627ae842ad31986d3e548b0f220f6eef4b18824980269ac5177906003f59e2ee882244fa49aeab0008f67f7df88228eb77e961be8fe427f28cd1f9aeafc7e5036ddc3f2ac40fa8315f41d0b61f33672050ab3f06caee1dd6951c6f377d8dbb528b97c4efe5abd07d0f3684e375a2baf109c19b746caf35139073aff36f4fae024b99a63e3e5932558a39bccc7df990b3004850c975a2a42c78ada7798d6f52bd9a76d670bf4b4a1de50e1f64c53d92b4a0b66effa3ae761e3adc18324844b51d97806327c113cef2ab164dfbb969c4b64606a41785a605b4760ceeb7fa08a176d239cbed88be9affc5656b3fe3e7c1ad1e94ef3fcde2231af68c03423258df60dcee9c9bb59c81d8b94ceab00e409fe6ef68f4cc75374870eae2bd4c449f3477d46c435c7cd37a3f48b6b833a8876e47cf0874c12b3c60f3c3f09aaafabbea9a945e8272a5fb335274914c0cc35d5ad5938e3bc41a8bb2c97b11c7f5899e96b7739970cf49d4bbfb14ce9261bb535487060eaf82752bac794118cd48a94077da106f88b2e2641a5949be4eae01ac02ea0651831b73a7ff4bd3b457aef4e6901a05a36691648d86a486282a1f03196b734adbd920ac0ee6445d2858d4fdbc0ca4238549dfcd78dae88833050811cc6ea1fcf3af973323d11b60655cebc177c3524589c52d55432fe0b2eafb2181d73c50484f1c0921bf0a4c87f333c284ed9fd847039c245dad664403ea3602c035f08959f4ab5b0a39c24fb9a549a2a71b0209793653011f92a25846976df4cffacb1c0eee4badf0f774dcebc910b0cfc27901c28dd30187caa8f56346b70107539c2614d04d022b47e4a904ce0f51c0cf939d6e128e8a622574f1220c4fb38ac3194a516d0743deaea300d43c0302df9cc1d0206218e4eeb76b2b1b7d3a78760b70d59b178af2ae4da17bcfe5b51f247247115e4140fc86701b17f30a0e2ec826ddcaab44c4bf75e90e1e697ae9ae764793d6e7a613321d00f4489812493cf7cc07f6e2de1e028cdd8a179aee5817b0fdc60499850b1be43ab00047934a9123fa4abbf295a884a621330844990fdd49232a5e79da85ad67d082389cd11a7bc73f08b420faf8bacae572dcb7b9de86832ea1b807465105803ecdadfe569f7a0ee3c67c82af612bd0a3086a1cae574ccb0fb0d452f871aa33b63c09fce5a7b38c60398c6f4f05459b38cd5684f54f426bb93ff620cb21f173b64a844cfe6df897b15216f453f37c4463d64d6ea71fded3022507ba9b45aa3324c9cad39ef6680cc56ddaa51f6a0b4702bac418b8ce4a3546b1bb81d06983b0a9446e16b87f4db0088a3d93e8b54d405925c04ff105d1e8feecf40c6b529753c38e9b3da6ef2903fe92d58d7459225ace77f474813a7f3424fe3c514c9fccc7188d39a793fe9874d48c50f06529f6f0bbfbf4bb2e066fa8390b96ba3329ba0894db7d0dac6773c92d320c0f958c56d3583f339d8c8154e94622870ef2a675dc3fd224ffc24cc33375a4ba5ccbb815009f571a9a610b9d6fcb9d7515aa764e9bba120ce5eada9807b52b994fb07713c16bf068fc4eeace2ae3ff45c168f4560116e3959fded4b8fc298fa3ab3b0d10881e933798fd6e904f715342c7d3adc84ed6ee2eda86a886d50197fd460086673d95d5c24d69066dfa315699ef6120b1af322c55926dd25015269f1932e88ca6b9e450ec7a7247e01e0c25ff1df441a919c83195450afc078140e0f09cedf6b7648a77c2fae917923b0699bf9f213f1a7969cf07000cff21a0999e4ffca9636856597001b8789c97a371986b58b7b64a8e082558d8570849551b4a268bbd3dabd635336ca2e19351cb8501c545be9cb24a7b7561de6508481d6d5eb13582fbbcfc882b1c7779f51a2260ce887a12ad2d9869c0116d634710125d236f0cbb84a3811b9e2f0ec6945851e7f5a8a6f3beb7add365debf86c98d3dfc0acbc5aaf3c2570635b3cfe9c70a2561ce4a1ab7b8792c22ff752e9cf044dc38dfdec1959e32ca4d2f165f60d49937d65ce500ede199adb49c443359f45f8b881fea8bfbe8790a387a6ac0afafa444015a6820f3bdcac42e5d1108be084f8d4221b5305a518d26a92aa01625b1bdd67f3566c3826ea92f22b77d09badd9b18119d981e4c2d71a669fda2fd9c0d6cb3b5990e167c5f3d505e175de45a948765204c930fd64ef964f22f7e810bd7a23d1adb30263232dadf6d3830d9d0bfb67a21925c0519e77d06edb481b01a4fecc314aa5e42fb52dd631aef0aeaccb8229921de51913ac2a79c9ace031db9057a920796bbf0abfe5f587047d6444b3ec9559b70bad22796754fc115b872fd9c9c91ff27f1a3d22a5ae6c5b996ef5df5ed8dc20b71c2e0fda3e6a528399f3107e8</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">some perceptions of gaming</summary>
<category term="情感" scheme="http://example.com/categories/%E6%83%85%E6%84%9F/"/>
</entry>
<entry>
<title>learning red pill</title>
<link href="http://example.com/2023/02/15/poker/"/>
<id>http://example.com/2023/02/15/poker/</id>
<published>2023-02-15T06:07:10.000Z</published>
<updated>2024-01-15T07:36:03.605Z</updated>
<content type="html"><![CDATA[<div class="hbe hbe-container" id="hexo-blog-encrypt" data-wpm="Oh, this is an invalid password. Check and try again, please." data-whm="OOPS, these decrypted content may changed, but you can still have a look."> <script id="hbeData" type="hbeData" data-hmacdigest="2d6367afc5f6c41e2cd2a2c7877f07651f6a337c218d2daddef3ddb74b97b2ed">10d79030e8222445804370796b90fca1b3149e2c2a0f36d6b4ea04e548758c2141444b12a86e42608af46d1e31c1af489c7764adce0eb9939c686aff8b4e689399e9f7977951809497a0ea98ddd7fc6f9dac2a0838b05306e2029596eab2984d1a8a16d55b37bd541f9917e34bc9bbba0ad949a0d8418b531db95f8229a7698ce23532dc769781c83a3a8455bb99139f2a459f595344f31d00a5c974745cf89348f4d2b2d5b5111de4229dea77e290d0cdd411eb268087144077c0908697f6f3d802c91d61b35a5bf8f265ba5108a8c82369fbede1ad9d9e7280fc539f2c99281e8f0aba7d47ec297565192f9a14e81fe0c55e9aeb2d9f8ab9899bd40ed23118b2a3cf8f47d0a8a8588f673576391d9a95438a3880b95e7a2a5a60e2722d1c38615baadc2e91aaa2bc99dd1316aeec4bb8b2a8cba5a7570eaa980abeb80681fa4100085cdd8037a5ee9fd863842cb9c51a3a3024452d70609b29d845125985e5224f34fbff36b00a9b7ee2d36a4c260aaeb424c24a5c14450db4f3e6ccb5bde946a7611f945c02f8b523235e460a71f0bffd8a4b65a8ad37d5410dba88e4a2fdb6eb02fb6096317aeeb294f022e3abd0e27cf1c430b1143ef3151e1ae95d00441a0e8bda21050789ac406163c3302cd98597397012cae6903d1f06715ecfcbb0174984ad3dda6bd3547a4f6a2c6766d1ab1ee99052525ee1e9540a011b00825c</script> <div class="hbe hbe-content"> <div class="hbe hbe-input hbe-input-default"> <input class="hbe hbe-input-field hbe-input-field-default" type="password" id="hbePass"> <label class="hbe hbe-input-label hbe-input-label-default" for="hbePass"> <span class="hbe hbe-input-label-content hbe-input-label-content-default">Hey, password is required here.</span> </label> </div> </div></div><script data-pjax src="/lib/hbe.js"></script><link href="/css/hbe.style.css" rel="stylesheet" type="text/css">]]></content>
<summary type="html">some perceptions of gaming</summary>
<category term="情感" scheme="http://example.com/categories/%E6%83%85%E6%84%9F/"/>
</entry>
<entry>
<title>perceptions</title>
<link href="http://example.com/2023/02/07/perception/"/>
<id>http://example.com/2023/02/07/perception/</id>
<published>2023-02-07T05:42:31.000Z</published>
<updated>2024-01-15T07:36:03.604Z</updated>
<content type="html"><![CDATA[<ol><li>快乐需要付出代价,要么遭受苦难,要么透支空虚。</li><li>男人总是好为人师,人类总是自以为是。</li><li>轻易得到的东西,一定没有价值。</li><li>遭受苦难获得价值,遭受的更多,稀缺性更强。</li><li>逃避和放弃之间缺少了自洽。</li><li>尝试定下目标,完成它的60%。</li><li>完成度比完美重要的多。</li><li>冒进的话之所以冒进,不是因为话冒进,只是因为情绪和氛围不对。</li><li>rimraf node_modules 删除node_modules。</li><li>有没有可能,你坚持和守护的东西,都是错的。</li><li>犹豫不一定是谎言,快速的回应反而可能是提前准备好的谎言。</li><li>了解规则、跳出规则、突破规则。</li><li>你不喜欢一个人,不代表你不希望她喜欢你。</li></ol>]]></content>
<summary type="html">some perceptions in life</summary>
<category term="随笔" scheme="http://example.com/categories/%E9%9A%8F%E7%AC%94/"/>
</entry>
<entry>
<title>solidity advanced study notes</title>
<link href="http://example.com/2023/02/03/solidity-study-adanced-notes/"/>
<id>http://example.com/2023/02/03/solidity-study-adanced-notes/</id>
<published>2023-02-03T05:35:02.000Z</published>
<updated>2024-01-15T07:36:03.609Z</updated>
<content type="html"><![CDATA[<h2 id="接收ETH"><a href="#接收ETH" class="headerlink" title="接收ETH"></a>接收ETH</h2><ul><li>Solidity支持两种特殊的回调函数,receive()和fallback(),他们主要在两种情况下被使用:<ol><li>接收ETH</li><li>处理合约中不存在的函数调用(代理合约proxy contract)<br> <strong>注意:</strong>在solidity 0.6.x版本之前,语法上只有 fallback() 函数,用来接收用户发送的ETH时调用以及在被调用函数签名没有匹配到时,来调用。 0.6版本之后,solidity才将 fallback() 函数拆分成 receive() 和 fallback() 两个函数。</li></ol></li></ul><h3 id="接收ETH函数-receive"><a href="#接收ETH函数-receive" class="headerlink" title="接收ETH函数 receive"></a>接收ETH函数 receive</h3><ul><li>receive()只用于处理接收ETH。一个合约最多有一个receive()函数,声明方式与一般函数不一样,不需要function关键字:receive() external payable { … }。receive()函数不能有任何的参数,不能返回任何值,必须包含external和payable。</li></ul><p>当合约接收ETH的时候,receive()会被触发。receive()最好不要执行太多的逻辑因为如果别人用send和transfer方法发送ETH的话,gas会限制在2300,receive()太复杂可能会触发Out of Gas报错;如果用call就可以自定义gas执行更复杂的逻辑(这三种发送ETH的方法我们之后会讲到)。</p><p>我们可以在receive()里发送一个event,例如:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">// 定义事件</span><br><span class="line">event Received(address Sender, uint Value);</span><br><span class="line">// 接收ETH时释放Received事件</span><br><span class="line">receive() external payable {</span><br><span class="line"> emit Received(msg.sender, msg.value);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>有些恶意合约,会在receive() 函数(老版本的话,就是 fallback() 函数)嵌入恶意消耗gas的内容或者使得执行故意失败的代码,导致一些包含退款和转账逻辑的合约不能正常工作,因此写包含退款等逻辑的合约时候,一定要注意这种情况。</p><h3 id="回退函数-fallback"><a href="#回退函数-fallback" class="headerlink" title="回退函数 fallback"></a>回退函数 fallback</h3><ul><li>fallback()函数会在调用合约不存在的函数时被触发。可用于接收ETH,也可以用于代理合约proxy contract。fallback()声明时不需要function关键字,必须由external修饰,一般也会用payable修饰,用于接收ETH:fallback() external payable { … }。</li></ul><p>我们定义一个fallback()函数,被触发时候会释放fallbackCalled事件,并输出msg.sender,msg.value和msg.data:</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">// fallback</span><br><span class="line">fallback() external payable{</span><br><span class="line"> emit fallbackCalled(msg.sender, msg.value, msg.data);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><h2 id="发送ETH"><a href="#发送ETH" class="headerlink" title="发送ETH"></a>发送ETH</h2><h3 id="transfer"><a href="#transfer" class="headerlink" title="transfer"></a>transfer</h3><ul><li>用法是接收方地址.transfer(发送ETH数额)。</li><li>transfer()的gas限制是2300,足够用于转账,但对方合约的fallback()或receive()函数不能实现太复杂的逻辑。</li><li>transfer()如果转账失败,会自动revert(回滚交易)。<br>代码样例,注意里面的_to填ReceiveETH合约的地址,amount是ETH转账金额:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">// 用transfer()发送ETH</span><br><span class="line">function transferETH(address payable _to, uint256 amount) external payable{</span><br><span class="line"> _to.transfer(amount);</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h3 id="sender"><a href="#sender" class="headerlink" title="sender"></a>sender</h3><ul><li>用法是接收方地址.send(发送ETH数额)。</li><li>send()的gas限制是2300,足够用于转账,但对方合约的fallback()或receive()函数不能实现太复杂的逻辑。</li><li>send()如果转账失败,不会revert。</li><li>send()的返回值是bool,代表着转账成功或失败,需要额外代码处理一下。<br>代码样例:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">// send()发送ETH</span><br><span class="line">function sendETH(address payable _to, uint256 amount) external payable{</span><br><span class="line"> // 处理下send的返回值,如果失败,revert交易并发送error</span><br><span class="line"> bool success = _to.send(amount);</span><br><span class="line"> if(!success){</span><br><span class="line"> revert SendFailed();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h3 id="call"><a href="#call" class="headerlink" title="call"></a>call</h3><ul><li>用法是接收方地址.call{value: 发送ETH数额}(“”)。</li><li>call()没有gas限制,可以支持对方合约fallback()或receive()函数实现复杂逻辑。</li><li>call()如果转账失败,不会revert。</li><li>call()的返回值是(bool, data),其中bool代表着转账成功或失败,需要额外代码处理一下。<br>代码样例:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">// call()发送ETH</span><br><span class="line">function callETH(address payable _to, uint256 amount) external payable{</span><br><span class="line"> // 处理下call的返回值,如果失败,revert交易并发送error</span><br><span class="line"> (bool success,) = _to.call{value: amount}("");</span><br><span class="line"> if(!success){</span><br><span class="line"> revert CallFailed();</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><ul><li>call没有gas限制,最为灵活,是最提倡的方法;</li><li>transfer有2300 gas限制,但是发送失败会自动revert交易,是次优选择;</li><li>send有2300 gas限制,而且发送失败不会自动revert交易,几乎没有人用它。</li></ul>]]></content>
<summary type="html">solidity进阶学习笔记</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>block chain introduction</title>
<link href="http://example.com/2023/02/02/blockChain-introduction/"/>
<id>http://example.com/2023/02/02/blockChain-introduction/</id>
<published>2023-02-02T01:38:02.000Z</published>
<updated>2024-01-15T07:36:03.599Z</updated>
<content type="html"><![CDATA[<h2 id="web3和web2的区别"><a href="#web3和web2的区别" class="headerlink" title="web3和web2的区别"></a>web3和web2的区别</h2><ul><li>介绍传统的web2应用,阐述web2应用的中心化特点,阐述传统中心化应用的痛点(可以引用暴雪的例子)。引出web3的概念,区块链技术是实现web3的主流方案。</li></ul><h2 id="介绍区块链的前世今生,从比特币到以太坊。"><a href="#介绍区块链的前世今生,从比特币到以太坊。" class="headerlink" title="介绍区块链的前世今生,从比特币到以太坊。"></a>介绍区块链的前世今生,从比特币到以太坊。</h2><h3 id="比特币:数字货币"><a href="#比特币:数字货币" class="headerlink" title="比特币:数字货币"></a>比特币:数字货币</h3><ol><li>2008年11月1日,中本聪发布比特币《白皮书》</li><li>去中心化的点对点的电子记账系统<ul><li>账单以谁为准<br> 交易需要手续费,矿工有奖励<br> 以谁为准?挖矿的工作量证明。<br> 如何证明交易是本人的(防伪)? 基于密码学的电子签名。非对称加密。<br> 如何对付双重支付?<br> 如何进行余额检查?<br> 如何防止篡改?最长链原则。</li><li>为何要记账</li></ul></li></ol><h3 id="以太坊"><a href="#以太坊" class="headerlink" title="以太坊"></a>以太坊</h3><ol><li>metaMask</li><li>gas</li><li>挖矿确认交易</li><li>geth客户端</li></ol><h2 id="Dapp开发及展示"><a href="#Dapp开发及展示" class="headerlink" title="Dapp开发及展示"></a>Dapp开发及展示</h2><ol><li>编译、部署合约</li><li>网页和geth交互</li><li>web3.js获取合约对象,展示功能</li></ol>]]></content>
<summary type="html">区块链的介绍大纲</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>solidity study notes</title>
<link href="http://example.com/2023/02/01/solidity-study-notes/"/>
<id>http://example.com/2023/02/01/solidity-study-notes/</id>
<published>2023-02-01T09:59:02.000Z</published>
<updated>2024-01-15T07:36:03.611Z</updated>
<content type="html"><![CDATA[<h2 id="solidit-入门"><a href="#solidit-入门" class="headerlink" title="solidit 入门"></a>solidit 入门</h2><h3 id="数值类型"><a href="#数值类型" class="headerlink" title="数值类型"></a>数值类型</h3><h4 id="Solidity中的变量类型"><a href="#Solidity中的变量类型" class="headerlink" title="Solidity中的变量类型"></a>Solidity中的变量类型</h4><ul><li>数值类型(Value Type):包括布尔型,整数型等等,这类变量赋值时候直接传递数值。</li><li>引用类型(Reference Type):包括数组和结构体,这类变量占空间大,赋值时候直接传递地址(类似指针)。</li><li>映射类型(Mapping Type): Solidity里的哈希表。</li><li>函数类型(Function Type):Solidity文档里把函数归到数值类型,但我觉得他跟其他类型差别很大,所以单独分一类。</li></ul><h4 id="数值类型-1"><a href="#数值类型-1" class="headerlink" title="数值类型"></a>数值类型</h4><ol><li>布尔型<br>取值为true和false<br>布尔值的运算符和js相似</li><li>整型<br>常用包括<br><code>// 整型 int public _int = -1; // 整数,包括负数 uint public _uint = 1; // 正整数 uint256 public _number = 20220330; // 256位正整数</code></li><li>地址类型<br>地址类型(address)存储一个 20 字节的值(以太坊地址的大小)。地址类型也有成员变量,并作为所有合约的基础。有普通的地址和可以转账ETH的地址(payable)。其中,payable修饰的地址相对普通地址多了transfer和send两个成员。在payable修饰的地址中,send执行失败不会影响当前合约的执行(但是返回false值,需要开发人员检查send返回值)。balance和transfer(),可以用来查询ETH余额以及安全转账(内置执行失败的处理)。<br><code> // 地址 address public _address = 0x7A58c0Be72BE218B41C608b7Fe7C5bB630736C71; address payable public _address1 = payable(_address); // payable address,可以转账、查余额 // 地址类型的成员 uint256 public balance = _address1.balance; // balance of address</code></li><li>定长字节数组<br>字节数组bytes分两种,一种定长(byte, bytes8, bytes32),另一种不定长。定长的属于数值类型,不定长的是引用类型(之后讲)。 定长bytes可以存一些数据,消耗gas比较少。<br><code> // 固定长度的字节数组 bytes32 public _byte32 = "MiniSolidity"; bytes1 public _byte = _byte32[0]; </code><br>MiniSolidity变量以字节的方式存储进变量_byte32,转换成16进制为:0x4d696e69536f6c69646974790000000000000000000000000000000000000000</li></ol><p>_byte变量存储_byte32的第一个字节,为0x4d。<br>5. 枚举 enum<br>枚举(enum)是solidity中用户定义的数据类型。它主要用于为uint分配名称,使程序易于阅读和维护。它与C语言中的enum类似,使用名称来代替从0开始的uint:<br><code> // 用enum将uint 0, 1, 2表示为Buy, Hold, Sell enum ActionSet { Buy, Hold, Sell } // 创建enum变量 action ActionSet action = ActionSet.Buy;</code><br>它可以显式的和uint相互转换,并会检查转换的正整数是否在枚举的长度内,不然会报错:<br><code> // enum可以和uint显式的转换 function enumToUint() external view returns(uint){ return uint(action); }</code></p><h4 id="函数类型"><a href="#函数类型" class="headerlink" title="函数类型"></a>函数类型</h4><ol><li><p>function:声明函数时的固定用法,想写函数,就要以function关键字开头。</p></li><li><p><function name>:函数名。</function></p></li><li><p>(<parameter types>):圆括号里写函数的参数,也就是要输入到函数的变量类型和名字。</parameter></p></li><li><p>{internal|external|public|private}:函数可见性说明符,一共4种。没标明函数类型的,默认public。合约之外的函数,即”自由函数”,始终具有隐含internal可见性。</p><ul><li>public: 内部外部均可见。</li><li>private: 只能从本合约内部访问,继承的合约也不能用。</li><li>external: 只能从合约外部访问(但是可以用this.f()来调用,f是函数名)。</li><li>internal: 只能从合约内部访问,继承的合约可以用。<br> <strong>Note 1:</strong> 没有标明可见性类型的函数,默认为public。</li></ul><p> <strong>Note 2:</strong> public|private|internal 也可用于修饰状态变量。 public变量会自动生成同名的getter函数,用于查询数值。</p><p> <strong>Note 3:</strong> 没有标明可见性类型的状态变量,默认为internal。</p></li><li><p>[pure|view|payable]:决定函数权限/功能的关键字。payable(可支付的)很好理解,带着它的函数,运行的时候可以给合约转入ETH。pure和view的介绍见下一节。</p></li><li><p>[returns ()]:函数返回的变量类型和名称。</p></li></ol><h4 id="函数输出"><a href="#函数输出" class="headerlink" title="函数输出"></a>函数输出</h4><h4 id="变量存储和作用域"><a href="#变量存储和作用域" class="headerlink" title="变量存储和作用域"></a>变量存储和作用域</h4><h4 id="数据位置"><a href="#数据位置" class="headerlink" title="数据位置"></a>数据位置</h4><ul><li>solidity数据存储位置有三类:storage,memory和calldata。不同存储位置的gas成本不同。storage类型的数据存在链上,类似计算机的硬盘,消耗gas多;memory和calldata类型的临时存在内存里,消耗gas少。大致用法:<ol><li>storage:合约里的状态变量默认都是storage,存储在链上。</li><li>memory:函数里的参数和临时变量一般用memory,存储在内存中,不上链。</li><li>calldata:和memory类似,存储在内存中,不上链。与memory的不同点在于calldata变量不能修改(immutable),一般用于函数的参数。</li></ol></li></ul><h4 id="引用类型"><a href="#引用类型" class="headerlink" title="引用类型"></a>引用类型</h4><h5 id="数组-Array"><a href="#数组-Array" class="headerlink" title="数组 Array"></a>数组 Array</h5><ul><li>数组(Array)是solidity常用的一种变量类型,用来存储一组数据(整数,字节,地址等等)。数组分为固定长度数组和可变长度数组两种:<ul><li>固定长度数组:在声明时指定数组的长度。用T[k]的格式声明,其中T是元素的类型,k是长度,例如: <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">// 固定长度 Array</span><br><span class="line">uint[8] array1;</span><br><span class="line">bytes1[5] array2;</span><br><span class="line">address[100] array3;</span><br></pre></td></tr></table></figure></li><li>可变长度数组(动态数组):在声明时不指定数组的长度。用T[]的格式声明,其中T是元素的类型,例如: <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">// 可变长度 Array</span><br><span class="line">uint[] array4;</span><br><span class="line">bytes1[] array5;</span><br><span class="line">address[] array6;</span><br><span class="line">bytes array7;</span><br></pre></td></tr></table></figure><strong>注意:</strong> bytes比较特殊,是数组,但是不用加[]。另外,不能用byte[]声明单字节数组,可以使用bytes或bytes1[]。在gas上,bytes比bytes1[]便宜。因为bytes1[]在memory中要增加31个字节进行填充,会产生额外的gas。但是在storage中,由于内存紧密打包,不存在字节填充。</li></ul></li><li><h6 id="数组创建过程"><a href="#数组创建过程" class="headerlink" title="数组创建过程"></a>数组创建过程</h6></li></ul><p>在solidity里,创建数组有一些规则:</p><ul><li>对于memory修饰的动态数组,可以用new操作符来创建,但是必须声明长度,并且声明后长度不能改变。例子:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">// memory动态数组</span><br><span class="line">uint[] memory array8 = new uint[](5);</span><br><span class="line">bytes memory array9 = new bytes(9);</span><br></pre></td></tr></table></figure></li><li>数组字面常数(Array Literals)是写作表达式形式的数组,用方括号包着来初始化array的一种方式,并且里面每一个元素的type是以第一个元素为准的,例如[1,2,3]里面所有的元素都是uint8类型,因为在solidity中如果一个值没有指定type的话,默认就是最小单位的该type,这里int的默认最小单位类型就是uint8。而[uint(1),2,3]里面的元素都是uint类型,因为第一个元素指定了是uint类型了,我们都以第一个元素为准。 下面的合约中,对于f函数里面的调用,如果我们没有显式对第一个元素进行uint强转的话,是会报错的,因为如上所述我们其实是传入了uint8类型的array,可是g函数需要的却是uint类型的array,就会报错了。<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line">// SPDX-License-Identifier: GPL-3.0</span><br><span class="line">pragma solidity >=0.4.16 <0.9.0;</span><br><span class="line"></span><br><span class="line">contract C {</span><br><span class="line"> function f() public pure {</span><br><span class="line"> g([uint(1), 2, 3]);</span><br><span class="line"> }</span><br><span class="line"> function g(uint[3] memory) public pure {</span><br><span class="line"> // ...</span><br><span class="line"> }</span><br><span class="line">}</span><br></pre></td></tr></table></figure></li><li>如果创建的是动态数组,你需要一个一个元素的赋值。<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">uint[] memory x = new uint[](3);</span><br><span class="line">x[0] = 1;</span><br><span class="line">x[1] = 3;</span><br><span class="line">x[2] = 4;</span><br></pre></td></tr></table></figure></li><li><h6 id="数组成员"><a href="#数组成员" class="headerlink" title="数组成员"></a>数组成员</h6><ul><li>length: 数组有一个包含元素数量的length成员,memory数组的长度在创建后是固定的。</li><li>push(): 动态数组和bytes拥有push()成员,可以在数组最后添加一个0元素。</li><li>push(x): 动态数组和bytes拥有push(x)成员,可以在数组最后添加一个x元素。</li><li>pop(): 动态数组和bytes拥有pop()成员,可以移除数组最后一个元素。</li></ul></li></ul><h5 id="结构体-Struct"><a href="#结构体-Struct" class="headerlink" title="结构体 Struct"></a>结构体 Struct</h5><ul><li>Solidity支持通过构造结构体的形式定义新的类型。创建结构体的方法:<figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">// 结构体</span><br><span class="line">struct Student{</span><br><span class="line"> uint256 id;</span><br><span class="line"> uint256 score; </span><br><span class="line">}</span><br></pre></td></tr></table></figure></li></ul><h4 id="映射类型"><a href="#映射类型" class="headerlink" title="映射类型"></a>映射类型</h4><h4 id="常数-constant和immutable"><a href="#常数-constant和immutable" class="headerlink" title="常数 constant和immutable"></a>常数 constant和immutable</h4>]]></content>
<summary type="html">solidity学习笔记</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
<entry>
<title>writing English</title>
<link href="http://example.com/2023/02/01/EnglishLearning/"/>
<id>http://example.com/2023/02/01/EnglishLearning/</id>
<published>2023-02-01T01:38:02.000Z</published>
<updated>2024-01-15T07:36:03.593Z</updated>
<content type="html"><![CDATA[<h2 id="June"><a href="#June" class="headerlink" title="June"></a>June</h2><h3 id="third-week"><a href="#third-week" class="headerlink" title="third week"></a>third week</h3><ul><li>sexy topic<ol><li>Do you have any resentment towards your fisrt night boy?</li></ol></li></ul><h2 id="July"><a href="#July" class="headerlink" title="July"></a>July</h2><h3 id="second-week"><a href="#second-week" class="headerlink" title="second week"></a>second week</h3><ul><li>new words by reading<ol><li>eclectic 不拘一格的<br> Every magazine I read allowed me to enjoy news, and gain information from an eclectic range of articles.</li><li>piling up 堆积<br> Magazines were piling up in the corner of my room.</li><li>laptop 笔记本电脑 tablet 平板</li><li>individual 个性化的 dynamics 动态<br> Winning someone’s heart is a complex and individual process, as it depends on the person and the dynamics of your relationship.</li><li>general 普遍性的<br> However, here are some general tips to help you.</li><li>genuine 友善的</li><li>Authenticity 真实性<br> Authenticity goes a long way in building a meaningful connection.</li><li>attentive 细心的 strive 努力 perspective 远景,这里指观点<br> Express yourself clearly, be attentive, and strive to understand her perspective.</li><li>aspirations 愿望、志向 passions 激情 trustworthy 值得信赖的</li><li>count on you 依靠你 boundaries 边界 affection 感情</li><li>compliments 赞扬 gestures 手势 appreciated 欣赏<br> Express your affection in meaningful ways, such as through compliments, gestures, and acts of kindness. Make her feel appreciated and valued.</li><li>approach 方法<br> Remember that each person is unique, so it’s important to get to know her, be attentive to her needs, and adapt your approach accordingly.</li><li>employ 这里指运用 seduce 勾引 casual 随意的 encounter 遭遇<br> PUA stands for “Pick-Up Artist.” It refers to individuals who study and employ techniques and strategies to attract and seduce romantic partners, particularly in the context of short-term or casual encounters.</li><li>manipulation 操控 dynamics 动态 pursuit 消遣、爱好、追求<br> PUA techniques often focus on psychological manipulation, social dynamics, and self-improvement exercises to increase one’s chances of success in romantic pursuits.</li><li>promote 促进 manipulative 操控的 tactic 计谋、策略 objectify 物化 mutual 相同的(mutual respect 相互尊重) consent 同意 ethical 道德的 sustainable 可持续的<br> However, it’s worth noting that the PUA community has faced criticism for promoting manipulative tactics and objectifying individuals. Many argue that building healthy, genuine connections based on mutual respect and consent is a more ethical and sustainable approach to relationships. It’s important to consider the ethics and values behind any approach to dating and personal interactions.</li></ol></li><li>new words try a new way<ol><li>Avoid stereotypes or discrimination based on gender and believe that each person has unique contributions and abilities.<br> stereotype 刻板印象 discrimination 歧视</li><li>foster camaraderie.<br>foster 培养、培育 camaraderie 友情</li><li>Avoid favoritism or excluding anyone.<br>favoritism 偏袒 exclude 排除、排挤</li><li>Respect each other’s personal space and privacy.<br> space 空格、空间 privacy 隐私</li><li>Avoid excessive interference or asking overly personal questions.<br> excessive 过度的 interference 干涉</li><li>While it is not meant to be taken literally, apples are a nutritious fruit that can contribute to a healthy diet.<br> literally 字面意思地 diet 饮食</li><li>Having a pleasurable sexual experience with your partner is a collaborative and intimate process.<br> collaborative 合作的 intimate 亲密的</li><li>He confessed to the murders of at least 30 young women and girls, although the actual number of his victims is unknown.<br> confess 承认 confessed 公开的 murder 谋杀 victim 受害者</li><li>Bundy was known for his charm and good looks, which he used to gain the trust of his victims before abducting and killing them.<br> charm 魅力 cruel 残忍 abduct 拐、绑架</li><li>He was eventually captured, convicted, and sentenced to death.<br>eventually 最终 capture 捕捉 convict 定罪 sentence 句子、判处</li><li>Bundy’s case and his charismatic personality have made him one of the most infamous serial killers in American history.<br>charismatic 旖旎、神赐的 infamous 臭名昭著的 serial 连续的</li><li>However, he had a troubled childhood, with some reports suggesting that he exhibited signs of violence and disturbing behavior from a young age.<br>exhibit 展示 disturbing 烦扰的、令人不安的</li><li>He would often approach his victims in public places, pretending to be injured or in need of assistance.<br> pretend 假装</li><li>Once he gained their trust, he would overpower them and take them to secluded locations where he would assault and kill them.<br>overpower 压倒 secluded 僻静的 assault 突击</li><li>Despite being a suspect in several disappearances, Bundy managed to evade capture for years.<br>suspect 怀疑、可疑的、嫌疑人 several 几个 disappearance 消失,这里指失踪案 evade 逃避</li><li>He moved across different states, committing murders in Washington, Oregon, Utah, and Colorado. However, his luck eventually ran out when he was arrested in 1975 for a traffic violation.<br>traffic violation 交通违规 ran out 耗尽</li><li>He would sometimes pretend to be a police officer or use his charm to manipulate them.<br>manipulate 操纵</li><li>He was known for his ability to blend in and appear non-threatening, which allowed him to continue his crimes for an extended period.<br>to blend in 融入 threatening 威胁性 extended 长期的</li><li>While in custody, Bundy was linked to multiple murders through physical evidence and witness testimonies. He was put on trial for the murder of two women in Florida and was found guilty.<br>custody 拘留 testimony 证词 trial 审判 guilty 有罪的</li><li>Bundy was sentenced to death and spent years appealing his conviction.<br>appeal 呼吁、上诉 conviction 定罪</li><li>He became infamous for his charisma and ability to captivate the public and media.<br>charisma 魅力 captivate 使着迷 media 媒体</li><li>His case and the details of his crimes continue to fascinate and horrify people to this day. Bundy’s story has been the subject of numerous books, documentaries, and films, cementing his status as one of the most notorious serial killers in history.<br>horrify 恐惧 cementing 巩固 notorious 臭名昭著的</li></ol></li><li>new words by new way at Thirteenth<ol><li>Census records reveal that several men by the name of John Worthington and Lloyd Marshall lived near Louise when Bundy was conceived.<br> census 人口普查 record 记录 reveal 揭示、泄露 conceive 怀孕、设想、构想</li><li>Bundy expressed a lifelong resentment toward his mother for never talking to him about his real father, and for leaving him to discover his true parentage for himself.<br> lifelong 终身的 resentment 怨恨 parentage 亲子关系 leave sb to do sth. 让某人做某事</li><li>He also occasionally exhibited disturbing behavior at an early age.<br> occasionally 偶尔 occasion 场合 exhibit 展示 prohibit 禁止 disturbing 令人不安</li><li>Louise’s younger sister, Julie Cowell, recalled awakening from a nap to find herself surrounded by knives from the kitchen, and 3-year-old Ted standing by the bed, smiling.<br> recall 回忆起 awakening 睡醒</li><li>He liked to inflict pain and suffering and fear.<br> inflict 使遭受打击 suffering 苦楚、痛苦</li><li>In some interviews, Bundy spoke warmly of his grandparents and told Rule that he “identified with,” “respected,” and “clung to” his grandfather.<br> identified with 相同于、认同 identified 确认、鉴定、认出 clung to 牢牢抓住、依恋</li><li>In 1987, however, he and other family members told attorneys that Samuel was a tyrannical bully who beat his wife and dog, swung neighborhood cats by their tails, and expressed racist and xenophobic attitudes.<br> attorney 律师 tyrannical 残暴的、专横的 bully 恶霸 beat 打 swung swing的过去分词,摇摆、甩 tail 尾巴 racist 种族主义的 xenophobic 排外的 attitude 态度</li><li>He would sometimes speak aloud to unseen presences,and at least once flew into a violent rage when the question of Bundy’s paternity was raised.<br> unseen 看不见的 presence 出席、存在、感觉在附近的人 fly into 爆发 rage 愤怒 violent rage 暴怒 paternity 父亲的身份</li><li>Bundy described his grandmother as a timid and obedient woman who periodically underwent electroconvulsive therapy for depression and feared to leave their house toward the end of her life.<br> timid 胆怯的 obedient 唯命是从的 periodically 定期地 underwent 经历 electroconvulsive 电惊厥的 therapy 治疗 depression 沮丧、抑郁症 </li><li>These descriptions of Bundy’s grandparents have been questioned in more recent investigations.<br>question 动词:质疑 investigation 侦察</li><li>Some locals remembered Samuel as a “fine man”, if a bit eccentric, and expressed bewilderment at the reports of him being violent.<br>eccentric 古怪的 bewilderment 困惑 being 存在</li></ol></li><li>new words at Fourth week<ol><li>Be confident but not arrogant: Confidence can be attractive, but avoid coming across as overly cocky or boastful.<br> arrogant 傲慢的、自大的 attractive 有吸引力的 attack 攻击<br> attach 系上、把…附 cocky 自大的 boastful 自夸的 come across as 给人…的印象</li><li>“The characterization that Sam was a raging alcoholic and animal abuser was a convenient characterization used to make people justify why Ted was the way he was,” said one of Bundy’s cousins.<br> characterization 刻画、塑造 raging 严重的 alcoholic 酒精的;嗜酒如命者 abuser 施暴者 justify 证明…正确</li></ol></li></ul><h2 id="September"><a href="#September" class="headerlink" title="September"></a>September</h2><h3 id="second-week-1"><a href="#second-week-1" class="headerlink" title="second week"></a>second week</h3><ul><li>To Michaud and Aynesworth, he described roaming his neighborhood, picking through trash barrels in search of pictures of naked women and to attorney and author Polly Nelson he said that he perused detective magazines, and crime novels for stories that involved sexual violence, particularly when the stories were illustrated with pictures of dead or maimed women.<br> roam 漫步、游荡、闲逛 barrel 桶、一桶 naked 裸体的 peruse 精读<br> persuade 说服 detective 侦探 illustrate 给…插图、说明 maim 使残废 dead 做名词时,表示死人;death是死亡;</li></ul><h3 id="third-week-1"><a href="#third-week-1" class="headerlink" title="third week"></a>third week</h3><ul><li>In a letter to Rule, however, he asserted that he “never, ever read fact-detective magazines, and shuddered at the thought that anyone would.<br> assert 声称、宣称 shudder 打颤、发抖</li><li>He once told Michaud that he would consume large quantities of alcohol and “canvass the community” late at night in search of undraped windows where he could observe women undressing, or “whatever could be seen.”<br> canvass 拉票、游说 undraped 未用布遮盖的 drape 悬挂、遮住 </li><li>“He hung one of the stray cats in the neighborhood from one of the clothes lines in the backyard, doused it in lighter fluid and set it on fire and I heard that cat squealing.”<br> stray cat 流浪猫 douse 倒…液体 in lighter 打火机 fluid 液体 squealing 尖叫、告发、告密</li><li>One little girl went over the top of one of Ted’s tiger traps and got the whole side of her leg slit open with the sharpened point of the stick that she landed on.<br> trap 陷阱 slit 一道长口 sharp 锐利的 sharpen 锐化 land on 着陆</li><li>He told journalists Michaud and Aynesworth that he “chose to be alone” as an adolescent because he was unable to understand interpersonal relationships<br> journalist 记者 adolescent 青少年 interpersonal 人际的</li></ul><h2 id="October"><a href="#October" class="headerlink" title="October"></a>October</h2><h3 id="last-week"><a href="#last-week" class="headerlink" title="last week"></a>last week</h3><ul><li>Blockchain is a decentralized distributed ledger technology that uses encryption algorithms to package transaction records into blocks and link them in chronological order to form an immutable chain structure. In simple terms, it allows everyone to maintain the same ledger, achieving value immutability in an Internet where information can be replicated.</li></ul><p>decentralized 去中心化的 distribute 分发 ledger 账本 encryption 加密 algorithm 算法 transaction 交易 chronological 按时间顺序的 immutable 不可变的 term 条款、说辞 immutability 不变 replicate 复制、再生</p><ul><li>To ensure a low entry barrier for participation, Bitcoin controls the block generation time for the entire network to approximately 10 minutes, resulting in an average Transactions Per Second (TPS) in the single digits. Ethereum has a block generation time of about 12 seconds, with an average TPS of only a few dozen. This falls short compared to the economic activities of traditional Web2.</li></ul><p>barrier 障碍 digit 个位数、手指、脚趾 dozen 一打、十来个 </p><ul><li>After understanding the fundamental principles of blockchain, we naturally consider the following two approaches to enhance performance:</li></ul><p>fundamental 基本的 principle 原理 approach n.方法 v.接近</p><ul><li>Increase the size of individual blocks to accommodate more transactions.</li></ul><p>This approach leads to rapid bloating of the blockchain ledger, requiring increasingly higher performance from participating validating machines, raising the entry barrier, and gradually reducing the decentralization and security of the entire network. Bitcoin Cash (BCH), which forked from Bitcoin, increased the block size from 1MB to 32MB, while Bitcoin Satoshi’s Vision (BSV) even more aggressively removed the block size limit, allowing an unlimited amount of information to be incorporated into a block.</p><p>accommodate 容纳 rapid 快速的 bloat 膨胀 aggressively 有进攻性地 incorporate 合并</p><ul><li>Decrease the block generation time and aim to generate more blocks within a certain period to process more transactions.</li></ul><p>This approach imposes higher requirements on the network conditions of nodes, increasing the entry barrier. It also affects the stability of data synchronization across the network because node clusters physically far apart are prone to divergent opinions on the latest blocks, leading to forks. Forked chains need to compete to produce a new longest chain, discarding one branch and resulting in the rewriting of many transactions during a certain period, known as “block reorganization”. Polygon experienced 157 block reorganization events in 2023.</p><p>impose 强制执行 affect 影响 synchronization 同步 cluster 集群 prone 易遭受的 divergent 有分歧的</p>]]></content>
<summary type="html">writing English</summary>
<category term="生活" scheme="http://example.com/categories/%E7%94%9F%E6%B4%BB/"/>
</entry>
<entry>
<title>writing English</title>
<link href="http://example.com/2023/02/01/EnglishPractice/"/>
<id>http://example.com/2023/02/01/EnglishPractice/</id>
<published>2023-02-01T01:38:02.000Z</published>
<updated>2024-01-15T07:36:03.594Z</updated>
<content type="html"><![CDATA[<h2 id="September"><a href="#September" class="headerlink" title="September"></a>September</h2><h3 id="Second-week"><a href="#Second-week" class="headerlink" title="Second week"></a>Second week</h3><ul><li><p>自信但不傲慢:自信可能很有吸引力,但不要给人留下过于自大或自吹自擂的印象。</p><ol><li>Be confident but not arrogant: Confidence can be attractive, but avoid coming across as overly cocky and boastful.</li><li>Be confident but not arrogant: Confidence can be attractive, but avoid coming across as overly cocky and boastful.</li><li>Be confident but not arrogant: Confidence can be attractive but avoid coming across as overly cocky and boastful.</li><li>Be confident but not arrogant: Confidence can be attractive, but avoid coming across as overly cocky and boastful.</li></ol></li><li><p>然而,1987年,他和其他家庭成员告诉律师,塞缪尔是一个暴虐的恶霸,他殴打妻子和狗,用邻居的猫甩尾巴,并表达种族主义和仇外态度。</p><ol><li>In 1987, however, he and other family members told attorneys that Samuel was a tyrannical bully who beat his wife and dog, swung neighborhood cats by their tails, and expressed racist and xenophobic attitudes. </li><li>In 1987, however, he and other family members told atterneys that Samuel was a tyrannical bully who beat his wife and dog, swung neighborhood cats by thier tails, and expressed racist and xenophobic attitudes.</li><li>In 1987, however, he and other family members told atterneys that Samuel was a tyrannical bully who beat his wife and dog, swung neighborhood cats by thier tails, and expressed racist and xenophobic attitudes.</li><li>In 1987, however, he and other family members told atterneys that Samuel was a tyrannical bully who beat his wife and dog, swung neighborhood cats by their tails, and expressed racist and xenophobic attitudes.</li></ol></li><li><p>“将Sam描绘成一个狂暴的酗酒者和虐待动物者是一种方便的描述,用来让人们证明泰德为什么会是这样,”Bunndy的一个堂兄弟说。</p><ol><li>“The characterization that Sam was a raging alcoholic and animal abuser was a convenient characterization used to make people justify why Ted was the way he was,” said one of Bundy’s cousins.</li><li>“The characterization that Sam was a raging alcoholic and animal abuser was a convenient characterization used to make people justify why Ted was the way he was,” said one of Bunndy’s consins.</li><li>“The characterization that Sam was a raging alcoholic and animal abuser was a convenient characterization used to make people justify why Ted was the way he was”, said one of Bunndy’s consins.</li><li>“The characterization that Sam was a raging alcoholic and animal abuser was a convenient characterization used to make people justify why Ted was the way he was”, said one of Bunndy’s consins.</li></ol></li><li><p>他向Michaud和Aynesworth描述了自己在附近游荡,在垃圾桶里搜寻裸体女性的照片。他向律师兼作家Polly Nelson描述了自己阅读侦探杂志和犯罪小说,寻找涉及性暴力的故事,尤其是当故事中有死亡或致残女性的照片时。</p><ol><li>To Michaud and Aynesworth, he described roaming his neighborhood, picking through trash berrels in search of pictures of naked women and to attorney and author Polly Nelson he said that he peruse detective magazines and crime novels for stories that involved sexual violence, particularly when the stories were illustrated with pictures of dead or maimed women.</li><li>To Michaud and Aynesworth, he described roaming his neighborhood, picking through trash barrels in search of pictures of naked women and to attorney and author Polly Nelson he said that he perused detective magazines, and crime novels for stories that involved sexual violence, particularly when the stories were illustrated with pictures of dead or maimed women. </li><li>To Michaud and Aynesworth, he described roaming his neighborhood, picking through trash barrels in search of pictures of naked women and to attorney and author Polly Nelson he said that he perused detective magazines, and crime novels for stories that involved sexual violence, particularly when the stories were illustrated with pictures of dead or maimed women.</li><li>To Michaud and Aynesworth, he described roaming his neighborhood, picking through trash barrels in search of pictures of naked women and to attorney and author Polly Nelson he said that he perused detective magazines and crime novels for stories that involved sexual violence, particularly when the stories were illustrated with pictures of dead or maimed women.</li></ol></li><li><p>一个小女孩越过Ted的一个老虎陷阱的顶部,用她落在上面的棍子的尖锐尖端划开了她的整条腿。</p><ol><li>One little girl went over the top of one of Ted’s tiger traps and got the whole side of her leg slit open with the sharpened point of the stick that she landed on.</li></ol></li></ul><h2 id="前后缀"><a href="#前后缀" class="headerlink" title="前后缀"></a>前后缀</h2><h3 id="名词后缀"><a href="#名词后缀" class="headerlink" title="名词后缀"></a>名词后缀</h3><ol><li>-ion(前接动词)</li><li>-ant xx的人(前接词根)</li><li>-or -er xx者(前接动词)</li><li>-itude xx度 (前接词根)altitude</li><li>-us (前接词根)</li><li>-ule </li><li>-ence(前接名词)</li><li>-ess (前接动词)女XX</li><li>-est</li></ol><h3 id="形容词后缀"><a href="#形容词后缀" class="headerlink" title="形容词后缀"></a>形容词后缀</h3><ol><li>-ant xx的(前接词根)</li><li>-org xx的(前接动词)</li><li>-arg xx的(前接名词)</li><li>-ed xx的(前接名词)</li><li>-able 能够xx的(前接名词)</li><li>-ent (前接名词)</li><li>-al xx的(前接名词)</li><li>-ity xx的(状态) activity</li><li>-less 没有XX的 useless</li><li>-ous 多XX的</li></ol><h3 id="动词后缀"><a href="#动词后缀" class="headerlink" title="动词后缀"></a>动词后缀</h3><ol><li>-ate</li><li>-ize 使xx</li></ol><h3 id="动词前缀"><a href="#动词前缀" class="headerlink" title="动词前缀"></a>动词前缀</h3><ol><li>im- 进入(后接动词/名词/形容词) immigrate/immigration/immigrant 移居进入(的人)</li><li>e- 向外</li><li>in- 向内、加强、不XX(表示否定)、使…</li><li>ab- 加强</li><li>red- 加强</li><li>de- 去除</li><li>re- 重新</li><li>ex- 使</li></ol><h2 id="词根"><a href="#词根" class="headerlink" title="词根"></a>词根</h2><ol start="0"><li>dur 久</li><li>alt 变、高</li><li>dol 悲伤</li><li>migr 迁徙、移居</li><li>holic 喜欢的</li><li>tango/tangle 纠缠</li><li>fla 呼啦、吹气、风</li><li>und 充溢</li><li>err 错误</li><li>labor 劳动</li><li>am 爱慕</li><li>jelly 果冻、胶状物</li><li>ee 被动方</li><li>conq 攻克</li><li>bhor 不喜欢</li><li>vita 命</li><li>haus 耗尽</li><li>mon 一、专</li><li>vigor 精力</li></ol>]]></content>
<summary type="html">writing English</summary>
<category term="生活" scheme="http://example.com/categories/%E7%94%9F%E6%B4%BB/"/>
</entry>
<entry>
<title>react hook learning notes</title>
<link href="http://example.com/2023/02/01/react-hook/"/>
<id>http://example.com/2023/02/01/react-hook/</id>
<published>2023-02-01T01:38:02.000Z</published>
<updated>2024-01-15T07:36:03.607Z</updated>
<content type="html"><![CDATA[<h2 id="react-hook学习笔记"><a href="#react-hook学习笔记" class="headerlink" title="react hook学习笔记"></a>react hook学习笔记</h2><h3 id="useState"><a href="#useState" class="headerlink" title="useState"></a>useState</h3><ul><li>需要使用变量时,通过解构的方式使用useState(),参数为变量的初始值<code>const [productId, setProductId] = useState();</code></li><li>setProductId(更新数据)的两种方式<ol><li>直接调用函数传入新值,如<code>setProductId(newVal)</code></li><li>使用函数式更新,如<code>setProductId(()=>{return newVal})</code></li><li>如果定义的是引用类型变量如<code>const [teacher, setTeacher] = useState({name:'Ryan',sex:'man'})</code>,更新时可以使用函数式更新并借助拓展运算符,如<code>setTeacher(()=>{return {...teacher,name:'Chris'}})</code>,把新的属性合并到新的对象中</li></ol></li></ul><h3 id="useState惰性初始化"><a href="#useState惰性初始化" class="headerlink" title="useState惰性初始化"></a>useState惰性初始化</h3><ul><li>惰性state<br> initialState 参数只会在组件的初始渲染中起作用,后续渲染会被忽略</li><li>复杂初始state的定义<br> 初始state需要通过复杂计算获得,则可以传入一个函数,在函数中计算并返回初始的 state<br> <strong>如果更新的数据与上次一样,React 将跳过子组件的渲染及 effect 的执行</strong></li></ul><h3 id="useContext"><a href="#useContext" class="headerlink" title="useContext"></a>useContext</h3><ol><li>把需要父子组件通信的数据使用createContext函数创建</li><li>在父组件中使用.Provider包裹子组件,把需要传递的数据通过父组件的value属性传递</li><li>在子组件中使用useContext方法获取到value传递的值</li></ol><h3 id="useEffect"><a href="#useEffect" class="headerlink" title="useEffect"></a>useEffect</h3><ul><li>React在完成对DOM的更新后会执行,默认情况下,React会在每次渲染后调用副作用函数,包括第一次渲染的时候</li><li>useEffect有两个参数,第一个参数是副作用的处理函数,第二参数是在与该副作用关联的状态或属性依赖数组</li><li>第二个参数为空数组时,表示该副作用函数不依赖任何值的变化,只在组件渲染后执行一次</li><li>useEffect相当于Vue生命周期中的mouted,在组件渲染后执行,它的return函数相当于destroy在下次渲染前执行</li></ul><h3 id="useReducer"><a href="#useReducer" class="headerlink" title="useReducer"></a>useReducer</h3><ul><li>useReducer接收3个参数,第一个参数是处理状态更新的reducer,第二个参数是状态初始值,第三个参数是状态初始化函数<code>const [state, dispathch] = userReducer(reducer, initialArg, init);</code></li><li>指定初始state<ol><li>将初始state作为第二个参数传入 <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">const [state, dispatch] = useReducer(</span><br><span class="line"> reducer,</span><br><span class="line"> {count: initialCount}</span><br><span class="line">)</span><br></pre></td></tr></table></figure></li><li>惰性初始化, 将第二个参数作为第三个函数入参传入 <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"></span><br></pre></td></tr></table></figure></li></ol></li></ul><h3 id="useCallback"><a href="#useCallback" class="headerlink" title="useCallback"></a>useCallback</h3><ul><li></li></ul><h3 id="useMemo"><a href="#useMemo" class="headerlink" title="useMemo"></a>useMemo</h3><ul><li>useMemo传入的函数内部需要有返回值</li><li>useMemo只能声明在函数式组件内部</li></ul><h3 id="react-route"><a href="#react-route" class="headerlink" title="react-route"></a>react-route</h3>]]></content>
<summary type="html">react hook学习笔记</summary>
<category term="技术" scheme="http://example.com/categories/%E6%8A%80%E6%9C%AF/"/>
</entry>
</feed>