学iOS开发(一)——实现一款App之Foundation框架的使用
时间:2014-05-21 23:57:26
收藏:0
阅读:579
当你着手为你的应用编写代码的时候,你会发现有许多可供使用的Objective-C的框架类,其中尤其重要的就是基础框架类,它为平台所有的应用提供基础服务。基础框架类中包括了表示字符串和数字等基本数据类型的值类(value classes),也有用来存储其他对象的集合类(collection classes)。你将会依赖值类和集合类为你的ToDoList app编写大量代码。
值对象(Value
Objects)
Foundation框架提供了生成字符串、二进制数据、日期和时间、数字以及其他值对象的类。
值对象封装了C语言中的基本数据类型,并提供针对相应数据类型操作的方法。在程序调用中,你会经常遇到将值对象作为参数或返回值的方法和函数。框架中的不同部分,乃至不同框架之间都可以通过值对象类传递数据。
Foundation框架中值对象的例子:
?NSString and
NSMutableString
?NSData and
NSMutableData
?NSDate
?NSNumber
?NSValue
因为值对象代表的是标量值,你可以在集合类和其他任何需要的类中使用它们。相比它封装的基元数据,值对象可以让你更简单高效地操作它封装的值。以NSString类为例,它包含了查找替换子字符串、把字符串写入文件或URL、利用字符串构建文件系统路径等方法。
你可以用基元数据创建一个值对象(如果有必要的话,将其作为参数传递给某一方法),之后就可以通过该对象来访问被封装的数据。下面以NSNumber类来演示说明以上创建值对象的方法。
- int n = 5; // Value assigned to primitive type
- NSNumber *numberObject = [NSNumber numberWithInt:n]; // Value object created from primitive type
- int y = [numberObject intValue]; // Encapsulated value obtained from value object (y == n)
大多数值类通过声明初始化器和类工厂方法来创建它们的实例。类工厂方法可以完成实例的分配和初始化,返回一个被创建的对象。例如,NSString类声明了一个string类方法,可以分配并初始化该类的一个新实例,并作为返回值返回给你的代码使用。
- NSString *string = [NSString string];
除了创建值对象,并让你访问它们封装的值,多数值类都提供了诸如对象比较之类的简单操作方法。
字符串
Objective-C支持同C语言一样的惯例来指定字符串:通过单引号表示单个字符,双引号表示字符串,但是Objective-C框架一般不使用C字符串,它们通常使用NSString对象。
NSString类提供了一个字符串的封装,具有以下优势:内置内存管理功能可以存储任意长度的字符串、支持不同的字符编码(尤其是Unicode)以及字符格式化的方法。因为你常常会用到这样的字符串,所以Objective-C提供了一种从常量值创建NSString对象的简便方法。想要使用该常量,可在字符串的双引号前面加一个@符号即可,如下例所示。
- // Create the string "My String" plus carriage return.
- NSString *myString = @"My String\n";
- // Create the formatted string "1 String".
- NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
- // Create an Objective-C string from a C string.
- NSString *fromCString = [NSString stringWithCString:"A C string" encoding:NSUTF8StringEncoding];
数字
Objective-C为创建NSNumber对象的提供了简化符号,除去了调用初始化器或者类工厂方法创建这些对象的需要。只需简单地在数值前面加@符号即可,你还可以在数值之后加一个类型指示符。比如,想要创建一个封装了整数值和双精度值的NSNumber对象,你需要编写如下代码:
- NSNumber *myIntValue = @32;
- NSNumber *myDoubleValue = @3.22346432;
你甚至可以使用NSNumber常量来创建封装布尔类型和字符类型的对象,如下所示:
- NSNumber *myBoolValue = @YES;
- NSNumber *myCharValue = @‘V‘;
你可以通过U、L、LL、和F后缀来创建分别代表无符号整型、长整型、超长整型和浮点类型的NSNumber对象。如下代码示例创建了一个封装了浮点值类型的NSNUmber对象:
NSNumber *myFloatValue =
@3.2F;
集合对象
Objective-C中的大部分集合对象都是NSArray、NSSet和NSDictionary这些基本集合类的实例。这些类用来管理群组对象,所以你添加到集合中的实例必须为一个Objective-C类。如果你需要添加标量数值,你必须创建一个合适的NSNumber或NSValue实例来代表它。
在集合被销毁前,集合中存储的成员对象不能被销毁。这是因为集合类采用强引用来维护它的成员对象。除了跟踪维护它对象外,集合类还提供枚举、访问特定对象、判断某一对象是否在集合内等功能。
NSArray, NSSet和
NSDictionary类的内容在集合创建时即被初始化,之后在使用中不能再被改变,这种类叫不可变类。每一个集合类都有一个可变的子类允许你随意添加删除成员对象。不同集合类组织它们成员对象的方式是不同的:
?NSArray和NSMutableArray—存储有序对象的数组。你可以通过在数组中指定位置来访问一个成员对象。数组中第一个元素的索引为0。
?NSSet和NSMutebleSet—存储无序对象的集合。每个元素在集合中具有唯一性。你只能通过测试或筛选的方法来访问集合中的对象。
?NSDictionary和NSMutableDictionary—通过键值对存储的一个词典。键是一个独特的标识符,通常是一个字符串,值就是你想要存储的对象。你可以通过指定键来访问该对象。
数组
数组(NSArray)用来表示一组有序对象,唯一的要求是每个对象必须是一个Objective-C对象,至于每个对象是不是同一个类的实例没有要求。
为了维护数组的有序性,元素的索引从0开始,如下图所示:
![bubuko.com,布布扣](data:image/bmp;base64,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)
创建数组
与本章前面介绍的值类相同,你可以通过分配和初始化、工厂方法或者数组常量来创建一个数组。根据对象个数的不同,有很多初始化和工厂方法可供使用:
- + (id)arrayWithObject:(id)anObject;
- + (id)arrayWithObjects:(id)firstObject, ...;
- - (id)initWithObjects:(id)firstObject, ...;
由于arrayWithObjects:和initWithObjects:方法都是可变参数长度并以nil结束,初始化如下代码所示:
NSArray *someArray
=
[NSArray
arrayWithObjects:someObject, someString, someNumber, someValue,
nil];
上例创建了一个与之前类似的数组,其中第一个对象someObject的索引值是0,最后一个对象someValue的索引值是3。
如果中间某一个值是nil,数组可能会被截断。
- id firstObject = @"someString";
- id secondObject = nil;
- id thirdObject = @"anotherString";
- NSArray *someArray =
- [NSArray arrayWithObjects:firstObject, secondObject, thirdObject, nil];
本例中,someArray只包含firstObject,因为secondObject的值是nil,因此被当作数组的结束符。
可以使用如下简便的语法来创建一个数组常量:
- NSArray *someArray = @[firstObject, secondObject, thirdObject];
当使用这个语法是,不要用nil来结束对象列表,实际上,nil是一个不存在的值。例如,你在执行以下代码时会得到一个运行异常:
- id firstObject = @"someString";
- id secondObject = nil;
- NSArray *someArray = @[firstObject, secondObject];
- // exception: "attempt to insert nil object"
查询数组对象
创建完数组之后,你可以查询其中个的信息,比如它包含多少对象,或它是否包含某一给定对象。
- NSUInteger numberOfItems = [someArray count];
- if ([someArray containsObject:someString]) {
- ...
- }
你还可以通过一个给定的索引来查询数组的项目,如果尝试请求一个不存在的索引,那么运行时你将得到一个越界异常。为了防止异常,在使用前请首先检查数组中项目的个数。
- if ([someArray count] > 0) {
- NSLog(@"First item is: %@", [someArray objectAtIndex:0]);
- }
本例子检查了对象个数是否大于零,如果是,Foundation框架函数NSLog输出一个数组中第一个元素的说明,它的索引为0。
另外一种方法是使用objecAtIndex,你还可以像C语言那样,使用方括号语法查询数组元素,上一个例子还可以写成这样:
- if ([someArray count] > 0) {
- NSLog(@"First item is: %@", someArray[0]);
- }
数组对象排序
NSArray类为对象排序提供了一系列方法。因为NSArray是不可变的,因此这些方法会返回一个包含排序后对象的新数组。
例如,你可以通过对每个字符串调用compare:方法来排序字符串数组:
- NSArray *unsortedStrings = @[@"gammaString", @"alphaString", @"betaString"];
- NSArray *sortedStrings =
- [unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
可变性
尽管NSArray类本身是不可变的,但是它可以包含可变对象,例如,你可以在不可变数组中添加一个可变字符串,如下所示:
- NSMutableString *mutableString = [NSMutableString stringWithString:@"Hello"];
- NSArray *immutableArray = @[mutableString];
于是你可以随意改变字符串的内容。
- if ([immutableArray count] > 0) {
- id string = immutableArray[0];
- if ([string isKindOfClass:[NSMutableString class]]) {
- [string appendString:@" World!"];
- }
- }
如果想在数组创建后添加或删除数组中的对象,你可以使用NSMutableArray,该类添加了一系列方法来添加删除、替换一个或多个对象。
- NSMutableArray *mutableArray = [NSMutableArray array];
- [mutableArray addObject:@"gamma"];
- [mutableArray addObject:@"alpha"];
- [mutableArray addObject:@"beta"];
- [mutableArray replaceObjectAtIndex:0 withObject:@"epsilon"];
本示例创建了一个由对象@"epsilon",
@"alpha"和 @"beta"组成的数组。对于可变数组,你可以在不生成新数组的情况下对数组进行排序,如下所示:
- [mutableArray sortUsingSelector:@selector(caseInsensitiveCompare:)];
本例中,数组元素按升序排列,不区分大小写。
集
集对象与数组类似,但是它包含的是无序互异对象。
由于集是无序的,因此在测试成员对象时性能比数组要好。集是不可变的,因此它的内容必须在创建时指定。
- NSSet *simpleSet =
- [NSSet setWithObjects:@"Hello, World!", @42, aValue, anObject, nil];
同NSArray类一样,initWithObjects:和setWithObjects:方法是可变长度的参数,必须以nil结束。NSSet的可变子类是NSMutableSet。
每个对象集只存储一次,即使你不止一次添加一个对象。
- NSNumber *number = @42;
- NSSet *numberSet =
- [NSSet setWithObjects:number, number, number, number, nil];
- // numberSet only contains one object
词典
与简单的维护一个有序或无序的集合对象不同,词典(NSDictionary)使用给定键值对存取对象,它可以被用于检索。通常使用字符串对象作为字典的键。
![bubuko.com,布布扣](data:image/bmp;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAChAqYDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9U6KKKACiiigArF8aazN4f8Lalf2wVrmGI+VvGVDk7VJ9gSCa2q5X4of8iJqv+6n/AKMWgT2OWPgXRJTu1Cwg1m8/5aXmoxrPLI3cksDgf7IwB0ApP+EA8Mf9C5pP/gFH/wDE10En+sb6mm11WR5l33MH/hAPDH/QuaT/AOAUf/xNH/CAeGP+hc0n/wAAo/8A4mt6iiwXZg/8IB4Y/wChc0n/AMAo/wD4mj/hAPDH/QuaT/4BR/8AxNb1FFguzB/4QDwx/wBC5pP/AIBR/wDxNH/CAeGP+hc0n/wCj/8Aia3qKLBdmD/wgHhj/oXNJ/8AAKP/AOJo/wCEA8Mf9C5pP/gFH/8AE1vUUWC7MH/hAPDH/QuaT/4BR/8AxNH/AAgHhj/oXNJ/8Ao//ia3qKLBdmD/AMIB4Y/6FzSf/AKP/wCJo/4QDwx/0Lmk/wDgFH/8TW9RRYLswf8AhAPDH/QuaT/4BR//ABNH/CAeGP8AoXNJ/wDAKP8A+JreoosF2YP/AAgPhjt4d0oH1WzjBH4gVv8AgO4msdV1PRDNJPZ28UN1a+c5d4kcupj3HkqDHkZyQGx0ApKb4U/5HrVv+wba/wDo24qJrQ2ot81juKKKKwO48z1W2i8Y69q/9qJ9r0+xuPsdvYS8w5CIzyOnR2JfA3ZACjHJNV/+EA8Mf9C5pP8A4BR//E1c0r/kK+JP+wrJ/wCioq0q6IpWR51RvmZg/wDCAeGP+hc0n/wCj/8AiaP+EA8Mf9C5pP8A4BR//E1vUVViLswf+EA8Mf8AQuaT/wCAUf8A8TR/wgHhj/oXNJ/8Ao//AImt6iiwXZg/8IB4Y/6FzSf/AACj/wDiaP8AhAPDH/QuaT/4BR//ABNb1FFguzB/4QDwx/0Lmk/+AUf/AMTR/wAIB4Y/6FzSf/AKP/4mt6iiwXZg/wDCAeGP+hc0n/wCj/8AiaP+EA8Mf9C5pP8A4BR//E1vUUWC7MH/AIQDwx/0Lmk/+AUf/wATR/wgHhj/AKFzSf8AwCj/APia3qKLBdmD/wAIB4Y/6FzSf/AKP/4mj/hAPDH/AELmk/8AgFH/APE1vUUWC7MH/hAPDH/QuaT/AOAUf/xNNbTrXwVJa6losCaaqXMMVza2w2Q3EUkiowaMfLuG/cGAzkYzgkV0FY/i3/kCN/182v8A6UR0mlYqLfMtT06iiiuY9I5T4gX1ylvpmm2txJaNqV0YZbiE7ZEiWN5HCHsx2bc9RuJHIFct/wAID4ZPLaBpsrd3mtkkdvcswJJ9ya6Lx7/yGPC3/X3N/wCk0tR1tBaHFWb5rGD/AMIB4Y/6FzSf/AKP/wCJo/4QDwx/0Lmk/wDgFH/8TW9RWljC7MH/AIQDwx/0Lmk/+AUf/wATR/wgHhj/AKFzSf8AwCj/APia3qKLBdmD/wAIB4Y/6FzSf/AKP/4mj/hAPDH/AELmk/8AgFH/APE1vUUWC7MH/hAPDH/QuaT/AOAUf/xNH/CAeGP+hc0n/wAAo/8A4mt6iiwXZg/8IB4Y/wChc0n/AMAo/wD4mj/hAPDH/QuaT/4BR/8AxNb1FFguzB/4QDwx/wBC5pP/AIBR/wDxNH/CAeGP+hc0n/wCj/8Aia3qKLBdmD/wgHhj/oXNJ/8AAKP/AOJo/wCEA8Mf9C5pP/gFH/8AE1vUUWC7MH/hAPDH/QuaT/4BR/8AxNKPAfhxDuh0Wys5R92eziEEqH1V0wyn6Gt2iiwXfc0vAOp3Wo6E8d7Mbm6srmaze4YAGXY5CuQOMlduffNdJXI/Df8A48NY/wCwtc/+hCuurme56UdUhrsERmPQDJryXTtGs/GGn2+s67axatd3yC4C3iiWO3RuVjjRuFCggZAyTkk816xcf8e8v+6f5V5r4M/5E/Qv+vGD/wBFirgtTCu2krEP/CAeGP8AoXNJ/wDAKP8A+Jo/4QDwx/0Lmk/+AUf/AMTW9RW1jkuzB/4QDwx/0Lmk/wDgFH/8TR/wgHhj/oXNJ/8AAKP/AOJreoosF2YP/CAeGP8AoXNJ/wDAKP8A+Jo/4QDwx/0Lmk/+AUf/AMTW9RRYLswf+EA8Mf8AQuaT/wCAUf8A8TR/wgHhj/oXNJ/8Ao//AImt6iiwXZg/8IB4Y/6FzSf/AACj/wDiaP8AhAPDH/QuaT/4BR//ABNb1FFguzB/4QDwx/0Lmk/+AUf/AMTR/wAIB4Y/6FzSf/AKP/4mt6iiwXZg/wDCAeGP+hc0n/wCj/8AiaP+EA8Mf9C5pP8A4BR//E1vUUWC7MH/AIQDwx/0Lmk/+AUf/wATR/wgHhj/AKFzSf8AwCj/APia3qKLBdnOPrSfDG8ha0jdtJu43U6eHOyKVSuHjB+4CGYFRxkKQBzkrI+Kv/Htpn+/L/JaKwmtTtpNuOp88/Bz9srx98d/ibH8K9G1XSdD8R2evatLq+uX9kAo0y1uTHHa2UJOJrhkKlnPCLlsMcgemy/8FCvBQ+I03hi30TUruzOtS+GrTV47uzAu9UQMBAtt53nqjyKY1maMIWI5A5rfl/Yi8IDwzpVhZa3rem6zo3ii68WaV4itXhF7ZXNxKZJolJjKtC2drIyncAM5xT/DP7GeieD/AIlv4m0nxTrNpozazL4hPhqOG0EBvZGLv/pHk/aPJLkv5PmbQfbioNjIP7f/AIFbwjbeI4tH1u5sP+EPl8ZXiwxRtJZQJc/ZRbyDf/rmnDoB90eW5JABNekfs+fH23+P2gajqdvoF3oi2UyRb3vLW+trkOgdWhubaSSOTAOGGQVPBFeM/s+/shXukeFvjJL4iivvAOp/EHVppLW20TVFmudFsBK8sUUc6goMyzTuUAKkPtIPNerfs8fsx6P+z5d+LNStNXuda1nxPPBNqF1JZ2tlD+5RkjEdvbRxxIcMxZguWJyTQB7NXK/FD/kRNV/3U/8ARi11Vcr8UP8AkRNV/wB1P/Ri00D2Ksn+sb6mm06T/WN9TTa6jywrm/iN4xbwJ4QvNXhsTqd8JILSysRJ5f2m6nmSCCMvg7VMkiZbBwMnBxiukrmviP4Ofx34PvNIgvv7MvvMgu7K+8vzBbXUEyTwSFMjcokjTcuRlcjIzmkCPCLb41/Ejxymq+HvCwsL/Xp7GDVdI1q20mXT7SeGLUYILxYjdO6zx+U7lJQVJx9wbkJ9Jfxp4t+HnhPxhrfi60s74ReJLpNISXUrTT4k0pnUWzSTyMqLgbshsuSQME1nfBj4TX/gvxLPqWq6QdNe2sJNPsFtvEkuo2MEMkyyyQ29vJBG0Ee9FI3M5AwucAY7L4ofDWP4lado0Y1SfRdR0XU4tX0+9hgiuFjnRHQb4ZQUkUrK4wcEHBBBApaltq9jhdI/ags/FGieGLjw74Wvte1fXtXv9Di020v7YxxXVpE8kpNzuMbRFUyJFJyGHGeKxh8ZfEvxk1vwzpXgPUR4I+2eGL3xHdzalp8V7Ok0N0LRLMqW2BRKJd7qckIu0jOa7LwR+z9p3gvU9E1I6/qmsX+ma7qXiE3F6sSm5ub2ExTBwiKAgDEqFAxwOgrLb9me203T9EXw34w1nwzq2mWmoaadWtoLeaS4s7y5NzLC6SIVBWQgo4GVx3yaNR+6cF4a/ar8SX5s/Eb+FLzW/D8nw903xbqNlpkkMY01mluRdyK0hDSnbENkQOSIzyD19b1/4j3MXxJ+G+l2kN2ugeJPPlt9Tt3geC9IspJ1ikRv3sYCqrh06nCnjNc1q/7K+mSwpZ+H/FeteFdIbwtb+DbrT7JIJluNNiMh275ELJKwlceapyMnAyeNrXfCes6r8WfhzHYaB/ZvhLwYbmf+1JLuIrOJLFraK3ihDGTKmTlnCjCcE5FGonboYUv7W/hVPiY3hNLfzII9dXw1JqI1G2Eov2ITAs9/ntCJGEZmC4DZOCoLV1vhP4s3vjjW75dF8H3914Ytby705fEUl7bxxzXFuzpIEgLeYY/NRohJ3YZ27fmpujfCC48L+L77U9C8W3+l6HqGqvrN5oAsbWaN7mQhptk7oZI45GG5lB6ltpXOKm8HfCe48B+IbqXSPFmoQ+Fri+utSPhiS1geGOe4Znl2TlfNEZkdpBHnhj12/LRqLQ4nwR8UPiV8SPB/xPjh8KRaJrul3Wr6bol39ut5EW7hULbwyJuO5g7AtIfkOK7X4ZL8QV1zxB/wmZgOmfY9K/szyvKz5/2T/T87Ocef0zxj7vFXvBvw2PgjxN4j1Cx169l0nXL6bVJdEnhhMUF3NsMskcoUSYJTOxmIG447Y7OmkDa6BRRRTJCm+FP+R61b/sG2v/o24p1N8Kf8j1q3/YNtf/RtxUT2NqPxncUUUVzneeb6V/yFfEn/AGFZP/RUVaVZulf8hXxJ/wBhWT/0VFWlXTHZHmz+JnNfEfxi/gTwjc6rb2X9p37TQWVjYmTyxcXU8yQwIz4O1S8i7mwcKGODivCLL41/Efx2mp+H/C4sb7W5bS11fStat9Jl0+0uLZNRhgvVj+1O6zR+U7lJQVJ/uDKE+7fEjwdJ478IXOlW18NM1BZoL2wvjH5q291BMk0DsmRuUPGu5cjKlhkVwPwW+E1/4J8RXGo6ppDaY9vp7abYJb+JZdSsoIHmWV4beCSCNoYwyKV3F2AwucKMDvcFaxk+MvHPxJ8AaZp09/b/ANoXupfEs6Zp9haC333Wiy+abaLccKjEICXYhlAJJqbVv2stE0Tw7pE97oz6f4i1HVr/AEX+xNS1S1tI7e4smIuTJdyMIvLHybWGS3mIAvXHqPjLwPaeNZvDcl1cT250LWYNbgEO395LEsiqj5H3T5hzjngVxV5+z1ZJcR6lo/iG/wBG8Q2+t6lrdrqgt4bgRG/I+027QyKUeI7UxnDAopDccmoJp7mD4k+L9x4y+GngH4geDtZvdIsr7xJp+l3emtFbypOkuoJa3EUjFX+6RIFeJwDncCQRXWfE/Wdb8PfEf4XHTtbuLfTNY1x9Iv8ASvJhaCeP7HdTh9xQyK4aFB8rgYHTmtLxH8Lz4u+Hlt4a1bxHqE9/b3Nvfxa/FDBFcJdQTrPDKIlTysK6qNm3BUYOetL4x+GU3jPQvDkFx4m1C08QaBex6jZ+ILa3txN9pWKSJnaFkMRV0lkUptx82RggUxaHOeLf2h7Pwp4k1y1PhrUr/wAPeHb2y0/XfEUM0Kw6fPdeWY1ETN5kqqJ4TIyj5RIMbsHHPeHvilrk/wAcb/w94q8WHwdOutT2WleFLzw/tt9XslU+VLBqDDEk0gzJtR/lwU8vgmt7xL+zpaeJtd1a4m8Uarb6Jr11Y3+v6FFDB5Op3NqIgknmFd8IcQQiRUOGCADbk51de+EGoeLPFlhf67451XVPD2n6zHr1p4daztY447mNi0KmdUErRxsdwUnJwAWI4paj90z/AIXfFDxh4y+JfjrQNX8HrpelaJqUVpFepqEEhgDWcMwWRVYmQuZCQygBQwB5U1e+HXxiv/iXqV6dP8EanaeHrS+v9MbXLu8t1R7i1meJgkIbzCjNGQHxgE4I4JrZ0b4dN4f+I+ueKdP169httceK41HRHhhe3luI4FgSVZCvmIdkaZUNtJXOOTVnwR4Bg8A+F7zRdMv7hhcXt/frdTqjPFLdXEk7YGNpCPKQARyFGc809ROx5/Y/HeTQfhl8QPGOu6TqssnhzXpdPm0QG2aeE7rdFgheM7JFBnBDMdxyQegqef8AaJ+wQatY33g3U7TxhZa7aeH4fDgvLeRrq4uoRPAy3Ct5aoYt7MT9zy3GDxmOD9nB5fDfjDQtV8datq+n+KL8apeK9jaQsl15sEhkQogwD9nRdp4wSeuKm+KHwcTUH8TeJtKGsXnia/1jTNbtF0ya2imsrm0i8hHh+0funHls+5JThgzAEZFLUfu3ItL+I/jH4m3OhXXhnRZ/D1vpHie/0bxVYalJbySKkFpJtKMCQym4eDBQ5K8nAJruvhSPFQ+GfhceOTGfGQ0+L+2DDs2fasfvMeX8mM/3eK5n9njwLr3gbwfrf/CSyTNrGt6/fa3Il1NFLPGszLtWVogI9+EBIj+Vd20Ehc16hTRL7IKx/Fv/ACBG/wCvm1/9KI62Kx/Fv/IEb/r5tf8A0ojoew4/Ej06iiiuU9M43x7/AMhjwt/19zf+k0tR1J49/wCQx4W/6+5v/SaWo63hscNb4gr52+Kf7SGveF9U8StoFja3Vj4e+1brI6bc311qAtEja8lLQuq2kCNKkIkZZCz7jt2rX0TXz38Q/wBn/VtS8S67caZbnVNF1x7pp47TX5dGvYEu1jW9tmdYZVmt5WiSUD5HRy2GINU79DKNr6nR6LN8WtT8aafcsbZfCVz4rlm2k2+8aA+mKYAcfNv+2E5x8+Ovy1jeCP2srfxn4m0XTG8EavpVjq09rDDqc95bSIouftQtmMatu+d7KdSOq/IT97A93sYE062tYIRiK3jSNATnCqAAPyFePaJ+y74e0MaQqavqkyaadPKBzGvmC0a8ZASFBG77dICRj7iYxzlhdPco6Z+1n4c/tvXtN1yyj0d9J0i+1x2stYs9UP2e0K+eki27sYZRvUhGyG5AbIIrpPAnxn1Dxh4k1Lw9feBdU8Oa7a6JBr0Npe3tvKtzBM8iRIJI2IWTdGQwbhT3I5rldE/ZN0nSbC0s9T8Rap4n0jTPDV94WsNGlgtrSJbG5SNWVniQFpsRIPOY+5Gck1/gx8MfHVl4x8S+I/EGpazps9x4dsvD2nXGtSWF1exGGWaQy7LYGHavmKAWy0jbmYAYFLUfu9DofDvxuj0/4N3njLWrXVLu6TW7rSI9K2W5u5Lv+0HtIbOMxkRt+82xrISMqNzHrXFfE/8AaG8deAfiN8PY9R8MR+HfDk0Wo3niewuJ4b2YWML2kf2qCeI4AiN0ZHUgErE/oCe00z9nOODwFrHhPUvGWr6rY3uonWbW6FrbW1xp1+bw3n2iJo0wSJyGCuCoA24wTWrbfBU6h4p0rxD4t8TXfjDULDT9S0sxXNlb21tPbXogEsbRxKOAIB358x88YANQ90xPhH8b7rxPq0eh63ELnUtQ8QeJrKyurRFSGO1026EaBxnLMUkT5h1IJNYjftdw3sXhuTRfAesawNcstPuosX1tB5Ml6bpbeJ97dSbOTcwyFBU89Ku+E/2ULD4f+HPC+m+GPGevaXe+Hr3Urm31WVILmeWK+I+0QuJEKn7qbXxuBQHnJB0PDX7L2geF7bw5Db6zqk66HBpUELT+WWlFg10Yi5C9X+2SbsY+6uMc5NQ905CL9qe+t9f8Sa+vhzU9Y+H9r4a0LxHJLA1vHJpFvdJO0zurENOwCqxRScLExB5APQ+If2uvCXh/4iXfhlohcW1hqlto17qK6jbJJHdTeXt8u0Z/OmjUyxh5FXC5OAwViIJf2SdP/s2bSbXxprtnod/oOm+G9X05Irdl1Cys1dUBcpuid1kdWZD91iABwR2MHwcm0bxnqes+HvFd9oGmatqCapqWiRWNrPFNcBERzHLIheESLEgcKT0JXaSTRqHuj7P4uX2q/FDXPCGl+CtT1G38P31rZ6vrRvLeG3gE8Ecysis2+UqsnzKoyAM85ArF+EifF9dZ8P8A/CeNanT/APhH7kan5Jgz/an28+Tjy+dv2XHT5c9fmrvvDngq08NeJPFuswXE0s/iS9hvbiKTGyForaO3CpgZwViBOc8k9q6GmTfsFFFFMRY+G/8Ax4ax/wBha5/9CFddXI/Df/jw1j/sLXP/AKEK66uV7s9OPwojuP8Aj3l/3T/KvNfBn/In6F/14wf+ixXpVx/x7y/7p/lXmvgz/kT9C/68YP8A0WK0pnPX2RsUUUVscgVh+OvF1t4B8F654kvIZLi20q0kumghx5kxUfLGueNzNhRnua3Kw/HfhG28feC9c8N3k0ltb6paSWrXEON8JYfLIueMq2GGe4oA8Avfjb8S9am1rwto1tptx4p1HStWj0a8sNNmgs7TV7RRut1ubh2iu1Vy0bPtjG+M4UqTt9MtfEnjXwbafETW/FVtb3uk2dxaSaFB9ttbNTb/AGSAXBkmdlSMC4MxzIeg4z8oOD8MvhHrehfECLWvEWnoslmL2eC503xBLLp/2m6INzJFp7wgwecd0hBkcIxYLwxr0H4ofDu1+KPhF9Dub2bTSt3a39vdwRpKYbi3mSaJjHICki70GUYYIz9alXLbWx5dZftJv4ttvD2r6LFb2mnWXjK28MeJrdbmG/iCXUIFvLBdRMUZRNNa5IwfmdSARVnTfj5qlj4K1TxdqFnp9/pN94nv9P0UXOq2mkRR2Nu5hjd5rhgJGkkhmYbQThh0AzWzB+ztZSeDfiDomp+JtV1W78a3KX19qzRQwzWtxHFFHFJboihE8swRuoIOCvJNTXv7P9nFpPw9ttB1+98P33gm2ks9Pv1tYLoyRyxJHMZI5VKeY2wNvABDFuoYgmoe6YXif4s3Pi74a/Db4h+D9ZvtJ03V9e0uzm06SG3kW4huL5LeaOUlXIK4kAaJwDnOSMV1/jf416Z4Gu/HUF1p15cnwl4cj8S3JhZAJ4Xa4URR5P3x9mbrgfMOetUbL9n/AErTvgzpPw7t9b1VINJuYr6y1omJryK5juzdRykFPLciQ8grhhkEc1mfEP8AZxb4i/2i11461rTpda8PL4b16WytbUNqcCNI6PyhELhppc+WACGxgYBo1D3TO8Z/tfeE/BfjW+0G4t/Oh0uazttVu/7RtopbaS5WNkEVq7iW4CLLG0hjHyhjjcVIGzpcfxeT4gWg1BrX/hFx4q1X7QFMG7+xvsg+wYx8277Ruzj58fe4rRf4MT2HjDUdc8PeLr/w7Bq81vc6tp0Vja3KXU0USReYjyozQs8cUaPtyDtBAU5NemE5JIGPagV0thKKKKokKKKKAOF+Kv8Ax7aZ/vy/yWij4q/8e2mf78v8lornnudtL4T3CiiioOgKKKKACuV+KH/Iiar/ALqf+jFrqqq6pptvrOm3Vhdp5ltcxtFImcZUjB57fWgTOVk/1jfU02q6+GvFVgBBHLpmqxJwlzdSyQTOO29VR1LepGM9cCnf2N4s/wCfPRf/AAPm/wDjNdHOjg9lPsTUVD/Y3iz/AJ89F/8AA+b/AOM0f2N4s/589F/8D5v/AIzRzIPZT7E1FQ/2N4s/589F/wDA+b/4zR/Y3iz/AJ89F/8AA+b/AOM0cyD2U+xNRUP9jeLP+fPRf/A+b/4zR/Y3iz/nz0X/AMD5v/jNHMg9lPsTUV554h+JGseHNZutNn0Wwlmt2Cs8d++05APGYveuw0WPxRrmk2moQ2GjxxXMayqr38u4AjviGvOw+Z4PFVZ0KFRSnDda6a27d9Dsq5di6FONWrTajLZ6a6X79jToqH+xvFn/AD56L/4Hzf8Axmj+xvFn/Pnov/gfN/8AGa9HmRx+yn2JqKh/sbxZ/wA+ei/+B83/AMZo/sbxZ/z56L/4Hzf/ABmjmQeyn2JqKh/sbxZ/z56L/wCB83/xmj+xvFn/AD56L/4Hzf8AxmjmQeyn2Jqb4U/5HnVv+wba/wDo24qI6N4tPS00Ue5vpj+nkit7wp4ZfQlurm7uReapeMrXEyJsQBRhI0XJwq5PUkksxPWolJNWRrTpyjK7N+iiisjrPN9K/wCQr4k/7Csn/oqKtKptc8Jagmr3Gp6JNbB7vabqyvdwjd1AUSK65KNtAB4IIUdCMmn/AGN4s/589F/8D5v/AIzW8ZKxxTpScm0TUVD/AGN4s/589F/8D5v/AIzR/Y3iz/nz0X/wPm/+M0+ZEeyn2JqKh/sbxZ/z56L/AOB83/xmj+xvFn/Pnov/AIHzf/GaOZB7KfYmoqH+xvFn/Pnov/gfN/8AGaP7G8Wf8+ei/wDgfN/8Zo5kHsp9iaiub8Y6v4i8F6dFeXemaXPHJKIgsN/LkEgnPMI9Ko+DPFmveN7m5gtNJ023a3QOxnv5MEE44xEfSvOlmeDhiVg5VF7R7R1vtftbZPqdkcuxcqDxKpvkXXS35/odlRUP9jeLP+fPRf8AwPm/+M0f2N4s/wCfPRf/AAPm/wDjNejzI4/ZT7E1FQ/2N4s/589F/wDA+b/4zR/Y3iz/AJ89F/8AA+b/AOM0cyD2U+xNRUP9jeLP+fPRf/A+b/4zR/Y3iz/nz0X/AMD5v/jNHMg9lPsTVj+Lf+QIf+vm1/8ASiOtL+xvFn/Pnov/AIHzf/GalsfB+q6jqFrNrktnDZ2sqzpZWLPJ5sinKGR2C/KpwwULyQCTxik5KxUaUrq529FFFYHccb49/wCQv4W/6/Jv/SaWo63vFHh1fEmnpCJ2tLqCVbi2ukUMYpVyAcHhgQSpHcMRx1rmhoni1Bg2+iSkfxi7mj3e+3ymx9Mn61rCSSszlq05Sd0T0VD/AGN4s/589F/8D5v/AIzR/Y3iz/nz0X/wPm/+M1fMjH2U+xNRUP8AY3iz/nz0X/wPm/8AjNH9jeLP+fPRf/A+b/4zRzIPZT7E1FQ/2N4s/wCfPRf/AAPm/wDjNH9jeLP+fPRf/A+b/wCM0cyD2U+xNRUB0bxYB/x56L/4Hzf/ABmvN4vi5qkt0kA0KzDPIIwTfvjJOP8AnlXnYvM8HgHFYqoo82176/cn3R2YfLsXiub2FNytva3+Z6fRUP8AY3iz/nz0X/wPm/8AjNH9jeLP+fPRf/A+b/4zXo8yOP2U+xNRUP8AY3iz/nz0X/wPm/8AjNH9jeLP+fPRf/A+b/4zRzIPZT7E1FQ/2N4s/wCfPRf/AAPm/wDjNH9jeLP+fPRf/A+b/wCM0cyD2U+xNRUP9jeLP+fPRf8AwPm/+M0h0HxbN8gTRbPdx54nlnKe4QogY+xYUcyD2U+xf+G//HhrH/YWuv8A0KuurN8PaFD4c0iGwgd5QhZ3mlOXlkZizu3uWJP48VpVg9Wd6VkkR3HMEn+6f5V5r4M/5E/Q/wDrxg/9AFenVwR8GazocjwaK9hdaWWZobe+d4ntgTkorqrbkBJwCAQOMnAqoNLcxqwckrE9FQ/2N4s/589F/wDA+b/4zR/Y3iz/AJ89F/8AA+b/AOM1rzI5vZT7E1FQ/wBjeLP+fPRf/A+b/wCM0f2N4s/589F/8D5v/jNHMg9lPsTUVD/Y3iz/AJ89F/8AA+b/AOM0f2N4s/589F/8D5v/AIzRzIPZT7E1FQ/2N4s/589F/wDA+b/4zXIeMvGOu+Cr+C0u9I06d5ovNDQ38mAMkYOYh6Vy4rG4fBUnWxE1GK6vz26M3oYLEYmfs6MOaXY7Wiue8I6l4j8ZaU1/a6bpUEQlaLbNfy7sjHPEPvW3/Y3iz/nz0X/wPm/+M1pRxNLEU41qUrxlqn3RFTDVqM3TqRs1uiaiof7G8Wf8+ei/+B83/wAZo/sbxZ/z56L/AOB83/xmtuZGfsp9iaiof7G8Wf8APnov/gfN/wDGaP7G8Wf8+ei/+B83/wAZo5kHsp9iaiof7G8Wf8+ei/8AgfN/8Zo/sbxZ/wA+ei/+B83/AMZo5kHsp9ji/ioM2+mAcndL/JKK9C0LwbP9vbUtdktru5ERhhtYEJggQkFjluXZiq5YgcKAAOclYyd2ddOLjGzOuoooqTUKKKKACiiigAooooAKKKKACiiigAooooA+aPij/wAj/rH/AF0T/wBFrXu/w/8A+RI0P/r0j/lXhHxR/wCR/wBY/wCuif8Aota93+H/APyJGh/9ekf8q/K+Gf8Akd47/t7/ANOM+8zv/kWYX5f+kHQUUUV+qHwYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAHmnx5/5FWy/wCvxf8A0B6574Af8hjWP+uEf/oRrofjz/yKtl/1+L/6A9c98AP+QxrH/XCP/wBCNfleL/5K6l6R/wDSJH3eH/5J+p6v/wBKie2UUUV+qHwgUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACHoa+SrT/kMW//AF8r/wChivrU9DXyVaf8hi3/AOvlf/QxX5Xxv8eE9ZfnE+74Y+HEei/9uPraiiiv1Q+ECiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK8L+Pn/Izad/15/8As5r3SvC/j5/yM2nf9ef/ALOa+K4w/wCRRP8AxR/M+m4d/wCRhH0l+R2HwL/5EqT/AK/JP5LXoled/Av/AJEqT/r8k/kteiV62Qf8irDf4V+p5+bf7/W/xP8AQKKKK988kKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK5nx1reteHtO+3aXYwX8MQJnjctvUf3hjqB3rmxOIhhaUq002o6uyu7ei1NqNKVeoqcWrvu7fieHfFH/kf9Y/66J/6LWvd/h//wAiRof/AF6R/wAq+cPEOuSeJNautTmjSGS4IYpGSVGFA4z9K9P+GfjfX9XWy0ax021NpZxqkt3IWwiDufVj2H9K/IOHcyw9PN8RUd2qrfLZNt3m3t00112P0TOMFVnl1GGi9na92la0bfPU9gooor9oPzUKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiobvz/ALNL9m8v7RtPl+bnZu7Zxzik3ZNjSu7HnXx5/wCRVsv+vxf/AEB6574Af8hjWP8ArhH/AOhGsf4keN9Y1lTourabDYTW0wkPlsxJOCBjPBBBzmsjwL4yvfB9/O1jZx3s12FiEb7skg8YA6k5r8UxWbYV8Rwxt3yRsn7rvdKSa5d92j9LoYCusmlhtOaV2tVazae+2yPpuis7QJtSuNMil1aGG2vH+ZoYCSEHYEnqfWtGv2inNVIKaTV+6s/muh+bTjyScW727aoKKKK0ICiiigAooooAKKKKACiiigAooooAKKKKACiiigBD0NfJVp/yGLf/AK+V/wDQxXu/xC8ba/4LmWaLTbW70uQhVuCWBRv7rgdPY968CinMV0k4ALJIJAD0yDnFfjnGWOo1sRRoxupU273TW/LZrunZ6o/RuG8LUp0qlV2tNK1nfa+/bfqfXlFcJ8PfGWveM2a5uNOtrPS0yPOBYtI3ouew7n8K7uv1bB4ylj6Kr0b8r2umr+dn08z4PE4eeFqOlUtzLezv+QUUUV2nKFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXhfx8/wCRm07/AK8//ZzXsHiO41S00uSfSLeG7u4/m8iYkbx3AI7186eNvF934x1OK4vLWOzmt4zAY0z/AHiTnPQ5r884yxtKGCeElfnk4taOzs9ddrrtufYcN4apLE/WFblSaeuuq003PW/gX/yJUn/X5J/Ja9ErwD4a+ONa02OPQdI0yC+kmmaUNKzDbnGScdAMda97t/N8iPzyhm2jf5YIXPfGe1etwxjaWJy6lSp3vTSTdmlfXRPr8jz87w1ShjJ1J2tNtrXW2m66ElFFFfWnz4UUUUAFFFFABRRRQAUUUUAFFFFABRRWB4+1e40LwZrF9aMEuobdvKcjO1jwGx7E5/CgTdtS1qHivRNIuDb32s6fZTgZMVxdJGwH0JBqr/wn/hf/AKGTSP8AwOi/+Kryu00i106LyooVJzl5XG6SRu7Ox5ZieSTU/wBni/55J/3yK9JYLvI8R5mr6Q/E9N/4T/wv/wBDJpH/AIHRf/FUf8J/4X/6GTSP/A6L/wCKrzL7PF/zyT/vkUfZ4v8Ankn/AHyKf1L+8H9p/wBz8f8AgHpv/Cf+F/8AoZNI/wDA6L/4qj/hP/C//QyaR/4HRf8AxVeZfZ4v+eSf98ij7PF/zyT/AL5FH1L+8H9p/wBz8f8AgHpv/Cf+F/8AoZNI/wDA6L/4qj/hP/C5/wCZj0j/AMDov/iq8y+zxf8APJP++RR9ni/55J/3yKPqX978A/tP+5+P/AKvjDwp4X1LW4rrR/FGiWdtcP8A6TE19FiLuXQbu/8Ad9T6dPRfD2veCvDGlxWNjr+kRxJyWN9Fudu7Md3JNcJ9ni/55J/3yKPs8X/PJP8AvkV42E4bwWCr1MTQjaU99Nu9uye7t+Wh6NfiPE4mlCjV1jHz/Pvbp/TPTf8AhP8Awv8A9DJpH/gdF/8AFUf8J/4X/wChk0j/AMDov/iq8y+zxf8APJP++RR9ni/55J/3yK9n6l/ePO/tP+5+P/APTf8AhP8Awv8A9DJpH/gdF/8AFUf8J/4X/wChk0j/AMDov/iq8y+zxf8APJP++RR9ni/55J/3yKPqX94P7T/ufj/wD03/AIT/AML/APQyaR/4HRf/ABVH/Cf+F/8AoZNI/wDA6L/4qvMvs8X/ADyT/vkUfZ4v+eSf98ij6l/eD+0/7n4/8A9OHj/wwf8AmY9I/wDA6L/4qtqCeK6hSaGRJonG5ZI2DKw9QR1rxf7PEf8Alkn/AHyK2fhjIdL8WXml22I7C5szefZ14SOVZFVmUdBuDjIHdc9Saxq4Z04817nRh8cq0+Rxsep0UUVxHqFbUNSs9JtjcX11BZ24ODLcSCNQfqTisn/hYPhb/oZNI/8AA+L/AOKrw34m38mufEDVhdnzYtOkW1tYn5WIeWjMwHTcxY5PXAA7Vzvkx/8APNP++RXj1sxVKo4KN7eZ9VhMhliaMa0qlubW1r/qfSn/AAsHwt/0Mmkf+B8X/wAVR/wsHwt/0Mmkf+B8X/xVfNfkx/8APNP++RR5Mf8AzzT/AL5FYf2r/c/H/gHX/q3/ANPfw/4J9Kf8LB8Lf9DJpH/gfF/8VR/wsHwt/wBDJpH/AIHxf/FV81+TH/zzT/vkUeTH/wA80/75FH9q/wBz8f8AgB/q3/09/D/gn0p/wsHwt/0Mmkf+B8X/AMVR/wALB8Lf9DJpH/gfF/8AFV81+TH/AM80/wC+RR5Mf/PNP++RR/av9z8f+AH+rf8A09/D/gntfjyTwX410/a3iXRoNQiB8i5+3Rcf7LfNyp/TqKxvhrYeE/Cyi/1HxHok2rMMKFv4mWAeindyT3P4fXy3yY/+eaf98ijyY/8Anmn/AHyK8eccFUxkcfKh+8XW+nk2ratdH/wGvSjleJhhnhI4j3H5fhe+z6o+lP8AhYPhb/oZNI/8D4v/AIqj/hYPhb/oZNI/8D4v/iq+a/Jj/wCeaf8AfIo8mP8A55p/3yK9j+1f7n4/8A83/Vv/AKe/h/wT6U/4WD4W/wChk0j/AMD4v/iqP+Fg+Fv+hk0j/wAD4v8A4qvmvyY/+eaf98ijyY/+eaf98ij+1f7n4/8AAD/Vv/p7+H/BPpT/AIWD4W/6GTSP/A+L/wCKo/4WD4W/6GTSP/A+L/4qvmvyY/8Anmn/AHyKPJj/AOeaf98ij+1f7n4/8AP9W/8Ap7+H/BPpT/hYPhb/AKGTSP8AwPi/+Kq/pfiDS9c3/wBnalZ6hs+99lnSXb9dpOK+XPJj/wCeaf8AfIpovJPD9zFrFji3vrIiVJEGCwB+ZGx1VhkEH19QK0hmalJRcLX8zKtw9KnTlONS7Svtbb5n1rRSDmlr2z48Kw5vHPhu3laOXxBpcUinDI97GCD6EFqwPi5dyro+m6ekjxQ6jeeRcFGKlohG8jJkcgNsAPsSO9cPFZ28EaxxW8MUajCokYAA9gBWM6nI7WOStiFSfLa56p/wn/hf/oZNI/8AA6L/AOKo/wCE/wDC/wD0Mmkf+B0X/wAVXlvkx/8APJP++RR5Mf8AzyT/AL5FZe38jn+u/wB09S/4T/wv/wBDJpH/AIHRf/FUf8J/4X/6GTSP/A6L/wCKry3yY/8Ankn/AHyKPJj/AOeSf98ij2/kH13+6epf8J/4X/6GTSP/AAOi/wDiqP8AhP8Awv8A9DJpH/gdF/8AFV5b5Mf/ADyT/vkUeTH/AM8k/wC+RR7fyD67/dPTL3xl4Q1G0ltrnXtGnt5VKvG97EQw/wC+q8mj8E+Fl8UEv4s0htBH7wD+0IvNPP8Aqz83/j3p71d8mP8A55J/3yKPJj/55J/3yK8jH4DB5lKEsTTu4O6/yfdPt/wb+jhc8xGCUlQ0Uv6uvPzPTbXxr4SsraO3t9f0aGGNQqRpexAKB2HzVL/wn/hf/oZNI/8AA6L/AOKry3yY/wDnkn/fIo8mP/nkn/fIr1lWUVZR0PPeNbd3H8T1L/hP/C//AEMmkf8AgdF/8VR/wn/hf/oZNI/8Dov/AIqvLfJj/wCeSf8AfIo8mP8A55J/3yKft/IX13+6epf8J/4X/wChk0j/AMDov/iqP+E/8L/9DJpH/gdF/wDFV5b5Mf8AzyT/AL5FHkx/88k/75FHt/IPrv8AdPUv+E/8L/8AQyaR/wCB0X/xVSQ+OfDdzKsUPiDS5ZXOFRL2Mkn0ADV5T5Mf/PJP++RTZbO3uI2jlt4ZY2GGR4wwI9wRT9v5B9d/unudFcL8I7yZ9G1HT5JHlh068MFuZGLMsRjjkVMnkhd5UewA7V3VdKd1c9GMlJKS6hWfqniDS9EKDUdStLAv937VOse76biM1fY7QT6V4n4fjXUrKPWLpFn1LUVFxPcSKGb5uQgJ6KoIUAcYHqTXHisSsNFSavc7cPh3iJNJ2sen/wDCfeGP+hj0j/wOi/8AiqP+E+8Mf9DHpH/gdF/8VXCeRF/zyj/75FHkRf8APKP/AL5FeZ/a39z8f+Aeh/Zv9/8AD/gnd/8ACfeGP+hj0j/wOi/+Ko/4T7wx/wBDHpH/AIHRf/FVwnkRf88o/wDvkUeRF/zyj/75FH9rf3Px/wCAH9m/3/w/4J3f/CfeGP8AoY9I/wDA6L/4qj/hPvDH/Qx6R/4HRf8AxVcJ5EX/ADyj/wC+RR5EX/PKP/vkUf2t/c/H/gB/Zv8Af/D/AIJ3f/CfeGP+hj0j/wADov8A4qvOfiTpXhbxM39o6X4i0WDU8gSI1/EqTD1PzcMPXvVvyIv+eUf/AHyKPIi/55R/98ivPx1fD5lQeHxNK8X56p907aM68Lh6uDqqrRqWa8t/J6mt4Gm8GeCtN8qLxHpE15KAZ7k3sWXPoPm4UdhXS/8ACfeGP+hj0j/wOi/+KrhPIi/55R/98ijyIv8AnlH/AN8it8PjaWEpRoUKXLGOyv8A8D72ZVsHUxFR1atS8n5f8E7v/hPvDH/Qx6R/4HRf/FUf8J94Y/6GPSP/AAOi/wDiq4TyIv8AnlH/AN8ijyIv+eUf/fIrp/tb+5+P/AMf7N/v/h/wTu/+E+8Mf9DHpH/gdF/8VR/wn3hj/oY9I/8AA6L/AOKrhPIi/wCeUf8A3yKPIi/55R/98ij+1v7n4/8AAD+zf7/4f8E7v/hPvDH/AEMekf8AgdF/8VR/wn3hj/oY9I/8Dov/AIquE8iL/nlH/wB8ijyIv+eSf98ij+1v7n4/8AP7N/v/AIf8E9Q0/UrTVrYXFjdQXkBOBLbyB1J+oOKK8F8a6xeeA7dNa0J0sb2eQW0+1BsmUgsCy9CwK4DdcMRRXp0MVCtBT2POq4adKfLufQdFFFdpyhRRRQAVyfxW/wCSd65/1w/9mFdZXJ/Fb/kneuf9cP8A2YU1uiZfCzhJPvt9TSUsn32+ppK+kPiQooooAKKK8i+Jv7R+jfCn4x+A/Aus2EqweK43K60JQIbJ/MEUYlXH3XkZF3ZABcUnJRV2VGLm7RPXaK+bdU/bGJOnado3hKK58San4j1fw/Z2uq61FYWh/s8qJZpLl1wpbeu2MAknPNbWq/tM6xYeH/Cdqnw21UfEbxLqFzp1l4Su7uOBc267prk3RGw2wUhhKoO7PA4NR7SPc09jNdD3iivm+8/bIh8K6dqsHjPwlJ4W8S6Hrum6RrGmy6kktvbwXu4xX0dwFxJEFViRgHjHFd9F+0R4U8QQ+E7vwjqmmeJ9O1zXxoD3Md8Lc20vls5AR13PIAo/d4UkNkHAoVSL6idKa3R6lRXnmgftD/DPxRq2q6bpfjfR7u80uCW5u1E+1Y4Yv9bIHYBXRMHcyEgd65DxL+2j8J9D8Gv4ksPE9t4hs49RtdNlh04kSxvO3yuyuAQgUM+7GCFO3J4pucVrcSpzbsos9yoqOCeK6gingkEsEqCSORejqRkEfUEGpKszCiiigArS8Bf8lCH/AGCpf/R0VZtaXgL/AJKEP+wVL/6OirmxP8Jndgf94j8/yPVqKKK8M+qPmXxr/wAj94n/AOv4f+iYqya1vGv/ACP3if8A6/h/6JirJr4zFfx5+p+s5b/udL/CgooorlPSCiikY7VY+gJoAWivnzwZ+2Fo/jXwLp2vW2hXEF9P4ks/DtxpUtyN9v8AaXKxXG7b86EAkYAyVYZ4zV/wn+0lqvjTxNs0nwJPqHhX+2H0V9Ss9Timv7d1kMZuJrEDfHDuBJYtkLziuh4eor3WxwrHYeVuWV77aP8Ay/4Y90orwnwr+0tqfjHxG39l+BJr/wAJrq8mjyanZ6nFNf27JIY2uJrFRvSEEElichecVreG/wBq/wCG2ueHr7WrvxBBoVja6ncaXv1FtvmvEC29cA5DqpZR1xxjPFJ0Ki6FRxlCX2/v029T2CivL7T9oXwna2+s3XiDVdO0Gys9Ym0i1ne7877UyRLLnCrlHKtnyzk9OpIFaF5+0B8ONP8ADWj+ILjxlpcWjavI8VjdmRiJ2Q4cAAbhtP3sgbe+Kj2U/wCVmixFFq/OvvXoegUVl+GfE+k+M9CtNa0O/h1TSbtS1veW5JjlAYqSCfdSPwrUrNprRm6akrrYKKKKBhVPWf8AkE3n/XJv5VcqnrP/ACCbz/rk38qun8cfVfmjGv8Awp+j/Jn12OgpaQdBS190fjR598XOnhr/ALCD/wDpNNXJV1vxc6eGv+wg/wD6TTVyVcNf4jx8X/E+QUUUVgcQUUV578ffi8nwK+Fup+M5NHm19bKa3hGn28oiklMsyxDaxVuQXzjHPShK7shpNuyPQqK8A8S/tkeGNBtpdSt9NutW0MeCh4zivbaVQ8iG5W2FsYyPlcSNhmJwuGyOKiH7UPiHRfAnizxL4m+G7WNro2jDW7W80fW4tS06+j3qhg+1RptjnG7Owg5AJHvXIy/Zy7H0JRXh2gftZ+GNfbwJcC2ey0nxJoup6xd311Nt/sc2CqbmGZNuSyksCRjG3ODmu81L41+BNHgaa98VafbRLo8fiBndmwNOkdUS56fcLMoHfJ6UuVolwkuh2tFeV6f+1V8INUv7WytfiJokt1dXgsIohKwLTHGF5XgHIwxwpzwTWd4A/ar8EeMvGGreEr7UrTw94qtfEF5oNtpF1c7pbxoHCiRSFCr5hztQnJ2nGafK+w+SXY9lorzqz/aM+GOoazrGk23jfSZr/SIZ7i8iWRsRxwAmdlbbtk8sAlghYjBzXR+BfiL4Y+J2kS6r4T1u01/TIp2tnu7Ji0YlCqxUEgZIDr09fXNKzRLi1ujoqKKKQgooooA674Rfc8Sf9hFf/SaGvQK8/wDhF9zxJ/2EV/8ASaGvQK9KHwo+gpfw4+g2T7jfQ14t4S/5FXR/+vSL/wBBFe0yfcb6GvFvCX/Iq6P/ANekX/oIrxs1+CHq/wAj3ct+OXp+pq0UUV82e6FFFFABRSSP5cbvjO1S2PoM18zfD79ubQviH8PND8R2fhy5ttQvvFlh4WutHmu18y0N25EN1v2fPGVBIwBkqwzxmtYU5zTcV/X9IzlUjBpSZ9NUV87eB/2rtX+IHipRo3w5uNR8FtrkmhPq1jq8M+o2rpKYjc3GnqvmRQblJLFshcMRzVy2/axt7nwbYah/wi86+JLnxo3gd/DxvV3w3ayEPI0uzGxYl80nb0PXvVuhUTtYhV6b1ue+0V4r4g/a7+HEHgrxprnhfxDYeMrzwxpsupzaZYzmN54UYIWjdlwybjjeu4A12H/C7/BNvo+pahf+IbLT00k2UeqpKzH7DLdKjQRyEL1bzFAx69qh0preLLVWD2Z3VFcIPjx8PW+Ih8CDxfph8WiU250zzDv84DcYd+NnmY58vdu9q7uocXHdFqSlswoooqRhRRRQBw3xi/5Fa2/6/U/9Akoo+MX/ACK1t/1+p/6BJRXt4T+F955OJ/iHpNv+0R8OrrwNpvjCLxRbP4c1LUl0e0vBFLmW8aUwiAJt37/MUrgr2z05rq/GnjPRfh34V1PxL4iv00vQ9MhNxd3kqsyxRjqxCgk/gK+I0+CfjTSf2pNX8MweF768+GGh63f/ABS026RSkNzqU1msUVjHIRsV0ummlUc44JGK8E0TwB8S9U8IfEWC28LeNFs/EPw0vlu9NutP1Z/M1kXkJETvdu5uLpUMg8yNI0YZCg4NfSnz5+ttrcxXttDcQOJIZUEiOOjKRkH8qlr86Pi0fiNpWp/FvwnZ+F/Hl3d6/rnhXUtFvdKsLmWzisYUsxd4mT5YsNHIrIMEk5IxkjL0nwT8V5P2lr6+vpvGNl4yTxpd3K3tjo99Pb3Gh5fyohdSXS2C2xi2qqmPzFkxkE5oC5+ldcn8Vv8Akneuf9cP/ZhXxR+wNoXjPw18Zb+21PRvFNzpsuhynUNd1211PTZRefaFKx3kF1JJBPckFsTWzYCg9jX2v8Vv+Sd65/1w/wDZhTW6FL4WcJJ99vqaSlk++31NJX0h8SFFFFABXjXxU/Z/i+LPxRsdV1h7eXwsfCuoeH7y13MLnzJ5Y5I5Y+MDYYwwOQQwXFey0UpRUlZlRk4O8T5B0H9lL4g+GPhVp3h29m8E/EWWPXtR1TVNK8U2rtbamLjZ5cy3AjMkE6FWY7Rg78EnFS+Ev2S/HPw70Twnr3h3VtBi8a+HNb1HUrPQbiW5fRYLG9jSOTTopWzKqqEDK5H3mbjvX1zRWXsYm/1ibPkzxL+y78RPHSa94s1nU/DEXxA1jX9F1IWMfnyaVZ2enFzHb7iu+VmLZYkAHtiud8TfCHxRY/E/wjfeJY7ZvE3jb4hprd7ZeGI55rLTLKDTpbcv5zovzfvVYswXJPGcGvtWlDEAgEgHqPWh0YgsRNHw5pf7Bfii98JjwnrepaRHZaTo19pmk65DqupXMzvOMIwtHYQ2yEY8xV37u2OteieJPgf8U/H/AMPtVttaXwHpXiFJ9EbTbfSopRFImnypIftN2YxIQ+3CRhSIx0zmvp6ihUYoHiJt3YyKSaaGOS5VEuWUNKsTFkVyPmCkgEjOcEgcU+iitjmCiiigArS8Bf8AJQh/2Cpf/R0VZtaXgL/koQ/7BUv/AKOirmxP8Jndgf8AeI/P8j1aiiivDPqj5l8a/wDI/eJ/+v4f+iYqya1vGv8AyP3if/r+H/omKsmvjMV/Hn6n6zlv+50v8KCiiiuU9IKa43Iw9QRTqKAPlOD9jvWLTw98KPs+sWNvrnhm9gOt+W0gt9StYr17mID5cmSMsQpIH32GcYq1rn7NHi/xH48tNQu4PB1tNba4mpjxxpkUtnrUlusu/wAl4YlWJnK/IXZiCOSCa+oqK6vrVTf1/E8z+zsPayT6deyt+nSzPl3Xf2afGHiPx7aajdQeDbSe21xNUHjjTIpbPWnt1l3+Q0MSrEzlfkLsxBHJBNbWg/s8eI7PxJokmoT6LcaRpHjnUfFEW1pGkmgukkwjIybRIjsvcjjOc19EUUniajVilgKCfNrvff8A4Hl/wWeA6b+z1rdp8QrXXpb7TXs4fH934s8oFy/2eW0WFEAK48wMM9cY6HNea+JfAet/ADVvDOvi80+fUBea+uLjSb2+sBb3solUFoIyyTDgBSu1+RuGDX2RSq7IcqxU+xpxxE0/e1RM8BSa9zR73PJv2U/D+o+F/wBnfwPpurWU2nahFZu8lrcJ5cke+aR1DL/CdrKcHpnFesUE5NFc85c8nJ9TupU1SpxprokvuCiiipNQqnrP/IJvP+uTfyq5VPWf+QTef9cm/lV0/jj6r80Y1/4U/R/kz67HQUtIOgpa+6Pxo8++LnTw1/2EH/8ASaauSrrfi508Nf8AYQf/ANJpq5KuGv8AEePi/wCJ8gooorA4grzf9oT4aal8XPhjP4b0m6trO9fUbC8Wa7LCMLBdRzMPlBOSqEDjrjpXpFFCdncadndHzFcfsm6/oXxd+IfiXwf4i03StE8QaHcWel6fqFoLuPTrqe5S4nQwOpRraR1kJXkgzHC8c8cP2NPFurWXjt49O8E/Dt9d8MyaEuj+E7i7awvbhpUf7VcK6hY9oQhVRCfm6+v2dRV88jRVZI+WvFX7Gt5qnxX1HxFpOt22naDrHhjUdMvdOcOfI1K7s1tpLqJQMbX8uJnGQcqTgk1zmpfsm/E7xf4c1m117UfCdpeTfD638EWS6dNcugMF1FKs8rPHn5ljbIUcEgYPJr7Ioo55AqskfMvxA/Za1/xXc/E+W0v9Ig/4Sm88NXFn5m8GJdO2ecJMIcFtp24z15xWXN+y7491LV7/AES8vfC8PgrUPiHJ46m1G3Mx1aJRL5iW6goE3HCgvu+Xkc19XUUc7D2skfFOg/sQeLdO0geHbu80W607SLHV4NH1eXV9RkleW7hljjb7GSILbHm/vCofdjhcnNfWPwy8JnwH8OPC3ht1t1l0nS7WxlNou2JpI4lR2XgcFgTkjPPNdLRScnLcUqkp7hRRRUmYUUUUAdd8IvueJP8AsIr/AOk0NegV5/8ACL7niT/sIr/6TQ16BXpQ+FH0FL+HH0Gyfcb6GvFvCX/Iq6P/ANekX/oIr2mT7jfQ14t4S/5FXR/+vSL/ANBFeNmvwQ9X+R7uW/HL0/U1aKKK+bPdCiiigBsql4pEHVlKj8RXxvp/7C+uab4d+CTW+u6dba/4PvrU+IRE8gtdVtIL17qHb8mTLGXYKWA4kYZwBX2VRW1OrOl8P9br9TKdKNT4v6/qx8fa9+yX458T/EbT9TvYPAlnc2fiBNX/AOFh6PDNY69PbLL5nkSW8SLCzsv7suzEEckE13Nx+y9qTftOax8RLbWbW38NXFvPqFnpLIXaDXJbUWjXZQjayeUucZyWJ4719EUVo8TUf3WM1h6a/M+HLL9if4k3+masus6zobaheeCr7wqZ21a8uhJPLNHItwFeMJBEdhHkxKAuf4s8dN4+/ZS+I2s3/jrTtE1Pwv8A8I54uudB1G6nv5Lhbu3m09IFaJFVCpVzDuDk5HTHOR9e0VX1upe+n3C+rU7W1+8+RdK/Y78R6b8UpJp7jStT8HHxlJ4xju7nWNRW5idpTKIxYoy25mVzgTljleqnpX12Tkk+tJRWFSrKrbm6G1OnGnfl6hRRRWRoFFFFAHDfGL/kVrb/AK/U/wDQJKKPjF/yK1t/1+p/6BJRXt4T+F955OJ/iH0fRRRX0p4AUUUUAFcn8Vv+Sd65/wBcP/ZhXWVyfxW/5J3rn/XD/wBmFNbomXws4ST77fU0lLJ99vqaSvpD4kKKKKACiiigAoAJOAMmiuT+KPgKT4meDLrw/H4h1bws88sMo1PRJvKuo/LkD7Vb0bG0+oJoe2g1ZvU6wAnoM0AE546VyPxD+H8nj+30CKPxHq/h3+ydVt9UZ9Jm8s3giz/o8396J8/MO+BT/FvgSTxT4t8I64viDVdJTw/czXLadYy7LfUd6Bdlwv8AEq4yB6k0rvsNJdzq6KKKZIUUUUAFFFFABWl4C/5KEP8AsFS/+joqza0vAX/JQh/2Cpf/AEdFXNif4TO7A/7xH5/kerUUUV4Z9UfMvjX/AJH7xP8A9fw/9ExVju6xozuwRFBZmPQAck1seNf+R+8T/wDX8P8A0TFWO6JKjJIoeNwVZT3B4Ir4zFfx5+p+s5b/ALlS/wAKPDdK+Pesaj4g0N/sEB0bVry1tfs0NjO0lkl0u61ea73eV5rKY5DDsGFkA37sbi78SfFbwf8ADvWte8RGzSfTPA73kjBIXUayjys2VTqnliPgfL175qXw58FdS0HxDpNvdQvf6NYXNtMl7aa09usv2VdtrJcWZiIeVEWOMlZArhFYgEDHqvjbwtB458G654cup5ba21aymsZZoQC8ayIVLLnjIB71UpU4ySilb/g/5GdOnXnCTnJqXTprZ/qeSy/tJ2mneIdQub+DUbPw5pvhaPVbiO+0qWzuJbt7pIVEXnBdytvCj+EE5JGK6Lw98V4Pin4f8V2mlXUnh/XNHgSaSWwu7XUFRWRnjZJV8yJs+W6spGVwfUGtLxb8GNI8Z3k9xf3d4vm6JHogEBVTGI7hbiOdSQf3iyIpGcrxyDW94b8M6lplnfwa34gk8Rm7GzL2MFosabSGAWIDJbPJJPtiolKla8VqawhiedqbvHX+t9PK3mcDrvi3xBc/stw+MLbWZdO8RReGI9aa7gghYSzC18wqyOjKFZjyAAfQius8T/EObw9d6BpGn6HdeJfEGrWst3HY2s0UAWGJU82RpJCFHzSIoHUlh0AJEWi/CuCw+Gl54F1DV73WtDmsW0uEzpHFNBaGLyljDxqNxVejsM561UvfhTqVyNBvY/GuoQeJdGhntIdbFjbFpbaYJuikh2iM4McbBgAQy55BIpXptu/d/wDAHy10k1vZX1W6eu+l2uv3nV+DfFdj468KaV4h0zzRY6jbrcRLMu2RM8FWHZlIII9Qa2RjIz0rzK6+F+qaPbfDLQPCuq3GleG/Dl79o1OT7SRPewxxNshYAYkEkrbnzgDBwOlem1lNRTvF6HVTlNq01qrejdtbfM+eta/aLv8AR9H8QaAwD+OYLnUILG4W2X7KCl+Le2R1zy7RuGA/iEbHiu/0740W2oeJLOy/sO/i0O+1a40Kx195IjDcXsPmB08sNvVC0Mqq5GCU7Agmjqn7O3h7VfE+oa7Ld3i3d54isfEbKpXasttHsWEcf6t8szDrljVzTPgrbab4isrv+3b+fQrDVrjXbHQXiiEUF5N5hd/NA3sgaaVlQnAL9SAAOhui1p/X9f5nBGOLjLV6X8tr9f167F3w18S7rxh4i1TTrDwvqKaXp2o3Ok3Wty3ECxJPF1KRlt7qTgZA4JAIODjD8M/EO48KeC/iBqvijUrvXIPDOt3VlHP5ES3E0SLD5ce2NUQuXl2g4H3hmu68JeErfwhDq8dvPLcDUtUudVkMoHySTtuZBj+EHpnmuZ1P4M2eqxeMrGXWb9dD8UO1zc6aiRD7PdsI/wDSIZdu8EGJGCklc5OO1QnTu100/wCCbuNdJSTvLX01Tt69PMh+HnjnxB4m+IPjjS9a0qbQk0m1054NNneKZo2lSZnYSxkhw2xO/BUjHrS8HeKPGvjX4Z/CzX7T7O17qVzaXPiAiNEX7GySebsVuh3eXgLz6d66LwX8O7nwvrfiLW9Q8SXviDWNcjtori5uLeKBYxArqnlpGABxISc5yee+K6Lw3pNxoWg2On3WpT6zcW0Yje/uURJJzk/MyoAoP0AHFKUop+6u35ahTp1Gkpt9e38ya28tPvMv4anxMfA+l/8ACZeWPEuJPtnk7NufNfZjZ8v3NnT+dbWs/wDIJvP+uTfyq5VPWf8AkE3n/XJv5VEXeon5r80a1I8tCUb3tF/kz67HQUtIOgpa+5Px08++LnTw1/2EH/8ASaauSrrfi508Nf8AYQf/ANJpq5KuGv8AEePi/wCJ8gooorA4gooooAKKKKAPFPib8bdb0HxHqml+Hba0kbS8xmObTrnULi/uFt1uZY0jgZTFDFFJDvmbd80qhUJHNPWvj3q2s638N/8AhF7eCHR9T1DSYdemuU80xm/hMsdnGeAJFjHmO38IaMY+c4u/ET4Paze+L7/XNCjN7FqDGaSO11l9JvbWZrdLafy5hFKrwzRRQhkZQytEGVs9LOp/sp/DjWrfw08vhmzs7zSbqyvHnVFlmuvs8QjWKaQj5wQFBbAJ2A8Vp7puuRJXJ/EOv+MfCvxa8JacniS01608RajOsnhtdKSJ7DTUidmuxOrFz5biJCz/ACuZQoAOK9arzbQ/hBqWhfErWvF8fjnUrltYuVlu7C50+0cG3QER2iTFPMSFMkhVI5LMckk16TUOxlK2lgooopEhRRRQAUUUUAdd8IvueJP+wiv/AKTQ16BXn/wi+54k/wCwiv8A6TQ16BXpQ+FH0FL+HH0Gyfcb6GvFvCX/ACKuj/8AXpF/6CK9pk+430NeLeEv+RV0f/r0i/8AQRXjZr8EPV/ke7lvxy9P1NWiiivmz3QooooAKKKKAF60bTnGDn0rP8Q6Sde0DVNMW8uNOa+tZbUXlo22aAuhXzIz2Zc5B9QK5Gb4VSy/BcfD7/hLteSb+zl0/wD4Sdbj/iZ5BB87zP8AnocdfeqST3ZLbWyO+AJOMHPpSVw3jn4Xy+NfhrbeEk8V65ocsItAdc0y48u+k8gqSWfv5m35vXJruicmhpW0Y03fVCUUUVIwooooAKKKKAOG+MX/ACK1t/1+p/6BJRR8Yv8AkVrb/r9T/wBAkor28J/C+88nE/xD6Pooor6U8AKKKKACuT+K3/JO9c/64f8AswrrK574g6Vca14K1mytE8y6ltm8qP8AvsOQv44x+NNbky1TPOZPvt9TSVBZahBqsAuLZxIjdR0ZD3Vh1VgeCDyDU+D6GvpNz4m1tGFFGD6GjB9DQAUUYPoaMH0NABRRg+howfQ0AFFGD6GjB9DQAUUYPoaMH0NABRRg+howfQ0AFFGD6GjB9DQAVpeAv+ShD/sFS/8Ao6Ks3B9DWr8M4zqXjC91C3xJZWlmbN515RpmkViinoSoQZ9NwHXNcuJaVJnfgU3XVvP8j1OiiivEPqT5l8a/8j94n/6/h/6JirJre+JNjLpHxD1hLlfLF/It3bO3AlTy0Vgp7lWUgjqMg96wcH0NfG4tNV537n6vlclLBUuV30CijB9DRg+hrkPUCijB9DRg+hoAKKMH0NGD6GgAoowfQ0YPoaACijB9DRg+hoAKKMH0NGD6GgAoowfQ0YPoaACqes/8gm8/65N/KrmD6GopbKXWJotJtV82+vmEMMS8nk8sR2VRkk9ABWlJOVSKXdfmc+JkoUZyk7Kz/Jn1oOgpaQcClr7k/HDz74udPDX/AGEH/wDSaauSrsvi9byDSNM1EIzW+n3omuCozsjaKSMufZS4J9Bk9q4yNlmjWSNhJGwyrodwI9QR1rir/EeRjF76fkLRTtjf3T+VGxv7p/Kuc4BtFO2N/dP5UbG/un8qAG0U7Y390/lRsb+6fyoAbRTtjf3T+VGxv7p/KgBtFO2N/dP5UbG/un8qAG0U7Y390/lRsb+6fyoAbRTtjf3T+VGxv7p/KgBtFO2N/dP5UyVlgjaSRhHGoyzudoA9ST0oGdf8IvueJP8AsIr/AOk0NegVwfwht5Do+pagUZbfUL0zWxYYLxLHHGHx6MUJHqCD3rvK9KHwo+gpK0Ip9hsn3G+hrxbwl/yKuj/9ekX/AKCK9qYbgR614p4Z/wBF06PSpsR6hpqi1ubdj8ysvAbH91gAwPQgivHzVN04vz/Q9zLmlOS8jWopdp9DRtPoa+aPfEopdp9DRtPoaAEopdp9DRtPoaAEopdp9DRtPoaAEopdp9DRtPoaAEopdp9DRtPoaAEopdp9DRtPoaAEopdp9DRtPoaAOF+MX/IrW3/X6n/oElFW/HukXvjK3j0TRYRfajDILqaNWAESAFRuPQEl+AeThj2or6DB0puiml3PExVWCqtNn0JRRRX0B4gUUUUAFFFFAHxf+0F/yVPVf+A/+givOaKK6I/Cjin8TCiiirICiiigAooooAKKKKACiiigAooooAKKKKAA9K+6PhL/AMk38P8A/XsP5miisanQ6KXU66iiisjoPG/2qP8Akmy/9fS/yNfHdFFc1XdHdh/hYUUUVgdQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAV9D/ALH/APyGdd/64L/6EKKK1pfEc9f4D6hooorrPPGTf6p/901+fWvf8hzUP+u7/wA6KKmWxnPYo0UUVBgFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFX/D/APyHtO/67p/OiihbjW5+gkX+qT6Cn0UVqdQV8yftYf8AIw6L/wBex/8AQjRRUT+FlR+JHhVFFFcR0hRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB9Yfswf8k8l/6+m/kKKKK71sjle5//2Q==)
尽管你可以使用其他对象作为键,但是请记住每个键是被复制到字典中的,因此该对象必须支持NSCopying方法。然而,如果你想要使用键值对编码,你必须使用string
key作为词典对象(详情请参见Key-Value Coding Programming Guide)。
创建词典
你可以使用alloc和初始化,或类的工厂方法来创建词典,如下所示:
- NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:
- someObject, @"anObject",
- @"Hello, World!", @"helloString",
- @42, @"magicNumber",
- someValue, @"aValue",
- nil];
对于
dictionaryWithObjectsAndKeys: 和 initWithObjectsAndKeys:
方法,每个对象必须在键前面声明,并以nil结束。
Objective-C为词典常量创建提供了简便语法:
- NSDictionary *dictionary = @{
- @"anObject" : someObject,
- @"helloString" : @"Hello, World!",
- @"magicNumber" : @42,
- @"aValue" : someValue
- };
对于字典常量,键在对象前指定,并且列表对象和键无需以nil结束。
查询词典
创建词典之后,你可以查询键对应的对象,如下所示:
- NSNumber *storedNumber = [dictionary objectForKey:@"magicNumber"];
如果对象未找到, objectForKey:
方法会返回 nil.
除了objectForKey:方法,你还可以使用如下方法进行查询:
- NSNumber *storedNumber = dictionary[@"magicNumber"];
可变性
如果你需要在词典创建后添加或者删除内容,请使用NSMutableDictionary
类。
- [dictionary setObject:@"another string" forKey:@"secondString"];
- [dictionary removeObjectForKey:@"anObject"];
使用
NSNull表示nil
你不能将nil添加到本节描述的集合类中,因为nil在Objective-C
中代表“不存在的对象”,如果你需要在集合中表示一个不存在的对象,请使用NSNull类。
- NSArray *array = @[ @"string", @42, [NSNull null] ];
在NSNull中,null方法总是返回同一个实例,具有这样行为的类被称为“骨架类”(
singleton classes)。你可以使用以下方法检查一个对象是否等于NSNull:
- for (id object in array) {
- if (object == [NSNull null]) {
- NSLog(@"Found a null object");
- }
- }
尽管Foundation框架包含的功能比此处描述的要多很多,但你不需要现在就掌握其每一个细节。如果你想要了解更多Foundation框架知识,请参看Foundation
Framework Reference。目前你已掌握足够的信息来继续实现ToDoList这个应用,为了实现它你需要写一个自定义数据类。
评论(0)