├── .gitignore ├── msmc2math.py ├── LICENSE.txt ├── msmc2ms.py ├── ms2msmc.py ├── window_msN.py ├── combo_prep.py ├── windower.py ├── README.md ├── magic.py └── magicplots.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.pyc 3 | 4 | .ipynb_checkpoints/magicplots-checkpoint.ipynb 5 | 6 | .DS_Store 7 | -------------------------------------------------------------------------------- /msmc2math.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # takes a PSMC' (msmc) output file as input and prints a simple list of the minimal parameters 4 | 5 | import sys, argparse 6 | 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument("msmc", help="path/prefix for input MSMC files") 9 | args = parser.parse_args() 10 | 11 | 12 | TCs = [] 13 | 14 | with open(args.msmc + '.final.txt','r') as infile: 15 | # skip the header 16 | for line in infile: 17 | if not line.startswith('time'): 18 | MSMCparams = [float(x) for x in line.split()] 19 | # MSMCparams should be [index, mu t_left, mu t_right, 1/(2Ne(t) mu)] 20 | # we just want [mu t_left, 1/(2Ne(t) mu)] 21 | if TCs == [] or MSMCparams[-1] != TCs[-1][-1]: #there has been a pop size change from the previous time step 22 | TCs.append([MSMCparams[1], MSMCparams[-1]]) 23 | 24 | print('\n'.join(' '.join(str(x) for x in timestep) for timestep in TCs)) 25 | 26 | 27 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 weissmanlab 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /msmc2ms.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # takes a PSMC' (msmc) output file as input and outputs an input file for ms 4 | 5 | def rho(prefix): 6 | '''finds the estimated mutation and recombination rates and returns the ratio''' 7 | with open(prefix + '.log', 'r') as infile: 8 | for line in infile: 9 | if line.startswith('mutationRate'): 10 | m0 = float(line.split()[-1]) 11 | break 12 | with open(prefix + '.loop.txt', 'r') as infile: 13 | for line in infile: 14 | pass 15 | r = float(line.split()[0]) 16 | return r/m0 17 | 18 | 19 | # code to run as script: 20 | if __name__ == "__main__": 21 | import sys, argparse, math 22 | 23 | parser = argparse.ArgumentParser() 24 | parser.add_argument("msmc", help="path/prefix for MSMC files to take as input") 25 | parser.add_argument("--form", help="desired format of ms output", type=str, choices=['trees','snps','both'], default='both') 26 | parser.add_argument("--chromL", help="Length of chromosome to simulate. Set to 0 to do single-locus sims.", type=int, default=10**6) 27 | args = parser.parse_args() 28 | 29 | 30 | MSNeT = [] 31 | 32 | with open(args.msmc + '.final.txt','r') as infile: 33 | for line in infile: 34 | # skip the header: 35 | if not line.startswith('t'): 36 | MSMCparams = [float(x) for x in line.split()] 37 | # MSMCparams should be [index, mu t_left, mu t_right, 1/(2Ne(t) mu)] 38 | # ms needs [t_left/(4Ne(0)), Ne(t)/Ne(0)] 39 | if MSMCparams[0] == 0: 40 | #the first line of data; only use it to normalize the rest (and the mutation and recombination rates) 41 | norm = MSMCparams[-1] # = 1/(2Ne(0) mu) 42 | else: 43 | #check if there has been a change in Ne from the previous time step: 44 | if MSNeT == [] or norm / MSMCparams[-1] != MSNeT[-1][-1]: 45 | MSNeT.append([MSMCparams[1] * norm / 2.0, norm / MSMCparams[-1]]) 46 | 47 | outstring = '' 48 | if args.form in ('trees','both'): 49 | outstring += '-T ' 50 | if args.form in ('snps','both'): 51 | outstring += '-t {} '.format(2 * args.chromL / norm) 52 | if args.chromL: 53 | rho = rho(args.msmc) 54 | outstring += '-r {} {} -p {} '.format(2*args.chromL/norm*rho, args.chromL, math.ceil(math.log10(args.chromL))) 55 | outstring += '-eN ' + ' -eN '.join(' '.join(str(x) for x in timestep) for timestep in MSNeT) 56 | 57 | print(outstring) 58 | 59 | -------------------------------------------------------------------------------- /ms2msmc.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys 4 | 5 | def convert(path, outpath=None, chromL=10**8, infsites=False): 6 | if outpath: 7 | outname = outpath 8 | else: 9 | outname = path 10 | SNPs = [] 11 | run = 0 12 | datastarted = False 13 | with open(path+'_ms.out.txt','r') as infile: 14 | #get number of runs from infile: 15 | params=next(infile).split() 16 | samples = [''] * int(params[1]) 17 | nruns = int(params[2]) 18 | #collect all SNPs into one big superchromosome: 19 | for line in infile: 20 | if datastarted: 21 | if line.startswith('positions:'): 22 | SNPs.extend([int(chromL*(run+float(x))/nruns) for x in line.split()[1:]]) 23 | run += 1 24 | samplenum = 0 25 | if line.rstrip().isdigit(): 26 | samples[samplenum] += line.rstrip() 27 | samplenum += 1 28 | elif line.startswith('//'): 29 | datastarted = True 30 | with open(outname+'_msmc.in.txt','w') as outfile: 31 | prev=0 32 | for j, snp in enumerate(SNPs): 33 | if snp <= prev: 34 | if prev >= chromL: 35 | print('Pileup at end of chromsome') 36 | break 37 | elif infsites: #need to move the snp to the next site 38 | if snp == prev: 39 | print('Collision at '+str(snp), file=sys.stderr) 40 | else: 41 | print('Out of order: '+str(snp)+' after '+str(prev), file=sys.stderr) 42 | snp = prev+1 43 | else: #throw away additional mutations to already-mutated sites 44 | continue 45 | print('\t'.join(['chr1', str(snp), str(snp-prev), ''.join(sample[j] for sample in samples)]), file=outfile) 46 | prev=snp 47 | 48 | if __name__ == '__main__': 49 | import argparse 50 | 51 | parser = argparse.ArgumentParser() 52 | parser.add_argument("path", help="path/prefix for input/output files") 53 | parser.add_argument("--outpath", help="path/prefix for output files, if different than input") 54 | parser.add_argument("--chromL", help="length of full genome to output",type=int,default=pow(10,8)) 55 | parser.add_argument("--infsites", help="Use an infinite sites model where all mutations occur at unique loci", action='store_true') 56 | args = parser.parse_args() 57 | 58 | convert(args.path, args.outpath, args.chromL, args.infsites) 59 | 60 | # 61 | # SNPs = [] 62 | # run = 0 63 | # datastarted = False 64 | # with open(args.path+'_ms.out.txt','r') as infile: 65 | # #get number of runs from infile: 66 | # params=next(infile).split() 67 | # samples = [''] * int(params[1]) 68 | # nruns = int(params[2]) 69 | # #collect all SNPs into one big superchromosome: 70 | # for line in infile: 71 | # if datastarted: 72 | # if line.startswith('positions:'): 73 | # SNPs.extend([int(args.chromL*(run+float(x))/nruns) for x in line.split()[1:]]) 74 | # run += 1 75 | # samplenum = 0 76 | # if line.rstrip().isdigit(): 77 | # samples[samplenum] += line.rstrip() 78 | # samplenum += 1 79 | # elif line.startswith('//'): 80 | # datastarted = True 81 | # with open(outname+'_msmc.in.txt','w') as outfile: 82 | # prev=0 83 | # for j, snp in enumerate(SNPs): 84 | # if snp <= prev: 85 | # if prev >= args.chromL: 86 | # print('Pileup at end of chromsome') 87 | # break 88 | # elif args.infsites: #need to move the snp to the next site 89 | # if snp == prev: 90 | # print('Collision at '+str(snp), file=sys.stderr) 91 | # else: 92 | # print('Out of order: '+str(snp)+' after '+str(prev), file=sys.stderr) 93 | # snp = prev+1 94 | # else: #throw away additional mutations to already-mutated sites 95 | # continue 96 | # print('\t'.join(['chr1', str(snp), str(snp-prev), ''.join(sample[j] for sample in samples)]), file=outfile) 97 | # prev=snp 98 | # -------------------------------------------------------------------------------- /window_msN.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import math, numpy, sys, os, argparse, io, scipy, itertools 4 | from Bio import Phylo 5 | 6 | numpy.set_printoptions(threshold=numpy.nan, linewidth=numpy.nan) 7 | 8 | def extractTree(x): 9 | #x is a string in the format "[](1:,2:);\n", with an int and a decimal 10 | temp = x.partition(']') 11 | length = int(temp[0].lstrip('[')) 12 | height = float(temp[-1].partition(',')[0].partition(':')[-1]) 13 | return [length, height] 14 | 15 | def removeGhosts(run): 16 | #run is a list of trees in form [length,height]. this combines trees separated by ghost recombinations 17 | i = 0 18 | while i +1 < len(run) : 19 | while i +1< len(run) and run[i+1][1] == run[i][1]: 20 | run[i][0] += run.pop(i+1)[0] 21 | i += 1 22 | 23 | parser = argparse.ArgumentParser() 24 | parser.add_argument("path", help="path/prefix for input/output files") 25 | parser.add_argument("--outpath",help="path/prefix for output files, if different than input") 26 | parser.add_argument("--form",help="format of ms output", type=str,choices=['trees','snps','both'], default='both') 27 | parser.add_argument("--chromL",help="length of simulated chromosome (not the full genome length)",type=int,default=pow(10,7)) 28 | parser.add_argument("--baselength",help="minimum window size to use",type=int,default=80) 29 | parser.add_argument("--scales",help="number of different length scales to use",type=int,default=16) 30 | parser.add_argument("--ratio",help="Ratio between successive length scales. Must be integer for this simple algorithm to work",type=int,default=2) 31 | parser.add_argument("--deghost", help = "Remove ghost recombination events", type=int, default=1) 32 | args = parser.parse_args() 33 | 34 | baselength=args.baselength 35 | scales=args.scales 36 | ratio=args.ratio 37 | 38 | 39 | if args.outpath: 40 | outname = args.outpath 41 | else: 42 | outname = args.path 43 | # make sure that there's a directory for the output: 44 | if not os.path.exists(outname): 45 | os.makedirs(outname) 46 | 47 | # Get the simulation parameters: 48 | with open(args.path + '.out.txt', 'r') as infile: 49 | firstline = next(infile).split() 50 | 51 | samples = [''] * int(firstline[1]) 52 | 53 | if args.form: 54 | form = args.form 55 | elif '-T' in firstline: 56 | if '-t' in firstline: 57 | form = 'both' 58 | else: 59 | form = 'trees' 60 | elif '-t' in firstline: 61 | form = 'snps' 62 | else: 63 | sys.exit('Need to specify format for ms results') 64 | if form not in ('snps', 'trees', 'both'): 65 | sys.exit('Unknown format for ms results') 66 | 67 | 68 | if form in ('trees', 'both'): 69 | #clear the times file if it already exists: 70 | with open(outname + '/times.txt', 'w') as timefile: 71 | pass 72 | with open(args.path + '.out.txt', 'r') as infile: 73 | numrun = -1 #start at -1 so first run is run 0 74 | for line in infile: 75 | if line.startswith('//'): #we've come to the beginning of the data for a run 76 | numrun += 1 77 | #print 'Calculating stats for run ' + str(numrun) 78 | temp = next(infile) 79 | run = [] 80 | while temp.startswith('['): #go through the whole run 81 | run.append(temp) 82 | try: 83 | temp = next(infile) 84 | except StopIteration: 85 | break 86 | # now we've got the whole run read in 87 | # convert run from list of strings to list of trees: 88 | run = [extractTree(tree) for tree in run] #each tree is in format [length,height] 89 | if args.deghost == True: 90 | # remove ghost recombination events: 91 | removeGhosts(run) 92 | with open(outname + '/times.txt', 'a') as timefile: 93 | print('\n'.join(' '.join('{0:.5g}'.format(x) for x in tree) for tree in run), file=timefile) 94 | 95 | if form in ('snps','both'): 96 | SNPs = [] 97 | #collect all SNPs into one big superchromosome: 98 | with open(args.path+'.out.txt', 'r') as infile: 99 | numrun = -1 #start at -1 so first run is run 0 100 | datastarted = False 101 | for line in infile: 102 | if datastarted: 103 | if line.startswith('positions:'): 104 | temp=line.split() 105 | numrun += 1 106 | SNPs.extend([int(args.chromL*(numrun+float(x))) for x in temp[1:]]) 107 | samplenum = 0 108 | if line.rstrip().isdigit(): 109 | samples[samplenum] += line.rstrip() 110 | samplenum += 1 111 | else: 112 | if line.startswith('//'): 113 | datastarted = True 114 | supchromL = args.chromL * (numrun + 1) 115 | pi0 = len(SNPs) / float(supchromL) 116 | segsums = [] 117 | if len(samples) > 2: 118 | loci = list(zip(*samples)) 119 | hetsums = [] 120 | for fold in range(scales): 121 | L = baselength * pow(ratio, fold) 122 | SNPhist = numpy.histogram(SNPs, numpy.arange(0, supchromL, L))[0] 123 | segsums.append(numpy.bincount(SNPhist)) 124 | if len(samples) > 2: 125 | # list of SNPs at bdries of windows: 126 | breakSNPs = numpy.pad( numpy.cumsum( SNPhist ), (1,0), 'constant') 127 | windowhets = [sum(pair[0][i] != pair[1][i] for i in range(j,k)) for pair in zip(samples[::2], samples[1::2]) for j,k in zip(breakSNPs, breakSNPs[1:])] 128 | hetsums.append(numpy.bincount(windowhets)) 129 | with open(outname + '/counts.txt', 'w') as countfile: 130 | print('\n'.join(' '.join(str(x) for x in segsums[fold]) for fold in range(scales)), file=countfile) 131 | if len(samples) > 2: 132 | with open(outname + '/hets.txt', 'w') as hetfile: 133 | print('\n'.join(' '.join(str(x) for x in hetsums[fold]) for fold in range(scales)), file=hetfile) 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | -------------------------------------------------------------------------------- /combo_prep.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # modified version of generate_multihetstep.py from Stephan Schiffels' msmc-tools 4 | 5 | import sys, gzip, string, copy, argparse, io 6 | 7 | class MaskIterator: 8 | def __init__(self, filename, negative=False): 9 | if filename.endswith(".gz"): 10 | self.file = io.TextIOWrapper(gzip.open(filename, "r")) 11 | else: 12 | self.file = open(filename, "r") 13 | self.eof = False 14 | self.lastPos = 1 15 | self.negative = negative 16 | self.readLine() 17 | 18 | def readLine(self): 19 | try: 20 | line = next(self.file) 21 | fields = line.strip().split() 22 | if len(fields) == 2: 23 | self.start = int(fields[0]) 24 | self.end = int(fields[1]) 25 | else: 26 | self.start = int(fields[1]) + 1 27 | self.end = int(fields[2]) 28 | except StopIteration: 29 | self.eof = True 30 | 31 | def getVal(self, pos): 32 | assert pos >= self.lastPos 33 | self.lastPos = pos 34 | while pos > self.end and not self.eof: 35 | self.readLine() 36 | if pos >= self.start and pos <= self.end: 37 | return True if not self.negative else False 38 | else: 39 | return False if not self.negative else True 40 | 41 | class MergedMask: 42 | def __init__(self, mask_iterators): 43 | self.maskIterators = mask_iterators 44 | 45 | def getVal(self, pos): 46 | return all((m.getVal(pos) for m in self.maskIterators)) 47 | 48 | class VcfIterator: 49 | def __init__(self, filename): 50 | self.file = io.TextIOWrapper(gzip.open(filename, "r")) 51 | 52 | def __iter__(self): 53 | return self 54 | 55 | def __next__(self): 56 | line = next(self.file) 57 | while line.startswith("#"): 58 | line = next(self.file) 59 | fields = line.strip().split() 60 | chrom = fields[0] 61 | pos = int(fields[1]) 62 | alleles = [fields[3]] 63 | for alt_a in fields[4].split(","): 64 | alleles.append(alt_a) 65 | geno = fields[9][:3] 66 | phased = geno[1] == "|" 67 | return (chrom, pos, tuple(alleles), (int(geno[0]), int(geno[2])), phased) 68 | 69 | class OrderedAlleles: 70 | def __init__(self): 71 | self.ordered_alleles = [] 72 | 73 | def addGenotype(self, a1, a2, phasing): 74 | if len(self.ordered_alleles) == 0: 75 | self.ordered_alleles = [[a1, a2]] 76 | if not phasing and a1 != a2: 77 | self.ordered_alleles.append([a2, a1]) 78 | else: 79 | new = [] 80 | for o in self.ordered_alleles: 81 | new.append(o + [a1, a2]) 82 | if not phasing and a1 != a2: 83 | new.append(o + [a2, a1]) 84 | self.ordered_alleles = new 85 | 86 | def getPrint(self): 87 | if len(self.ordered_alleles[0]) == 2 or len(self.ordered_alleles) == 1: 88 | return ''.join(self.ordered_alleles[0]) 89 | else: 90 | return ','.join([''.join(o) for o in self.ordered_alleles]) 91 | 92 | class JoinedVcfIterator: 93 | def __init__(self, filenames): 94 | self.vcfIterators = [VcfIterator(f) for f in filenames] 95 | self.current_lines = [next(v) for v in self.vcfIterators] 96 | 97 | def __iter__(self): 98 | return self 99 | 100 | def __next__(self): 101 | minIndices = self.getMinIndices() 102 | chrom = self.current_lines[minIndices[0]][0] 103 | pos = self.current_lines[minIndices[0]][1] 104 | ref = self.current_lines[minIndices[0]][2][0] 105 | 106 | ordered_alleles = OrderedAlleles() 107 | 108 | for i, l in enumerate(self.current_lines): 109 | if i not in minIndices: 110 | ordered_alleles.addGenotype(ref, ref, True) 111 | else: 112 | alleles = self.current_lines[i][2] 113 | geno = self.current_lines[i][3] 114 | phased = self.current_lines[i][4] 115 | ordered_alleles.addGenotype(alleles[geno[0]], alleles[geno[1]], phased) 116 | try: 117 | self.current_lines[i] = next(self.vcfIterators[i]) 118 | except StopIteration: 119 | self.current_lines[i] = None 120 | return (chrom, pos, ordered_alleles.getPrint()) 121 | 122 | def getMinIndices(self): 123 | activeLines = [(i, l) for i, l in enumerate(self.current_lines) if l] 124 | if len(activeLines) == 0: 125 | raise StopIteration 126 | if len(activeLines) == 1: 127 | return [activeLines[0][0]] 128 | else: 129 | minIndices = [activeLines[0][0]] 130 | minPos = activeLines[0][1][1] 131 | for a in activeLines[1:]: 132 | if a[1][1] == minPos: 133 | minIndices.append(a[0]) 134 | if a[1][1] < minPos: 135 | minPos = a[1][1] 136 | minIndices = [a[0]] 137 | return minIndices 138 | 139 | 140 | parser = argparse.ArgumentParser() 141 | parser.add_argument("files", nargs="+", help="Input VCF files") 142 | parser.add_argument("--snpfile", help="Output file for SNPs (instead of stdout)", type=argparse.FileType('w'), default=sys.stdout) 143 | parser.add_argument("--logfile", help="Log file (instead of stderr)", type=argparse.FileType('w'), default=sys.stderr) 144 | parser.add_argument("--coverfile", help="Output file for coverage of windows") 145 | parser.add_argument("--masks", nargs="+", help="Apply masks in bed format. Should have one calling mask for each individual. Can also have additional masks for e.g. mappability or admixture") 146 | parser.add_argument("--negative_masks", nargs="*", help="same as mask, but interpreted as negative mask, so places where sites should be excluded") 147 | parser.add_argument("--baselength", help="minimum window size", type=int, default=80) 148 | parser.add_argument("--phase", help="list all possible phases?", action='store_true') 149 | args = parser.parse_args() 150 | 151 | nrIndidividuals = len(args.files) 152 | nrHaplotypes = 2 * nrIndidividuals 153 | 154 | print("generating msmc input file with {} haplotypes".format(nrHaplotypes), file=args.logfile) 155 | 156 | joinedVcfIterator = JoinedVcfIterator(args.files) 157 | maskIterators = [] 158 | if args.masks: 159 | for f in args.masks: 160 | print("adding mask: {}".format(f), file=args.logfile) 161 | maskIterators.append(MaskIterator(f)) 162 | if args.negative_masks: 163 | for nm in args.negative_masks: 164 | print("adding negative mask: {}".format(nm), file=args.logfile) 165 | maskIterators.append(MaskIterator(nm, True)) 166 | 167 | mergedMask = MergedMask(maskIterators) 168 | 169 | def is_segregating(alleles): 170 | if len(set(alleles.partition(",")[0])) > 1: 171 | return True 172 | return False 173 | 174 | pos = 0 175 | nr_called = 0 176 | nr_called_window = 0 177 | 178 | if args.coverfile: 179 | coverage = open(args.coverfile,'w') 180 | 181 | for chrom, snp_pos, alleles in joinedVcfIterator: 182 | while pos < snp_pos: 183 | pos += 1 184 | if mergedMask.getVal(pos): 185 | nr_called += 1 186 | nr_called_window += 1 187 | if pos % 1000000 == 0: 188 | print("processing pos {}".format(pos), file=args.logfile) 189 | if pos % args.baselength == 0: 190 | if args.coverfile: 191 | print(nr_called_window, file=coverage) 192 | nr_called_window = 0 193 | if mergedMask.getVal(snp_pos): 194 | if is_segregating(alleles): 195 | if args.phase: 196 | print(chrom, snp_pos, nr_called, alleles, sep="\t", file=args.snpfile) 197 | else: 198 | print(chrom, snp_pos, nr_called, alleles.split(",")[0], sep="\t", file=args.snpfile) 199 | nr_called = 0 200 | 201 | # read to the end of the window containing the last SNP: 202 | if args.coverfile: 203 | while pos % args.baselength != 0: 204 | pos += 1 205 | if mergedMask.getVal(pos): 206 | nr_called_window += 1 207 | if pos % args.baselength == 0: 208 | print(nr_called_window, end="\n", file=coverage) 209 | coverage.close() 210 | 211 | -------------------------------------------------------------------------------- /windower.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys, math, numpy, os.path, collections, argparse 4 | 5 | 6 | def parse_args(arglist): 7 | parser = argparse.ArgumentParser() 8 | parser.add_argument("path", help="Path/prefix for SNP file, and maybe coverage and output files") 9 | parser.add_argument("--coverfile", help="Coverage file, if different from _cover.txt") 10 | parser.add_argument("--outpath", help="path/prefix for output files, if different from input") 11 | parser.add_argument("--scales", help="number of length scales to use for windows", type=int, default=16) 12 | parser.add_argument("--ratio", help="Ratio between successive length scales. Must be integer", type=int, default=2) 13 | parser.add_argument("--baselength", help="Smallest length scale", type=int, default=80) 14 | parser.add_argument("--min_coverage", help="Minimum coverage for a window to be counted", type=float, default=0.8) 15 | parser.add_argument("--sample_gaps", help="For counts, up- or downsample windows to the same coverage", choices=['up', 'down', 'no'], default='down') 16 | parser.add_argument("--stat", help="Statistic to calculate (tbl, individual tips, folded sfs component)", default='tbl') 17 | parser.add_argument("--input_form", help="Format of input", choices=['msmc','windows','reverse_windows'], default='msmc') 18 | parser.add_argument("--final_windows", help="Print out the longest windows", action='store_true') 19 | parser.add_argument("--seed", help="Seed for random sampling of windows", type=int) 20 | args = parser.parse_args(arglist) 21 | if args.path.endswith('.txt'): 22 | args.path = args.path[:-4] 23 | return args 24 | 25 | 26 | def merge(windows, num): 27 | if num % 1: 28 | sys.exit('Ratio of succesive window sizes must be an integer') 29 | while len(windows) % num: #delete from the ends 30 | # to squeeze the most out of data, better to do chromosome arms separately, so that centromeric region also gets dropped 31 | if windows[0][1] < windows[-1][1]: 32 | windows.pop(0) 33 | else: 34 | windows.pop() 35 | return [numpy.sum(windows[i:i+num], axis=0) for i in range(0, len(windows), num)] 36 | 37 | 38 | def snpdist(windows, L, args, rng=numpy.random): 39 | dist = {} 40 | for win in windows: 41 | if win[1] >= args.min_coverage * L : 42 | # the window is sequenced at high enough coverage 43 | if args.sample_gaps == 'up' and win[1] < L and win[0]: 44 | # upsample the window 45 | count = win[0] + rng.binomial(L-win[1], win[0]/L) 46 | elif args.sample_gaps == 'down' and win[1] > math.ceil(args.min_coverage * L) and win[0]: 47 | # downsample the window 48 | count = rng.hypergeometric(win[0], win[1]-win[0], math.ceil(args.min_coverage*L)) 49 | else: 50 | # record window as-is 51 | count = win[0] 52 | try: 53 | dist[count] += 1 54 | except KeyError: 55 | dist[count] = 1 56 | return dist 57 | 58 | def initwindows(SNPs, basecoverage, args): 59 | L0 = args.baselength 60 | #initialize windows 61 | windowcounts = numpy.histogram(SNPs, bins=list(range(1, len(basecoverage)*L0+1, L0)))[0] 62 | return [numpy.array(x) for x in zip(windowcounts, basecoverage)] 63 | 64 | if __name__ == '__main__': 65 | 66 | args = parse_args(sys.argv[1:]) 67 | 68 | if args.coverfile: 69 | covername = args.coverfile 70 | else: 71 | covername = args.path + '_cover.txt' 72 | if args.outpath: 73 | outname = args.outpath 74 | else: 75 | outname = args.path 76 | 77 | if args.input_form == 'msmc': 78 | # set up the random number generator (although it will only be used if sample_gaps != 'no'): 79 | prng = numpy.random.RandomState(args.seed) 80 | with open(args.path+'.txt', 'r') as infile: 81 | samplesize = len(next(infile).split()[-1]) # might need this if we're calculating SFS or individuals' singletons 82 | with open(args.path+'.txt', 'r') as infile: 83 | if args.stat == 'tbl': 84 | # list of positions of every polymorphic site 85 | SNPs = [int(line.split()[1]) for line in infile] 86 | elif args.stat == 'tbl_alleles': 87 | if args.sample_gaps: 88 | sys.exit('Up/down-sampling only work with number of segregating sites, not number of alleles') 89 | # list of positions of every polymorphic site, with multiplicity = num alleles - 1 90 | SNPs = [int(line.split()[1]) for line in infile for _ in range(1, len(set(line.split()[-1])))] 91 | elif args.stat == 'indiv_tips': 92 | if args.final_windows: 93 | print("No final_windows option yet for indiv_singletons", file=sys.stderr) 94 | # break out singletons in each individual separately 95 | SNPs = {i:[] for i in range(0, samplesize//2)} 96 | for line in infile: 97 | alleles = line.split()[-1] 98 | for allele, num in collections.Counter(alleles).items(): 99 | if num == 1: 100 | SNPs[alleles.find(allele)//2].append(int(line.split()[1])) 101 | else: #guess that we're trying to use sites with allele in n copies for some n 102 | try: 103 | copies = int(args.stat) 104 | except ValueError: 105 | sys.exit("Not sure what statistic to calculate") 106 | if copies not in range(1,samplesize): 107 | sys.exit("SFS component out of range") 108 | # list of positions of every site (without multiplicity) where an allele has n copies 109 | SNPs = [int(line.split()[1]) for line in infile if copies in collections.Counter(line.split()[-1]).values()] 110 | with open(covername, 'r') as coverfile: 111 | basecoverage = [int(x) for x in coverfile] 112 | elif args.input_form == 'windows': 113 | with open(args.path+'.txt', 'r') as infile: 114 | windows = [numpy.array([int(x) for x in line.split()[:2]]) for line in infile] 115 | elif args.input_form == 'reverse_windows': 116 | with open(args.path+'.txt', 'r') as infile: 117 | windows = [numpy.array([int(x) for x in reversed(line.split()[:2])]) for line in infile] 118 | 119 | 120 | 121 | #count diversity in windows: 122 | if args.stat == 'indiv_tips': 123 | windowsums = {indiv: [] for indiv in SNPs.keys()} 124 | else: 125 | windowsums = [] 126 | with open(outname+'.log','w') as outfile: 127 | for fold in range(args.scales): 128 | print('Calculating stats for lengthscale '+str(fold), file=outfile) 129 | L = args.baselength * pow(args.ratio,fold) 130 | if args.stat == 'indiv_tips': 131 | try: 132 | windows = {indiv: merge(indivwindows, args.ratio) for indiv, indivwindows in windows.items()} 133 | except NameError: 134 | windows = {indiv: initwindows(indivSNPs, basecoverage, args) for indiv, indivSNPs in SNPs.items()} 135 | for indiv, indivwindows in windows.items(): 136 | if len(indivwindows) < 2: 137 | print('Reached chromosome length at length scale {} for individual {}'.format(fold, indiv), file=outfile) 138 | del windows[indiv] 139 | else: 140 | windowsums[indiv].append(snpdist(indivwindows, L, args, prng)) 141 | if not windows: 142 | break 143 | else: 144 | try: 145 | windows = merge(windows, args.ratio) 146 | except NameError: 147 | windows = initwindows(SNPs, basecoverage, args) 148 | if len(windows) < 2: 149 | print('Reached chromosome length at length scale ' + str(fold), file=outfile) 150 | break 151 | windowsums.append(snpdist(windows, L, args, prng)) 152 | 153 | if args.stat == 'indiv_tips': 154 | for indiv, indivwindows in windowsums.items(): 155 | with open(outname+'{}_counts.txt'.format(indiv),'w') as outfile: 156 | for scale in indivwindows: 157 | print(', '.join(' '.join(str(x) for x in pair) for pair in sorted(scale.items())), file=outfile) 158 | else: 159 | with open(outname+'_counts.txt','w') as outfile: 160 | for scale in windowsums: 161 | print(', '.join(' '.join(str(x) for x in pair) for pair in sorted(scale.items())), file=outfile) 162 | if args.final_windows: 163 | with open(outname+'_windows'+str(fold)+'.txt','w') as outfile: 164 | print('\n'.join((' '.join(str(x) for x in window)) for window in windows), file=outfile) 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | MAGIC 2 | ======= 3 | 4 | This is the implementation for [Minimal Assumption Genomic Inference of Coalescence (MAGIC)](http://biorxiv.org/content/early/2016/10/31/084459). 5 | From genome sequences, MAGIC can be used to infer the distribution of pairwise coalescence times 6 | (i.e., "_N_e(_t_)"), as well as the distribution of lengths of any part of the coalescent trees 7 | (e.g., total branch length, tips, branches above cherries, etc). 8 | MAGIC works with the [msmc-tools](http://github.com/stschiff/msmc-tools) set of programs to process the initial data. 9 | Everything, including the parts of msmc-tools that MAGIC interacts with, is written 10 | in Python, and is designed to be modular, so you are encouraged to edit and add to it. 11 | 12 | ## Requirements 13 | - [Python 3.4+](http://www.python.org) 14 | - [SciPy](http://www.scipy.org/) (including NumPy) 15 | - [msmc-tools](http://github.com/stschiff/msmc-tools) 16 | - Optional, just for plotting and interactive analysis: 17 | - [Jupyter](http://www.jupyter.org) 18 | - [matplotlib](http://matplotlib.org/) 19 | 20 | [Anaconda](http://www.continuum.io) is an easy way to install Python, SciPy, Jupyter, and matplotlib together, along with a lot of other stuff. 21 | 22 | 23 | ## Basic workflow 24 | 25 | 1. Pre-process the data using [msmc-tools](http://github.com/stschiff/msmc-tools) to produce vcf files and masks. 26 | 2. Use [combo_prep.py](#combo_preppy) to convert these into a list of SNPs and a sequencing coverage file. 27 | 3. Use [windower.py](#windowerpy) to filter the SNPs for those that are informative about the desired coalescence times, and find their distribution across genomic windows. 28 | 4. Use [magic.py](#magicpy) to infer the distribution of coalescence times from the window diversity distributions. 29 | 5. Plot the results with [magicplots.ipynb](#magicplotsipynb). 30 | 31 | See the [example](#example) for specifics. 32 | 33 | ## Example 34 | 35 | Here's a basic example of how you might use MAGIC. 36 | Say that you have used `msmc-tools` to prepare zipped vcf files of chromosome 1 from a sample of many individuals, 37 | with each file having a name like `_chr1.vcf.gz`, 38 | along with masks for covered sites with names like `covered__chr1.bed.gz`, 39 | where `` is the label for each individual. 40 | (Not sure how to do this? [Instructions.](https://github.com/stschiff/msmc-tools/blob/master/README.md) Still not sure? [Ask!](https://groups.google.com/forum/#!forum/msmc-popgen)) 41 | Now you want to analyze this sample. 42 | You would run: 43 | 44 | ./combo_prep.py *_chr1.vcf.gz --coverfile chr1_cover.txt --masks covered_*_chr1.bed.gz > chr1.txt 45 | 46 | Now you can calculate all the distributions you want without re-running this step. 47 | To calculate the total branch length distribution (the default), you would run: 48 | 49 | ./windower.py chr1 50 | ./magic.py chr1_counts.txt --out chr1 51 | 52 | If you've processed multiple chromosomes with `combo_prep.py` and `windower.py` and want to 53 | combine them all to find the genomic distribution, you would run: 54 | 55 | ./magic.py chr*_counts.txt --out genome 56 | 57 | If you then want to find the distribution of, say, total tip lengths, you would run: 58 | 59 | ./windower.py chr1 --stat 1 60 | ./magic.py chr1_1_counts.txt --out chr1_ttip 61 | 62 | [See the other built-in statistics that you can estimate.](#specifying-features-to-estimate) 63 | 64 | To look at all the distributions, run: 65 | 66 | jupyter notebook 67 | 68 | and open `magicplots.ipynb`. 69 | Change the variable names to `stats = ["chr1", "genome", "chr1_ttip"]` and `pairstats = ["chr1", "genome"]` and run all the cells. 70 | 71 | 72 | 73 | # Component scripts 74 | 75 | ## combo\_prep.py 76 | 77 | This is an enhanced version of msmc-tools' [generate\_multihetsep.py](https://github.com/stschiff/msmc-tools/blob/master/generate_multihetsep.py). 78 | It takes the same input formats and returns the [same list of SNPs](https://github.com/stschiff/msmc/blob/master/guide.md#input-file-format), ready for MSMC. 79 | See the [msmc-tools user guide](https://github.com/stschiff/msmc-tools/blob/master/README.md) for instructions 80 | -- everything is exactly the same, with two exceptions. 81 | The substantive one is that if the optional keyword argument `--coverfile ` is used, 82 | `combo_prep.py` returns an additional file giving the sequence coverage of the whole genome in short windows, 83 | which MAGIC needs. 84 | The other difference is superficial: the `--mask` and `--negative_mask` arguments have been replaced 85 | by `--masks` and `--negative_masks`, respectively, which work slightly differently. 86 | Whereas with `generate_multihetsep.py` you would enter multiple masks as `--mask mask1 --mask mask2 ...`, 87 | with `combo_prep.py` this would be `--masks mask1 mask2 ...`, which reduces redundancy and works better with globbing, etc. 88 | Note that this means that these arguments must come *after* the vcf files in the command line -- see the [example](#example). 89 | 90 | ## windower.py 91 | 92 | This performs the feature-specific part of the data preparation. 93 | Given a desired coalescence time feature (e.g., pairwise time or total branch length), it first filters all the SNPs for the ones that are relevant for that time. 94 | Then, for each of a range of length scales, 95 | it splits the genome into windows of that length 96 | and returns how many of those windows contain 0 SNPs, how many contain 1, etc. 97 | 98 | The basic syntax is: 99 | 100 | ./windower.py --stat 101 | 102 | This produces a file (by default with suffix `_counts.txt`) with one line for each length scale, starting from the shortest. 103 | Each line consists of a comma-separated list of entries `n k_n`, where `n` is a number of SNPs and `k_n` is the number of windows of that length that contain `n` SNPs. 104 | 105 | ### Specifying features to estimate 106 | 107 | For each piece of a potential coalescent tree, mutations that occur on that piece 108 | will show up as SNPs with a characteristic distribution across individuals. 109 | For example, the set of all branches above cherries corresponds to doubleton SNPs, while the tips above individual 1's two haplotypes correspond to individual 1's singleton SNPs. 110 | 111 | There are a few default options for tree features built into `windower.py`: 112 | 113 | - `tbl` (default): Total branch length (all polymorphisms). To find the pairwise coalescence time distribution, run `windower.py` on each (diploid) individual with this option, and then run `magic.py` on all the outputs together. (Note the factor of 2 difference between the pairwise TMRCA and the pairwise TBL though.) 114 | - `indiv_tips`: Length of tips above each individual (singletons, separated by individual). For a sample of _n_ individuals, this will return _n_ output files, one for each individual. Run `magic.py` separately on each of these outputs to find the distribution of tip lengths above each individual, or on all of them together to find the combined distribution across all individuals. 115 | - Integer _j_: Length of branches lying above exactly _j_ haplotypes in the unrooted tree (SNPs where minor allele has _j_ copies). Running `magic.py` on the output will give a more powerful version of the (folded) site-frequency spectrum. While the site-frequency spectrum just gives the mean length of the corresponding set of tree branches, this will give the full distribution of lengths. 116 | 117 | The idea, though, is that you can easily write your own filter for the features you want to know about. 118 | The defaults all work with unphased, unpolarized data, so if you want to take advantage of the 119 | extra information provided by phasing or polarization, you'll *have* to do write your own! 120 | 121 | 122 | 123 | ## magic.py 124 | 125 | This is where MAGIC infers the coalescence time distributions from the genomic diversity. 126 | The basic syntax is: 127 | 128 | ./magic.py --out 129 | 130 | where the histogram files are the outputs of `windower.py`. 131 | This will produce a file with the suffix `_final.txt` with the best fit 132 | for the desired coalescence time distribution. 133 | There are two possible forms currently implemented: 134 | 135 | - **Piecewise-exponential** (default or use `--family pieceexp`). 136 | This is the same form as MSMC. The first column of the file lists the starting points of the time intervals. The second column gives the rate parameter in each interval. If you're analyzing pairwise coalescence times, this is the coalescence rate, *c*(*t*) = 1/*N*e(*t*). 137 | - **Gamma mixture** (use `--family gammamix`). 138 | A mixture of [gamma distributions](https://en.wikipedia.org/wiki/Gamma_distribution). 139 | The first column of the file gives 140 | the weights of each component gamma distribution, the second column gives the shape 141 | parameters, and the third gives the scale parameters. 142 | If the last row has only a single column, it is the estimated probability that the 143 | desired time is exactly 0. 144 | (This is expected for many tree features, e.g., 145 | branches that lie over exactly 1/3 of the haplotypes in the sample; 146 | for these features you can force `magic.py` to include this line using the optional argument `--zero`.) 147 | 148 | For both forms, all times are normalized with the per-base mutation rate, so, for example, 0.002 means 0.002/μ. Note that if you're looking at pairwise data, this time counts both branches of the coalescent tree, so if you want to get just the number of generations in the past, you would divide by 2 to get 0.001/μ. 149 | 150 | Additionally, `magic.py` produces a file with the suffix `_LT.txt` 151 | giving the Laplace transform of the distribution at a discrete set of points. 152 | These points are the underlying data used to fit the mixture of gamma distributions, 153 | and are useful in their own right for model checking. 154 | In each row of the file, the first entry is the 155 | value of the Laplace transform variable, _s_; the second is the estimated value of the Laplace transform at that point, LT{_p_}(_s_); and the third is the error in the estimation, σ[LT{_p_}(_s_)]. 156 | 157 | Finally, `magic.py` also produces a log file (suffix `.log`) giving details of the optimization procedure. See the [SciPy documentation](http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.OptimizeResult.html) for the interpretation. 158 | 159 | ## magicplots.ipynb 160 | 161 | If you have [Jupyter](http://jupyter.org/) installed, this is a template for making a notebook 162 | with plots of the distributions produced by MAGIC. 163 | It's also useful for doing further quantitative analysis of the results. 164 | 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /magic.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import sys, math, scipy, scipy.stats, scipy.optimize, itertools, argparse 4 | import numpy as np 5 | 6 | 7 | # Parsing arguments (needed to run as script): 8 | 9 | def parse_args(arglist): 10 | parser = argparse.ArgumentParser() 11 | parser.add_argument("countfiles", nargs="+", help="Files with histograms of polymorphisms per window (or, if LT=start, file with Laplace transform values)") 12 | parser.add_argument("--out", help="Output prefix (otherwise prints to stdout)") 13 | parser.add_argument("--baselength", help="Number of bases in shortest windows", type=int, default=80) 14 | parser.add_argument("--coverage", help="Fraction of bases that are sequenced", type=float, default=0.8) 15 | parser.add_argument("--maxLT", help="Max value of Laplace transform to fit", type=float, default=.99) 16 | parser.add_argument("--ltstep", help="Max spacing between inferred Laplace transform values", type=float, default=0.05) 17 | parser.add_argument("--extrapolation", help="How far to extrapolate to small length scales. 10 is a lot, .1 is very little.", type=float, default=.5) 18 | parser.add_argument("--family", help="Parametric form to use for coalescence time distribution", choices=("pieceexp", "gammamix"), default="pieceexp") 19 | parser.add_argument("--zero", help="Allow the coalescence time to be exactly 0 with some probability", action='store_true') 20 | parser.add_argument("--LT", help="Set to False to hide Laplace transform values. Set to 'only' to return *only* the LT values. Set to 'start' to fit a distribution starting from an existing Laplace transform", default=True) 21 | parser.add_argument("--components", help="Number of components to fit in probability distribution", type=int, default=None) 22 | parser.add_argument("--iterations", help="How many times to run optimization algorithm", type=int, default=50) 23 | parser.add_argument("--maxfun", help="Max number of function evaluations in each optimization run", type=int, default=5e4) 24 | parser.add_argument("--input", help="Format of input histograms ('full' or 'sparse'). You should leave this as 'sparse'; it's just included for backwards compatibility.", choices=("full", "sparse"), default="sparse") 25 | parser.add_argument("--smoothing", help="For piecewise-exponential distributions: how much of a penalty to assess for changes in coalescence rates", type=float, default=1) 26 | args = parser.parse_args(arglist) 27 | 28 | if args.family == 'pieceexp' and args.zero: 29 | sys.exit('Sorry, currently --zero can only be used with --family gammamix.') 30 | 31 | return args 32 | 33 | 34 | # Printing: 35 | 36 | def chooseprint(*objects, file=sys.stdout, method='w', **kwargs): 37 | '''Print to stdout, stderr, or a named file. If file, opens and closes the file.''' 38 | if file in (None, sys.stdout, sys.stderr): 39 | if 'end' in kwargs.keys(): 40 | print(*objects, file=file, **kwargs) 41 | else: 42 | # By default, add an extra newline when printing to stdout or stderr: 43 | print(*objects, file=file, end = '\n\n', **kwargs) 44 | else: 45 | with open(file, method) as outfile: 46 | print(*objects, file=outfile, **kwargs) 47 | 48 | 49 | 50 | # Inferring the Laplace transform curve: 51 | 52 | class ProbPoint: 53 | '''A probability, optionally with standard error and ordinate.''' 54 | def __init__(self, p, e=0, x=None): 55 | self.p = p 56 | self.e = e 57 | if x is not None: 58 | self.x = x 59 | def pe(self): 60 | return self.p, self.e 61 | def xpe(self): 62 | return self.x, self.p, self.e 63 | def check(self, emax=None, pmin=0, pmax=1, var=False): 64 | '''Check that a putative probability with error makes sense''' 65 | # error is standard error, unless var=True, in which case it is variance 66 | if pmin < self.p < pmax: 67 | #require that the error bars be positive but not too large -- we don't allow points that claim to be known perfectly: 68 | if math.isfinite(self.e) and 0 < self.e < 1: 69 | if emax: 70 | if var: #need to take sqrt to get std err 71 | err = math.sqrt(self.e) 72 | else: 73 | err = self.e 74 | if emax > err / self.p / (1-self.p): 75 | return True 76 | else: 77 | return True 78 | return False 79 | 80 | 81 | class Histogram: 82 | def __init__(self, counts): 83 | self.counts = np.array(counts) 84 | self.n_obs = sum(counts) 85 | self.tot_hits = np.arange(len(counts)) @ counts 86 | if self.n_obs: 87 | self.mean = self.tot_hits/self.n_obs 88 | 89 | class SNPHistogram(Histogram): 90 | '''A histogram of SNP counts across windows''' 91 | def make_tarray(self, method='Ghoshetal5'): 92 | '''Quick estimate of window-averaged coalescence times, to use in calculating stochasticity in mutation accumulation''' 93 | hist = self.counts 94 | if method == 'Ghoshetal5': 95 | x1 = hist.nonzero()[0][0] 96 | if len(hist) > x1+1 and sum(hist[x1+1:]) > 0: 97 | Nm1oD = (sum(hist[x1+1:]) - 1) / (sum(j*k for j, k in enumerate(hist[x1:])) - 1) 98 | return np.array([(k, j - Nm1oD * max(j-x1-1, 0), j) for j, k in enumerate(hist) if k]) 99 | else: 100 | return np.array([(hist[x1], x1, x1)]) 101 | elif method == 'ClevensonZidek': 102 | if self.tot_hits: 103 | corr = 1 + (np.count_nonzero(hist)-1) / self.tot_hits 104 | return np.array([(k, j/corr, j) for j, k in enumerate(hist) if k]) 105 | else: 106 | return np.array([(hist[0], 0, 0)]) 107 | elif method == 'ML': 108 | return np.array([(k, j, j) for j, k in enumerate(hist) if k]) 109 | else: 110 | raise ValueError('Error: invalid method') 111 | def __init__(self, counts, bases=None, coverage=1): 112 | Histogram.__init__(self, counts) 113 | self.bases = bases 114 | self.coverage = coverage 115 | self.tarray = self.make_tarray() 116 | # need to allow for fact that homozygous windows don't really have T=0: 117 | if self.tarray[0, 1] == 0: 118 | self.tarray[0, 1] = np.log(2)/self.tarray[0, 0] # could use something else 119 | def theta(self): 120 | '''Mean number of mutations per sequenced base.''' 121 | return self.mean / (self.bases * self.coverage) 122 | def gfe(self, z): 123 | '''Generating function with error bars.''' 124 | zpows = z**np.arange(len(self.counts)) 125 | p0 = zpows @ self.counts / self.n_obs 126 | with np.errstate(over='raise'): 127 | try: 128 | err = np.sqrt((np.exp(-(1-z**2) * self.tarray[:,1]) - np.exp(-2 * (1-z) * self.tarray[:,1])) @ self.tarray[:,0]) / self.n_obs 129 | except FloatingPointError: 130 | err = np.inf 131 | return ProbPoint(p0, err, z) 132 | def lte(self, s): 133 | '''Estimated LaplaceTransform{p_T}(s), with error.''' 134 | return self.gfe(1 - s/(self.bases * self.coverage)) 135 | def ltle(self, s): 136 | '''Estimated LaplaceTransform{p_T}(s), with error and log_2(#bases) as ordinate.''' 137 | lt = self.gfe(1 - s/(self.bases * self.coverage)) 138 | lt.x = np.log2(self.bases) 139 | return lt 140 | 141 | 142 | def sigmoid(x, yleft=1, yright=0, xmid=0, slope=1, alpha=1): 143 | '''Sigmoid function (generalized logistic curve).''' 144 | return yleft + (yright - yleft) * scipy.special.expit(slope * (x - xmid))**alpha 145 | 146 | 147 | def sigmoid_fit(points, anchor=None): 148 | ''''Fit a sigmoid curve to points.''' 149 | xvals, yvals, sigmavals = zip(*points) 150 | # initial guesses: 151 | # bounded linear extrapolation for left asymptote: 152 | yleft0 = min(1, yvals[0] + (yvals[0] - yvals[1]) * xvals[0] / (xvals[1] - xvals[0])) 153 | p0vals = [yleft0, yvals[-1]*.9, np.mean(xvals), 1] 154 | if anchor is None: 155 | # make sure that there is some slope to detect above the noise: 156 | if max(yvals) - min(yvals) < .1 * np.median(sigmavals): 157 | return None 158 | else: 159 | bounds = (0, [1, 1, np.inf, np.inf]) 160 | f = sigmoid 161 | else: 162 | # make sure that there is some slope to detect above the noise: 163 | if max(yvals) - anchor < .1 * np.median(sigmavals): 164 | return None 165 | else: 166 | # anchor the right asymptote of the sigmoid: 167 | del p0vals[1] 168 | p0vals.append(1) 169 | def f(x, yleft, xmid, slope, alpha): 170 | return sigmoid(x, yleft, anchor, xmid, slope, alpha) 171 | bounds = (0, [1, np.inf, np.inf, np.inf]) 172 | try: 173 | return scipy.optimize.curve_fit(f, xvals, yvals, p0=p0vals, sigma=sigmavals, absolute_sigma=True, bounds=bounds, max_nfev=10**5) 174 | except Exception as error: 175 | # print(error) 176 | return None 177 | 178 | def check_fit(fit, data, extrapolation=.5, anchor=None): 179 | '''Check that fit isn't extrapolating too much, i.e., we have data close to the left asymptote, and that we have a valid probability''' 180 | if fit is None: 181 | return False 182 | if anchor: 183 | yleft, xmid, slope, alpha = fit[0] 184 | yright = anchor 185 | else: 186 | yleft, yright, xmid, slope = fit[0] 187 | alpha = 1 188 | # check that we have data close to left asymptote (ie, not extrapolating too much): 189 | if (yleft - sigmoid(data[0][0], yleft, yright, xmid, slope, alpha))**2 < 0.001 * extrapolation * yleft * (1 - yleft): 190 | # check that we have a valid probability: 191 | try: 192 | pt = ProbPoint(fit[0][0], np.sqrt(fit[1][0][0])) 193 | except: 194 | return False 195 | if pt.check(): 196 | return True 197 | return False 198 | 199 | def h0e(LTLpts, extrapolation=.5, anchor=None, return_full=False): 200 | '''Infer the pointwise LT with error at s given a list of estimates based on different window sizes.''' 201 | if len(LTLpts) < 4 : #not going to be able to fit sigmoid 202 | return None 203 | # first fitting to find threshold where LT approaches small-scale value: 204 | fit = sigmoid_fit(LTLpts, anchor=anchor) 205 | if fit: 206 | if anchor: 207 | yleft, xmid, slope, alpha = fit[0] 208 | else: 209 | yleft, yright, xmid, slope = fit[0] 210 | # if we have enough points on both sides of the midpoint, try to do second fitting with just the short-scale points to focus in on left asymptote: 211 | shortLTLpts = [ltl for ltl in LTLpts if ltl[0] < xmid] 212 | longLTLpts = [ltl for ltl in LTLpts if ltl[0] > xmid] 213 | if len(shortLTLpts) >= 4 and len(longLTLpts) > 2: 214 | # if we have lots of short-scale points, we can restrict even further: 215 | while len(shortLTLpts) > 6 and (xmid - shortLTLpts[-1][0]) * slope < 1: 216 | shortLTLpts.pop() 217 | tmp_fit = sigmoid_fit(shortLTLpts, anchor=anchor) 218 | if check_fit(tmp_fit, shortLTLpts, extrapolation, anchor): 219 | fit = tmp_fit 220 | # check that we have a plausible fit: 221 | if check_fit(fit, LTLpts, extrapolation, anchor): 222 | pt = ProbPoint(fit[0][0], np.sqrt(fit[1][0][0])) 223 | if return_full: 224 | return fit 225 | else: 226 | return pt 227 | return None 228 | 229 | 230 | def infer_slt(counts, svals=None, sratio=np.sqrt(2), maxHom=.99, emaxL=1, pmin=0, pmax=1, emax0=.1, extrapolation=.5, failtol=2, anchor=True, ltstep=0.05, min_s_pow=0.2): 231 | '''From diversity histograms across a range of window lengths, calculate the Laplace transform of the coalescence time distribution at a range of points''' 232 | # define function h0e(s) = [s, LT{p_T}(s), error]: 233 | def s2pt(s): 234 | LTLpts = [pt.xpe() for pt in (hist.ltle(s) for hist in counts) if pt.check(emax=emaxL, pmin=pmin, pmax=pmax)] 235 | if anchor: 236 | pe = h0e(LTLpts, extrapolation=extrapolation, anchor=np.exp(-s*counts[-1].theta())) 237 | else: 238 | pe = h0e(LTLpts, extrapolation=extrapolation) 239 | if pe is None: 240 | return None 241 | else: 242 | pe.x = s 243 | return pe 244 | if svals is not None: # list of desired s values provided 245 | allSLT = [s2pt(s) for s in svals] 246 | return np.array([slt.xpe() for slt in allSLT if slt and slt.check(emax=emax0)]) 247 | else: # need to determine appropriate s values 248 | if sratio <= 1: 249 | sys.exit("Error: sratio must be > 1.") 250 | # start with a wide range of s values: 251 | svals = np.geomspace(0.01 / counts[0].theta(), 100 / counts[0].theta()) 252 | allSLT = [s2pt(s) for s in svals] 253 | # go to lower s values until estimated homozygosity exceeds maxHom or things get too noisy: 254 | while allSLT[0] and allSLT[0].check(pmax=maxHom): 255 | s = allSLT[0].x / sratio 256 | allSLT.insert(0, s2pt(s)) 257 | allSLT = [slt for slt in allSLT if slt] 258 | try: 259 | s = allSLT[-1].x 260 | except: #no s values worked so far; just give up 261 | return None 262 | # go to higher values until we run out of data: 263 | failures = 0 264 | while failures <= failtol: # we will allow for some gaps 265 | s *= sratio 266 | slt = s2pt(s) 267 | if slt and slt.check(emax=emax0): 268 | allSLT.append(slt) 269 | else: 270 | failures += 1 271 | # remove any points where the error bars exceed our tolerance: 272 | SLT = [slt for slt in allSLT if slt.check(emax=emax0)] 273 | # go back and fill in gaps where LT changed a lot between successive points 274 | # limit the number of points that can be added between any pair to avoid possible infinite loops caused by bad points 275 | min_s_ratio = sratio**min_s_pow 276 | i = 0 277 | while i < len(SLT) - 1: 278 | while SLT[i].p > SLT[i+1].p + ltstep and SLT[i+1].x/SLT[i].x > min_s_ratio: 279 | # add a point in between them 280 | # make a list of possible s-values in case the first doesn't work 281 | smids = np.logspace(np.log10(SLT[i].x), np.log10(SLT[i+1].x), num=4, endpoint=False)[1:] 282 | # start from the middle and work our way out 283 | order = np.argsort(np.abs(2 * np.log(smids) - np.log(SLT[i].x) - np.log(SLT[i+1].x))) 284 | for j in order: 285 | slt = s2pt(smids[j]) 286 | if slt and slt.check(emax=emax0): 287 | SLT.insert(i+1, slt) 288 | break 289 | else: # give up on filling this gap, move on to the next one 290 | break 291 | i += 1 292 | return np.array([slt.xpe() for slt in SLT if slt.check(emax=emax0)]) 293 | 294 | 295 | 296 | # Inferring distributions from their Laplace transforms 297 | 298 | ## Helper functions for inferring a piecewise exponential distribution 299 | 300 | def piece_exp_obj(params, breaks, mLTobs, smoothing=0, zeroPt=False): 301 | if zeroPt: 302 | # first entry of params is weight at t=0: 303 | p0 = params[0] 304 | rates = params[1:] 305 | else: 306 | p0 = 0 307 | rates = params 308 | breakPs = (1 - p0) * np.exp(np.cumsum(np.concatenate(((0,), -np.diff(breaks) * rates[:-1])))) 309 | prefactors = [breakPs * np.exp(-m * breaks) / (1 + m/rates) for m in mLTobs[:,0]] 310 | postfactors = [np.concatenate( (-np.expm1(-(rates[:-1] + m) * np.diff(breaks)), (1,)) ) for m in mLTobs[:,0]] 311 | return sum( ((prefactors[i] @ postfactors[i] + p0 - obs[1]) / obs[2])**2 for i, obs in enumerate(mLTobs) ) + smoothing * np.linalg.norm(np.diff(np.log(rates)))**2 312 | 313 | 314 | # class PieceExpStep(object): 315 | # def __init__(self, stepsize=0.5): 316 | # self.stepsize = stepsize 317 | # def __call__(self, rates): 318 | # s = self.stepsize 319 | # eps = 1e-8 320 | # # rates are log-normal to keep them positive 321 | # # we take steps such that the *median*, not mean, is equal to the starting value 322 | # # add eps to make sure we don't try to try to take log of 0 323 | # newrates = np.random.lognormal(np.log(rates + eps), s) 324 | # return newrates 325 | 326 | 327 | ## Helper functions for inferring a mixture of gamma distributions: 328 | 329 | def gamma_obj(GParams, mLTobs, zeroPt=False): 330 | norm = np.sum(GParams[::3]) 331 | if zeroPt: 332 | # last entry of GParams is weight at t=0 333 | return np.linalg.norm([((GParams[:-1:3] @ np.power(1 + GParams[2::3]*obs[0], -GParams[1::3]) + GParams[-1]) / norm - obs[1]) / obs[2] for obs in mLTobs]) 334 | else: 335 | return np.linalg.norm([(GParams[::3] @ np.power(1 + GParams[2::3]*obs[0], -GParams[1::3]) / norm - obs[1]) / obs[2] for obs in mLTobs]) 336 | 337 | class GammaMixStep(object): 338 | def __init__(self, stepsize=0.5): 339 | self.stepsize = stepsize 340 | def __call__(self, gp): 341 | s = self.stepsize 342 | eps = 1e-8 343 | gpnew = np.copy(gp) 344 | # component weights are drawn from a Dirichlet distribution to normalize them: 345 | gpnew[::3] = np.random.dirichlet(gp[::3]/sum(gp[::3])/s) 346 | # component means and scales are log-normal to keep them positive 347 | # we take steps such that the *median*, not mean, is equal to the starting value 348 | # add eps to make sure we don't try to try to take log of 0 349 | gpnew[1::3] = np.random.lognormal(np.log(gp[1::3] + eps), s) 350 | gpnew[2::3] = np.random.lognormal(np.log(gp[2::3] + eps), s) 351 | return gpnew 352 | 353 | ## Main inference function 354 | 355 | def infer_distribution(mLTobs, method='basinhopping', family='gammamix', zeroPt=False, guess=None, npieces=None, bounds=None, 356 | m=None, T=None, smoothing=0, eps=1e-9, niter=50, factr=1e3, pgtol=1e-6, maxfun=1e4, maxiter=1e4): 357 | '''Infer a probability distribution from its estimated Laplace transform''' 358 | if family not in ['gammamix', 'pieceexp']: 359 | sys.exit("Unknown functional family for distribution.") 360 | if len(mLTobs) < 2: 361 | sys.exit("Unable to infer enough of the Laplace transform to invert.") 362 | if m is None: 363 | m = max(10, len(mLTobs)**2) 364 | if family == 'gammamix': 365 | func = gamma_obj 366 | if guess is None: 367 | if zeroPt: 368 | if npieces is None: 369 | npieces = 1 + len(mLTobs) // 3 370 | guess = np.append(np.ravel([[ 1/npieces, npieces-.1-i, 1/mLTobs[-i,0]/(npieces-.1-i)] for i in range(npieces-1)]) , 1/npieces) 371 | else: 372 | if npieces is None: 373 | npieces = (len(mLTobs) + 1) // 3 374 | guess = np.ravel([[1 / npieces, npieces - .1 - i, 1 / mLTobs[-i,0] / (npieces-.1-i)] for i in range(npieces)]) 375 | if bounds is None: 376 | bounds = [[(eps, 1), (eps, None), (eps, None)][x % 3] for x in range(len(guess))] 377 | # eps is a small number to keep quantities that should be positive from being set exactly to 0 378 | args = (mLTobs, zeroPt) 379 | step = GammaMixStep() 380 | elif family == 'pieceexp': 381 | func = piece_exp_obj 382 | if guess is None: 383 | if npieces is None: 384 | npieces = len(mLTobs) 385 | # try to infer out to time where ~95% of genome has coalesced: 386 | tmax = 1 / mLTobs[np.searchsorted(1 - mLTobs[:,1], 0.05), 0] 387 | breaks = np.concatenate( ((0,), np.geomspace(0.5/mLTobs[-1,0], tmax, num=npieces-1)) ) 388 | guess = np.ones(npieces) * mLTobs[0,0]/(1 - mLTobs[0,1]) 389 | if bounds is None: 390 | bounds = [(eps, None) for rate in guess] 391 | # eps is a small number to keep quantities that should be positive from being set exactly to 0 392 | args = (breaks, mLTobs, smoothing) 393 | step = None 394 | if method == 'basinhopping': 395 | if T is None: # need to set the "temperature" of the algorithm 396 | # we expect the differences among peak heights to scale with the number of points being fitted: 397 | T = len(mLTobs)/10 398 | ans = scipy.optimize.basinhopping(func, guess, niter=niter, T=T, take_step=step, minimizer_kwargs={"method":"L-BFGS-B", 399 | "args":args, "bounds":bounds, "options": {"ftol":factr*1e-17, "gtol":pgtol, "maxfun":maxfun, "maxiter":maxiter, "maxcor":m}},) 400 | if family == 'pieceexp': 401 | ans.x = np.stack((breaks, ans.x)) # return the breakpoints along with the rates 402 | else: 403 | ans = list(scipy.optimize.fmin_l_bfgs_b(func, guess, args=args, approx_grad=True, bounds=bounds, factr=factr, pgtol=pgtol, maxfun=maxfun, maxiter=maxiter, m=m)) 404 | if family == 'pieceexp': 405 | ans[0] = np.stack((breaks, ans[0])) # return the breakpoints along with the rates 406 | return ans 407 | 408 | def clean_parameters(ans, args): 409 | '''Extract parameter values of a distribution from the output of infer_distribution''' 410 | try: 411 | params = ans.x # if we're getting full output from basinhopping 412 | except: 413 | params = ans[0] # if we just did L-BFGS-B 414 | if args.family == 'gammamix': 415 | norm = np.sum(params[::3]) 416 | niceparams = [params[i:i+3]/[norm,1,1] for i in range(0, len(params)-1, 3) if all(params[i:i+3])] 417 | #niceparams doesn't include any mass at zero yet; calculate it separately: 418 | wzero = 0 419 | for i in range(0, len(params)-1, 3): 420 | if any(params[i+1:i+3]==0): 421 | # this corresponds to a point mass at 0 422 | wzero += params[i]/norm 423 | if args.zero: 424 | # assumed mass at 0 425 | wzero += params[-1]/norm 426 | if wzero: 427 | niceparams += [wzero,] 428 | elif args.family == 'pieceexp': 429 | niceparams = np.transpose(params) 430 | return niceparams 431 | 432 | 433 | 434 | 435 | # Probability distributions: 436 | 437 | ## Gamma mixture distributions: 438 | 439 | class GammaMix(scipy.stats.rv_continuous): 440 | '''Mixture of gamma distributions and optionally a discrete mass at 0.''' 441 | def __init__(self, params): 442 | scipy.stats.rv_continuous.__init__(self, a=0) # says that distribution is bounded below by 0 443 | self.params = np.ravel(np.copy(params)) 444 | self.params[::3] /= np.sum(self.params[::3]) 445 | self.parray = np.copy(self.params[:3*(len(self.params)//3)]) #leave off any trailing weight at t=0 446 | self.parray.shape = (len(self.parray)//3, 3) 447 | def _pdf(self, t): 448 | # Note that we just omit any possible point mass at t=0 (but it's included in normalization) 449 | return np.sum(self.params[i] * scipy.stats.gamma.pdf(t, self.params[i+1], scale=self.params[i+2]) for i in range(0, len(self.params)-1, 3)) 450 | def _cdf(self, t): 451 | #include possibility for delta functions at 0 452 | return np.sum(self.params[i] * scipy.stats.gamma.cdf(t, self.params[i+1], scale=self.params[i+2]) if (i 0: 491 | self.breaks = np.concatenate( ((0,), self.breaks) ) 492 | else: 493 | raise Exception("Breaks and rates must match") 494 | self.breakPs = np.exp(np.cumsum(np.concatenate(((0,), -np.diff(self.breaks) * self.rates[:-1])))) # the survival function evaluated at the breakpoints 495 | def _pdf(self, t): 496 | i = np.searchsorted(self.breaks, t, side='right') - 1 497 | return self.rates[i] * self.breakPs[i] * np.exp(-self.rates[i] * (t - self.breaks[i])) 498 | def _sf(self, t): 499 | i = np.searchsorted(self.breaks, t, side='right') - 1 500 | return self.breakPs[i] * np.exp(-self.rates[i] * (t - self.breaks[i])) 501 | def _cdf(self, t): 502 | return 1 - self._sf(t) 503 | def mean(self): 504 | return -np.concatenate((np.diff(self.breakPs), [0])) @ (1/self.rates) 505 | def lt(self, s): 506 | '''Laplace transform evaluated at s.''' 507 | return self.breakPs[-1] * np.exp(-s * self.breaks[-1]) / (1 + s / self.rates[-1]) - ( 508 | np.sum(self.breakPs[i] * np.exp(-s * self.breaks[i]) / (1 + s / self.rates[i]) * np.expm1(-(self.rates[i] + s) * gap) for i, gap in enumerate(np.diff(self.breaks))) ) 509 | def blcdf(self, r): 510 | '''Fraction of IBD blocks with map length less than r/(mutation rate).''' 511 | rc = np.outer(r, np.ones(len(self.rates))) + self.rates 512 | prefactors = self.breakPs * np.exp(-np.outer(r, self.breaks)) / (1 + np.outer(r, 1/self.rates)) 513 | postfactors = self.breaks + 1 / rc 514 | postfactors[:, :-1] -= (1 / rc[:, :-1] + self.breaks[1:]) * np.exp(-rc[:, :-1] * np.diff(self.breaks)) 515 | return np.array([pre @ postfactors[i] for i, pre in enumerate(prefactors)]) / self.mean() 516 | def ne(self, t): 517 | '''Inverse hazard rate ("effective population size" for pairwise coalescence time, but note that it is 4 * mu * N_e(2 * mu * t)).''' 518 | return 1 / self.rates[np.searchsorted(self.breaks, t, side='right') - 1] 519 | def ms(self, L=0, rho=0, trees=False): 520 | '''Produce parameter string for ms.''' 521 | theta0 = 1 / self.rates[0] 522 | msparams = '' 523 | if trees: 524 | msparams += '-T ' 525 | if L: 526 | msparams += '-t {} -r {} {} -p {} '.format(L * theta0, L * rho * theta0, L, math.ceil(math.log10(L))) 527 | msparams += '-eN ' + '-eN '.join('{} {} '.format(self.breaks[i] / theta0 / 2, 1 / self.rates[i] / theta0) for i in range(1, len(self.breaks))) 528 | return msparams 529 | 530 | 531 | 532 | # Processing windower output: 533 | 534 | def combine_counts(counts, input="sparse"): 535 | '''Combine multiple histograms.''' 536 | if input == "sparse": 537 | combokeys = set().union(*[hist.keys() for hist in counts if hist is not None]) 538 | return {i:sum(hist[i] for hist in counts if hist is not None and i in hist.keys()) for i in combokeys} 539 | elif input == "full": 540 | total = np.zeros(max(len(hist) for hist in counts), dtype=int) 541 | for hist in counts: 542 | total[:len(hist)] += hist 543 | return total 544 | else: 545 | sys.exit("Unknown input format") 546 | 547 | 548 | def dict2array(wdata): 549 | '''Given dictionary histogram of data {i:count_i}, returns an array with array[i]=count_i.''' 550 | maxi = max(wdata.keys()) 551 | a = np.zeros(maxi+1) 552 | for i,n in wdata.items(): 553 | a[i] = n 554 | return a 555 | 556 | 557 | def extract_counts(filenames, input="sparse"): 558 | '''from a list of files, returns a list of arrays with the j^th entry of the i^th array = number of windows at lengthscale i with j polymorphisms.''' 559 | # if the input files are written as sparse dictionaries: 560 | if input == "sparse": 561 | countdicts = [] 562 | for file in filenames: 563 | with open(file, 'r') as infile: 564 | countdicts.append([None if line=='\n' else {int(pair.split()[0]): int(pair.split()[1]) for pair in line.split(',')} for line in infile]) 565 | # remove any trailing Nones arising from trailing whitespace in the input file: 566 | while countdicts[-1] and countdicts[-1][-1] is None: 567 | countdicts[-1].pop() 568 | combocountdicts = [combine_counts(hists, "sparse") for hists in itertools.zip_longest(*countdicts)] 569 | if {} in combocountdicts: 570 | sys.exit("There appears to be a lengthscale with no data. Try checking the *_counts.txt files for extraneous blank lines.") 571 | return [SNPHistogram(dict2array(hist)) for hist in combocountdicts] 572 | # if the input files are written as full lists: 573 | elif input == "full": 574 | allcounts = [] 575 | for file in filenames: 576 | with open(file, 'r') as infile: 577 | allcounts.append([np.array([int(x) for x in line.split()]) for line in infile]) 578 | return [SNPHistogram(combine_counts(hists, "full")) for hists in itertools.zip_longest(*allcounts)] 579 | else: 580 | sys.exit("Unknown input format") 581 | 582 | 583 | 584 | # code to run as script: 585 | if __name__ == "__main__": 586 | import warnings 587 | 588 | args = parse_args(sys.argv[1:]) 589 | 590 | # Set up the output: 591 | if args.out: 592 | outfiles = {key: args.out + '_{}.txt'.format(key) for key in ('LT', 'final')} 593 | outfiles['log'] = args.out + '.log' 594 | # redirect warnings to the logfile: 595 | def warn2file(message, category, filename, lineno, file=None, line=None): 596 | '''Print warning to a file instead of sys.stderr''' 597 | with open(args.out+'.log', 'a') as warnfile: 598 | print(warnings.formatwarning(message, category, filename, lineno), file=warnfile) 599 | warnings.showwarning = warn2file 600 | # log the initial command: 601 | chooseprint(' '.join(sys.argv), file=outfiles['log']) 602 | else: 603 | outfiles = {key: sys.stdout for key in ('LT', 'final')} 604 | outfiles['log'] = sys.stderr 605 | 606 | if args.LT == 'start': 607 | # Import the Laplace transform: 608 | if len(args.countfiles) != 1: 609 | sys.exit('Error: please specify exactly one file for the Laplace transform') 610 | with open(args.countfiles[0], 'r') as infile: 611 | SLTpts = np.array([[float(x) for x in line.split()] for line in infile]) 612 | else: 613 | # Import the diversity histograms: 614 | counts = extract_counts(args.countfiles, input=args.input) 615 | for scale, count in enumerate(counts): 616 | count.bases = args.baselength * 2**scale 617 | count.coverage = args.coverage 618 | 619 | # Infer the Laplace transform from the diversity histograms: 620 | SLTpts = infer_slt(counts, maxHom=args.maxLT, extrapolation=args.extrapolation, ltstep=args.ltstep) 621 | 622 | if SLTpts is None: 623 | sys.exit("Unable to infer the Laplace transform. If you don't have any more data, you might want to try increasing the allowed extrapolation.") 624 | 625 | # Output the Laplace transform: 626 | if args.LT: 627 | LTstring = '\n'.join(' '.join(str(x) for x in pt) for pt in SLTpts) 628 | chooseprint(LTstring, file=outfiles['LT']) 629 | if args.LT == 'only': 630 | sys.exit() 631 | 632 | # Infer the distribution from the Laplace transform: 633 | full_params = infer_distribution(SLTpts, zeroPt=args.zero, family=args.family, npieces=args.components, niter=args.iterations, maxfun=args.maxfun, smoothing=args.smoothing) 634 | 635 | # Save the full optimization result 636 | chooseprint(full_params, file=outfiles['log'], method='a') 637 | 638 | # Output just the parameters of inferred distribution: 639 | chooseprint('\n'.join(' '.join(str(x) for x in component) for component in clean_parameters(full_params, args)), file=outfiles['final']) 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | -------------------------------------------------------------------------------- /magicplots.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Setup" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Import packages and modules" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 1, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "import numpy as np\n", 26 | "%matplotlib inline\n", 27 | "import matplotlib\n", 28 | "import matplotlib.pyplot as plt\n", 29 | "import magic" 30 | ] 31 | }, 32 | { 33 | "cell_type": "markdown", 34 | "metadata": {}, 35 | "source": [ 36 | "## Change these names to the appropriate values:" 37 | ] 38 | }, 39 | { 40 | "cell_type": "markdown", 41 | "metadata": {}, 42 | "source": [ 43 | "List all the prefixes of the different output files you want to plot:" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 2, 49 | "metadata": { 50 | "collapsed": true 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "stats = ['your_prefix1', 'your_prefix2', 'your_prefix3'] \n", 55 | "# Example: ['chr1_pair', 'chr1_tbl', 'chr2_pair', 'itip']" 56 | ] 57 | }, 58 | { 59 | "cell_type": "markdown", 60 | "metadata": {}, 61 | "source": [ 62 | "List just the prefixes that correspond to pairwise coalescence time distributions:" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 3, 68 | "metadata": { 69 | "collapsed": true 70 | }, 71 | "outputs": [], 72 | "source": [ 73 | "pairstats = ['your_prefix1', 'your_prefix2'] \n", 74 | "# Example: ['chr1_pair', 'chr2_pair']\n", 75 | "# Every element of pairstats should also be in stats\n", 76 | "\n", 77 | "# (We separate out the pairwise ones because they're the only ones where \n", 78 | "# talking about \"N_e(t)\" even begins to make sense.)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "markdown", 83 | "metadata": {}, 84 | "source": [ 85 | "## Unscale times and \"N_e\"" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": {}, 91 | "source": [ 92 | "MAGIC scales all times by the per-base mutation rate. To change to clock time, you need to know the mutation rate per generation and the generation time. Enter them here:" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": null, 98 | "metadata": { 99 | "collapsed": true 100 | }, 101 | "outputs": [], 102 | "source": [ 103 | "# These are set to default values that convert human data to years.\n", 104 | "mu = 1.25e-8 # mutation rate\n", 105 | "gen = 30 # generation time" 106 | ] 107 | }, 108 | { 109 | "cell_type": "markdown", 110 | "metadata": {}, 111 | "source": [ 112 | "These are the corresponding conversion factors:" 113 | ] 114 | }, 115 | { 116 | "cell_type": "code", 117 | "execution_count": null, 118 | "metadata": { 119 | "collapsed": true 120 | }, 121 | "outputs": [], 122 | "source": [ 123 | "tfactor = mu/gen\n", 124 | "# For the pairwise distributions, there is an additional factor of 2 to convert from total branch length to TMRCA:\n", 125 | "tmrcafactor = 2*tfactor\n", 126 | "nfactor = 4*mu" 127 | ] 128 | }, 129 | { 130 | "cell_type": "markdown", 131 | "metadata": { 132 | "collapsed": true 133 | }, 134 | "source": [ 135 | "## Import data" 136 | ] 137 | }, 138 | { 139 | "cell_type": "code", 140 | "execution_count": 4, 141 | "metadata": { 142 | "collapsed": true 143 | }, 144 | "outputs": [], 145 | "source": [ 146 | "MAGIC = {stat: {} for stat in stats}\n", 147 | "\n", 148 | "for stat in stats:\n", 149 | " with open(stat + '_final.txt', 'r') as infile:\n", 150 | " # If you generated your *_final.txt files using magic.py's (default) '--family pieceexp':\n", 151 | " MAGIC[stat]['T'] = magic.PiecewiseExponential(*np.transpose([[float(x) for x in line.split()] for line in infile]))\n", 152 | " # If you used the '--family gammamix' option:\n", 153 | " # MAGIC[stat]['T'] = magic.GammaMix([float(x) for line in infile for x in line.split()])\n", 154 | " with open(stat + '_LT.txt'.format(stat), 'r') as infile:\n", 155 | " MAGIC[stat]['LT'] = np.array([[float(x) for x in line.split()] for line in infile])" 156 | ] 157 | }, 158 | { 159 | "cell_type": "markdown", 160 | "metadata": {}, 161 | "source": [ 162 | "# Plots" 163 | ] 164 | }, 165 | { 166 | "cell_type": "markdown", 167 | "metadata": {}, 168 | "source": [ 169 | "### Style settings" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 5, 175 | "metadata": { 176 | "collapsed": true 177 | }, 178 | "outputs": [], 179 | "source": [ 180 | "plt.style.use('seaborn-talk')\n", 181 | "matplotlib.rcParams['axes.labelsize'] = 20\n", 182 | "matplotlib.rcParams['axes.titlesize'] = 24\n", 183 | "matplotlib.rcParams['xtick.labelsize'] = 20\n", 184 | "matplotlib.rcParams['xtick.major.size'] = 10\n", 185 | "matplotlib.rcParams['xtick.minor.size'] = 5\n", 186 | "matplotlib.rcParams['ytick.labelsize'] = 20\n", 187 | "matplotlib.rcParams['ytick.major.size'] = 10\n", 188 | "tableau20 = np.array([(31, 119, 180), (174, 199, 232), (255, 127, 14), (255, 187, 120), \n", 189 | " (44, 160, 44), (152, 223, 138), (214, 39, 40), (255, 152, 150), \n", 190 | " (148, 103, 189), (197, 176, 213), (140, 86, 75), (196, 156, 148), \n", 191 | " (227, 119, 194), (247, 182, 210), (127, 127, 127), (199, 199, 199), \n", 192 | " (188, 189, 34), (219, 219, 141), (23, 190, 207), (158, 218, 229)])/255\n", 193 | "\n", 194 | "statcolors = {stat: tableau20[i*20//len(stats)] for i, stat in enumerate(stats)}" 195 | ] 196 | }, 197 | { 198 | "cell_type": "markdown", 199 | "metadata": {}, 200 | "source": [ 201 | "## Cumulative distributions" 202 | ] 203 | }, 204 | { 205 | "cell_type": "code", 206 | "execution_count": 14, 207 | "metadata": {}, 208 | "outputs": [ 209 | { 210 | "data": { 211 | "text/plain": [ 212 | "" 213 | ] 214 | }, 215 | "execution_count": 14, 216 | "metadata": {}, 217 | "output_type": "execute_result" 218 | }, 219 | { 220 | "data": { 221 | "image/png": "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\nQmCC\n", 222 | "text/plain": [ 223 | "" 224 | ] 225 | }, 226 | "metadata": {}, 227 | "output_type": "display_data" 228 | } 229 | ], 230 | "source": [ 231 | "tvals = np.logspace(-6, -1.5, 200)\n", 232 | "\n", 233 | "for stat in stats:\n", 234 | " plt.plot(tvals, MAGIC[stat]['T'].cdf(tvals), c=statcolors[stat], label=stat)\n", 235 | "\n", 236 | "plt.xscale('log')\n", 237 | "plt.ylim(0,1)\n", 238 | "plt.xlim(1e-6,1.2e-2)\n", 239 | "plt.legend(bbox_to_anchor=(.2, .99))\n", 240 | "plt.xlabel('Scaled time, $\\mu t$')\n", 241 | "plt.ylabel('Probability tree length is less than t, $P(T" 267 | ] 268 | }, 269 | "execution_count": 18, 270 | "metadata": {}, 271 | "output_type": "execute_result" 272 | }, 273 | { 274 | "data": { 275 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqUAAAIOCAYAAACBA3QfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl8VNX5x/HPk42QAAGCoICggID7hhtW4y7aWrVKf9ZW\nrVWrUq3W1qWtdWvtXq21itS2LnWraN3auou4ooJi3QBZBEQECXv2TJ7fH/cGY5hJMslk7mTyfb9e\n8xrnnjN3nslt6JNzz3mOuTsiIiIiIlHKiToAERERERElpSIiIiISOSWlIiIiIhI5JaUiIiIiEjkl\npSIiIiISOSWlIiIiIhI5JaUikjZm9ryZNUQdR1diZsPNrMHM/p6Gzzo9/Kxxnf1ZmcLMHjGz+WaW\nF3UsIt2dklIRSVqYuCTzODV8qwNKSjOQmRUD1wKPuPvMqONJoyuAbYHvRx2ISHenvwxFpD2uinPs\nB0Af4AZgbbO22eHzKUBR54UlHXABMAj4ddSBpJO7v21mTwA/NbOb3b066phEuivTjk4ikgpmtggY\nBmzr7kuijidbmNlwYBFwu7t/p5M+Iyf8jEp3374zPiOTmdnXgfuAM92906dJiEh8un0vImkTb06p\nmZWFt/ivMLM9zewJM1trZqvN7AEzGxr2G2Fm95nZSjOrNLPnzGyXBJ/T08x+bGZvmdlGM9tgZq+Y\n2UlJxruzmd1rZovMrDr87Flmdr2Z5Tbrm2Nm55jZS2H8lWb2oZndamYjm/TbKvyuL5nZcjOrMbNl\nZna3mSWVEKbqewKHA1sD/2x2/r6N36OFGB4Lr98ezY7vE16/xu+4xMxuMbOt4pxjDzO7wcxmm1m5\nmVWZ2Twz+72Z9Y3T/7TGaSFmNsHMpoU/81iTPgeEsS0Nr91yM3vVzK6I8zUeAaqBM1r9SYlIp1FS\nKiLp5OEjnr2BFwnmnP4FeA34GvC0mY0JXw8G7gD+DZQBT5nZF6YDmFkJ8DLwC6Ae+BtwOzAAuMfM\nrmlLoGa2c/iZxwCvAn8gSNpWAucCPZr0zQeeAG4GhgJ3E0xjmAkcB+zf5NQHApcAa4AHgOvC858A\nvB5+blviS8n3DB1GcF1ebnrQ3dcC9wIjzOzQODEMBSYAb7j7m02Ofwd4CTgSeA64HniDIOmb2fiH\nRhNnAV8H5gB/J/g5fgJcBLwUzndtzoGJwGPAemAywWgnZjYBmAaMB54Bfg88RJB4nrvZidxrgFnA\nXmbWO94PSETSwN310EMPPTr8ILj9GwOGtdBnGhBrdqyMIBGNASc1a/tr2FYOXNas7fLwPec3O357\nePyHzY4XAI8TJHC7tOH7/D48z1fitJU0e/3LMM6HgPxmbflAaZPXA4DiOOfcGdgA/KfZ8eHhuf/e\nGd8zfM+r4bn6xWnbM/z8++O0XRW+7ztNjm0H1ABzgS2b9T84jOvBZse3JpxO1uz46eFnX9zs+Gnh\n8Xrg8DjvezCMa6c4bf0T/AyuC98zIYrfHz300MM1UioiGeNFd7+v2bE7wue1wG+atd0JGLBb4wEz\n6w98E5jp7n9o2tnda4FLCe4QnZxEXJstfHH3dU0+M4dg9K0SONfd65r1rXP38iavV7l7RZxzvkMw\nqnhw86kBzXXC9xwG1Ln7mjhxzSIY8T3WzAY2iSEH+A5BIt30uk0iWER7obt/2uxc04BHgWOajn66\n+1J3jzeCfjvBKOiRCeJ+2N2fjnO88Vzxrt3qBOdqjHVYgnYR6WRafS8imWJWnGOfhM+z4yQty8Ln\npreC9wJyATezK+OcryB8bsvczX8SrEh/xMweILgN/LK7L2zWbyxQAsxonoQlYmZfBs4hGIUcwBf/\nLfbw2IoWTpHK7wlQSjCdIJGbCW6rf4fPV+d/meBnf5O7Vzbpu2/4fJCZ7R3nXAPD2EcDbwFYUCP0\nHOD/gB0Ifp5NB02GJIjrjQTH7waOJ5gO8U+CEfqX3X1Zgv4Aqwn+yBnQQh8R6URKSkUkU6yLc6w+\nUZu7x8wMgtvjjUrD573CRzwOxJuj2Pz8b5jZl4CfEsz3/BZgZjYXuLrJqG7jQpyWEp5NzOwCgjmW\nq4GngSUEo6xOkEjtQpP5qgmk7HuGqoDCFtrvI5hTexafJ6XfDT/jLwli+1EL53OgV5PX9xPMvV0A\nPEwwalkTtv2AxD+PuH8EuPtDZvYV4IcEUwC+S3DtZgE/dvdn4rytZ/hc1ULcItKJlJSKSDZpTF6v\nd/eWkqI2cffXgK+GC5n2JFjUcz5wt5mtdPfn+Lwma6LRvE3C2/JXAsuB3d19ZbP28W0MLaXfk2Dx\n1igzy3X3WPNGd682s9uBC83sCOB9gp/FjHDaQbzY+sSbptCcme1JkJA+BRzt7g1N2oxgKkI8LS2a\nw90fBx43s57APsBXCKYWPGZmu7v7nGZvKQ3PtxIRiYTmlIpINnmdYAHMAak8aTgvdIa7X0VwS9+A\nY8PmOQSJ6S5mtmUrpxpAMLL6SpyEtBjYI+67Npfq7/m/8HlMC30mh89nE6yizwGmxOk3I3w+sI2f\nPSp8fqxpQhrah89HMNvF3avc/fkwef8lwdSGo+J0HRs+z47TJiJpoKRURLKGu39GMJ9wnJldHi7G\n+QIL6p1u09q5zGw/M4t3S7sx8awMP7OBYM5lEXCLmRU07Wxm+WbWOE9xZfi+PZsu9AnnVP6JNs5n\nTOX3DD1PkGjvm6iDu88HniUokXUOQSL+zzhd/0ww7eJ6M9suTlz54bSIRh+Fzwc16zcwPFfSwhql\n8RaLfeHaNbMvsMrd32vPZ4pIx+n2vYhkm/MIRt+uBk4xs5cIFg0NJlj4Mw74Bp8nQ4lcAhxiZi8S\nlLvaCOxIMMpWzhfnUl5NUGf1GGCemf2bYFX6MILC9D8C7nR3N7M/EdySfsfMHiEYuTsY6EewIOeg\nNH9PCIrH/5FglXtLOxrdTFDTdCDwJw/qe36Bu88N65T+DXjPgi085xHM/R1GMLq7kmBBEwSLlV4G\nvmZmLxPUNx1E8HOew+eL3ZqzFuL8EzAkPN9HQC3B9ItDCK7lF6o8mNnoMLZbWjiniHQyJaUikkpt\n2bc4Xp+W5gcm1ebuG8ysjGBxy8kEBfgLCRK2D4ELCRYYteYmgsVI+xAUv88DPiYYvbvO3Zc2+cy6\nsGD7OcCp4cMIEqoHCRKtRpcTJGVnhjGuI5hP+TPgmgTftTO/J+7+sZk9RlCqqaRpyatmHgVWEcy/\nbL7Aqen57jaz2QQLjQ4mSMwrCH4eU2kywuruDWZ2DMEmAEcTzNldFp7/WuCD5t+98a0tfKVrCRaN\njQMOJZjqsCT8jBvifL9vh+ebjIhExuKXhhMRke7EzPYjGLH8gbvfkKDPtsB8gpqyB6UxvE4TTrdY\nCLzn7onqoYpIGmhOqYiI4O6vEoxiXppgLi3AxeFzu+Z6ZqhJBNMFfhh1ICLdnUZKRUQEADPbmqCu\n51R3/6DJsW8SbB/6bYKNDPaMLMgUM7OzgSp3vzPqWES6OyWlIiKSUDhvdRrBnNAXgUnu/lGkQYlI\nVlJSKiIiIiKR05zSNDKzXmb2RzP7yMwqzewlMxsXdVzSPmaWY2Y/N7OFZlYVPv88Xs1IyXxmtsjM\nGuI8Hos6NmkfM9vSzG43s5Xh7+i7ZpbSjRUkPczsyji/m4nKhUkXpZJQ6fU3YCfgFIKSJ6cAz5jZ\n9u6+PNLIpD0uA84lKP/zLsGe5XcA1QQlaaRrGQc0Lbg+GJhF/ALxkuHMrISgmsALBDVPVwEj0Dai\nXdkcoIzPa9RutiWudG1KStMkXM36NeB4d38xPHx1WJ/vXOCKyIKT9tqPYGvE/4avl4SjavtEGJO0\nk7uXN31tZmcR1BCdGk1E0kGXAp+4++lNji2OKhhJifpwNzPJUrrNmD55BKMwzXdAqQK+tHl36QJe\nAg42szEAZrYDwY4x/4k0KkmV7wD/iLdrkXQJxwKvmdl9ZrbCzN4ys+9FHZR0yAgzWxZOlbo3rJsr\nWURJaZq4+0bgVeByMxsczkf8FsFo21bRRift4e6/Ae4C3jezWuAd4HZ3nxJtZNJRZnYEsA1wa8Sh\nSPuNIKhBugA4gmAb1V+b2aRIo5L2mkFQkuxIgt3QtgReMbN+UQYlqaWkNGRmJ5jZn8zsBTNbF06i\nbrFunZkNMbO/h3+5VYcLJa43s74J3vItgu3uPiaYd3gecE94TFIoHdfTzE4imBd8ErA7wdzS75nZ\n6fH6S/ul6fezqbOAN9z93dR8A2kqTdczB5jl7j9197fd/Q7gT4BGS1MsHdfT3Z909wfc/V13fw74\nMsE1Pq0TvpJERHNKP3c5wUKVjQRJ49iWOpvZCIKRzwHAw8BcYG/gAuBIM9vf3dc0fY+7LyK43dsT\n6OPuK8zsPoIt7iS1Ov16Ar8FfuvujXMO3zOzbYAfA7el5mtIKB3Xs/G9WwBfJZjrLZ0jHddzOfBB\ns2MfAN/vcPTSXNp+Pxu5e6WZvUewqYNkCY2Ufu5CYLS7lxDc8rFW+k8m+IU6391PcPefuPthwPUE\nv5AJV1+7e1WYkPYjuBXxcEq+gTSVjutZxOaj3A3o96ozpO33k2BHo2rgvo6HLQmk43q+DIxpdmwM\nWuzUGdL5+wlsWjw8luCPD8kW7q5HswdByYkG4M4E7SPC9gVx2noBG8JHz2ZtRwATCOaqHQ68RfAP\nZ27U3zmbH514PW8DlgBHA8OB4wnKzfw26u+czY/Oup5N+swFbon6e3aXRyf+fo4jWFj6E2AkMBFY\nC5wT9XfO5kcnXs/fAQeG//+5D/Dv8HpuHfV31iN1D43otM/B4fNTzRs8WND0MsEo2r7NmkuAPxPc\nQrqdoH7eBHdXrbVotfd6ngc8ANwEvE/wj+YUgltZEp32Xk/M7CBgFFrglEnadT3dfSZwHPB1gkWI\nPwd+6u63dGq00pr2/n4OJViDMYfg390qYF93X9p5oUq6KSltnzGAA/MStH8YPo9uetDdp7r7KHfv\n6e5D3P0Cd9/QmYFKm7T3ela4+0Xuvq27F4fX9mfuXtuZwUqr2nU9Adz9eXfPdfdZnRWcJK0j1/Nx\nd9/N3Yvcfay739RZQUqbtfff22+4+1B3L3T3rd19orvP6cxAJf2UlLZPSfi8LkF74/G2rPKV6Ol6\nZhddz+yi65lddD0lISWlIiIiIhI5JaXt0/iXXEmC9sbja9MQi3Scrmd20fXMLrqe2UXXUxJSUto+\ncwlKXmw2hynUWDct0ZwZySy6ntlF1zO76HpmF11PSUhJaftMC5+PaN5gZr2A/YFKgm3RJPPpemYX\nXc/souuZXXQ9JSElpe3g7gsJyllsY2bnNWu+BigmqNFWlfbgJGm6ntlF1zO76HpmF11PaYl5UJS2\n2zOzYwlq2gFsSbDT0kLgxfDYKne/uEn/EQT11AYCjxLUHt0XOIigjlqr26RJ59H1zC66ntlF1zO7\n6HpKqigpDZnZlcAVLXT5yN1HNnvPEIK/7CYApQTbnf0LuMbdE5W7kDTQ9cwuup7ZRdczu+h6Sqoo\nKRURERGRyGlOqYiIiIhETkmpiIiIiEROSamIiIiIRE5JqYiIiIhELiOSUjM7wcz+ZGYvmNk6M2sw\nszvbea4hZvZ3M1tmZtVmtsjMrjezvqmOW0RERERSIy/qAEKXA7sAG4GPgbHtOUlY++xVYADwMMF2\nZnsDFwBHmplqn4mIiIhkoIwYKQUuBEa7ewkwiWBf3PaYTJCQnu/uJ7j7T9z9MOB6gkT32pREKyIi\nIiIplXF1Ss2sjGBv3Lvc/dQk3jcCmA8silOktxdBYV6Agdq+TERERCSzZMpIaSocHD4/1bzB3TcS\nbGlWRLCVmYiIiIhkkGxKSscADsxL0P5h+Dw6PeGIiIiISFtlU1JaEj4n2jO38bhW4YuIiIhkmExZ\nfZ+xzKwUKG1D13J3L+/seERERERSJZPynGxKShtHQksStDceX5vkeVe1taNZe4sGiIiIiGS8Tk10\nsikpnUvww0o0Z3S78DnRnNOEDrviHhocGtxpaAieY+40uFO5ajnv/O1Sdj73zxQNHUvMnViDUx9r\nYPEDv2bL4y6hwZ26WFDl4LNHf8cWX7047ue01NaW9rb2aU/fRnk5Rs/8XD55+Dfs9K2fUVSQR3FB\nLsU98ijukUtxQR7FPfIoajy2qS2PXj3y6F2YR5+e+cFzYT6F+bkAnHzyyUz+6x1MnPIK81Zs3Oxz\nRw/qxdSzx1NSlN9qjOsq67h5+nwemPkx5RW1lBYXcOK4oUwqG9Xq++fNm8eYMWOYO3cuo0d/8X9K\nJ598Mvfcc89m70n2eFvb29qnPX1T+d50nK+9uvL1bE//jr4vXedrL13P1MmEa6rrmTodOWd5eTnl\n5a0PgI4ZM6Zd509GNiWl08LnI5o3hCWh9gcqgRnJnvjpq7+RsG3evHmM+dulPHDh4Zv/Us27g3t+\ncdSm1w0NzsmL7+K2ayZQ39BAfcypb/BN//29D+/gDz84kLpYcKwuFiS39Q1OXayBa97pzyXf2oOa\n+qCtLtZAXayB2vB1bX0Dt7/Wi68fOILa8HhtfQM19Q3U1MeoafZ6ZmEew0uLqKkLXlfXNVBdH6Ol\nKmH1Dc6Gmnqq6xpYXF6Z7I9yMwW5OfTpmcfSD1Zw2PXT+WxDTfyf84qNXPHou5x/yHb0K8qnb1EB\nuTmb/8G2rrJus8S2vKKWKdMXMm3OyjYnts1V18WSfo+IiEimKy0tpbS0LXfvO1+XS0rNLA8YCdS5\n+8LG4+6+0MyeAg43s/Pc/c9N3nYNUAxMjrJGaU6OkWNGz4JcIHez9l498thuUO+E7/9LSSETdtqq\nxc947e99+PHR27cpnpNfHcg9Fx/8hWPuTk19A9V1MarqgkS1qrbxv2NU1caoro/x69l9OeurO1JZ\nG6Oipp6K2noqa2JsrK2nsqaeivB4ZW2MjTX1m/67udpYA6s21rKxJpYwIW30yOxPeGT2JwCYQZ/C\nfPoXF9C3KJ/+RQUM6NWDeSs3xB1phSCxnTx9AZcd1bYNw5qPuK5/91N+9fgHbRpxFRERkeRkRFJq\nZscCx4Uvtwyfx5vZbeF/r3L3xvvMQ4APgI+AEc1ONYmgHukNZnZo2G9f4CBgDsF2ptICM6MwP5fC\n/NwWyxTc07+I08Zvk9S5Yw3Oxup61lfXsb66jg3V9ayvqmN9dT2/ndmHlUmcyx3WVdWxrqouqRj+\n+uJClq2tYmDvHgzu25MhfQsZ0reIwX0L6V9csKnfhqo6zms24lpT39DhEVcRERGJLyOSUmA3oOnu\nTQ5sGz4gSEAvbta+2U3mcLR0HMHI6ATgKIKdnK4HrnH3ROWiOsUJJ5zQpmNtaWtLe1v7tKdvKt6b\nm2OUFOXHTebs3NO49v0CVlfUJnx//6J8HjnvS6yprGV1RS1rK+vC51rKK2pZub6Gpz9Y0WIM9Q3O\nY29/EretZ34ufes+A+DC+2ezNPbFtLxozHhg8xHXRD+L5ser62Kb5tC29L6WzpGqvql8bzrO1xna\net1aO97W9rb26Uj/jr4vXefrDLqe0Z8zlXQ9oz9nFDJum9FMY2be0s+opYnakpxfPf4BU6YvTNh+\nTtnIVm+97/Hzp1tMbAvzczhqp61Ysb6aT9ZW8cnaampjDZva61Yv45Nbz2bwWVPI7z+kxfNcc+xO\njNyimG0H9KJfUX7c6gsdWXQlHaffz+yi65lddD27FjPD3bX6XrqHSWWjmDZnZcLV9+eWjWz1HBPH\nDW0xsf32+G2/kNg2NDirKmpYtiZIUN98pwdX3Np6rNV1DVzywP82vS7pmc+2A4oZMaCYEVsUM3KL\nXgztV8RF97/FhysrNvVLxaIrERGRbKSkVDJGSVE+U88ez+TpC5g6c+mmkcWJ47bm3LKRbUrgkk1s\nc3KMgb0LGdi7kN2HwXaFG7iCIMlsqbZAXo5R3CNv05zWdVV1zF66ltlL21YGN9lFV001nwYgIiKS\nDZSUSkYpKcrnsqPGctlRY9uVfKUisQU4aqcteXBBQ8L2Mw8YwWVHjWVNRS0LV1Ww8LONLFpVwaJV\nFSz8LHhuOi0gnr+/tIjehXnsMLgPOw8pYUCvHgn7ahqAiIhkOyWlHVRaWsqVV16ZMTW+skl7RwM7\nktg2Xs/TJuzOOw/MbXXEtV9xAXsWF7Dn8H5f6LOhuo6dr3qqxc+qjTXwuyfnbno9vLSIPYf3Y9zw\n/ozbph+jtuhFTo51Wu3V7kC/n9lF1zO76HpKc1ro1IrWFjpJ9lpXWdehEdfWFl0V5OYwtF9PFpVX\nxN2woKRnPnsM68vGmnre+GhNwvO0ZQGYiIhIR6RjoZOS0lYoKRVo3zzOtlYTqKip538fr2PW4tXM\nXLyGWYvXsKG6vs2fU1pcwKyfHZ5UbCIiIslQUpoBlJRKe8W77d5o9KBeCW+7NzQ4H67cyMzFq3l9\n0epNu1i15NHz9mfnISVxy1KJiIh0lJLSDKCkVDqio1MAoPVpAI22KimkbPQWHDRmC8aPGkCfwsTn\n1wp+ERFJhpLSDKCkVFKlvYlga9MAeubnUlUX+8KxvBxjj+H9NiWpO2zVh/VV9VrBLyIi7aKkNAMo\nKZWotTYN4J/f3Y9la6uYPu8znp+7kjeXrCXW8MX/zQ7uW0hVbYw1lXVxz6EV/CIi0hIlpRlASalk\ngmSmAayrquPl+at4fu5Kps/7jBXra1o9v1bwi4hIS5SUZgAlpZJpkpkG4O6898l6TrzlFarrEhfz\n79szn9lXHpGqEEVEJMukIynN6cyTi0jqJTMv1cwYNbBXiwkpwNqqOibe8gp3v7aYNW1YVCUiIpJq\nGilthUZKJRu0dQU/BIukjtxxS07dbzh7b9u/xTJTWsUvItI96PZ9BlBSKtmgtRX8R+44iLycHJ75\nYAU19Z+Pqo7dsjenjd+GY3cbTFFBsCvxuso6reIXEelmlJRmACWlkg3aWsh/Y009//nfJ9zxymLe\nX75+U58+hXl8fdzWHLfbEC6aOjvpDQFERKRrU1KaAZSUSrZIZgW/uzNr8RrueHUxj7+znPqGtv0O\naBW/iEh2UlKaAZSUSjZKZi7oyvXV3P3aEu55fQmfbWi5vFRpcQGzfnZ4KkIUEZEMoqQ0AygpFQms\nr6pjl6ufarXfnJ9P0OInEZEso5JQIpIx+vTMp39xQYt9eubnUNNK+SkREZF4lJSKSJtNHDe0xfaq\nuga+9NvnuOGZD1lfvfmWpiIiIono9n0rdPte5HMtreLvV5RPVV1sU6H+kp75fPfAEXx7/DYU98hL\nd6giIpJCmlOaAZSUinxRS6v46xoauOX5BfxjxuJN9U77FxdwTtkITtl3G3oWbD7XVAX4RUQyn5LS\nDKCkVCSxRAnlivXV3DxtPve+vpTaWJCcbtG7B5MOGsk39h5GTV2DCvCLiHQhSkozgJJSkfb7ZG0V\nf542n/vfWLqp1unA3j3IzYHl6zYvL6UC/CIimUlJaQZQUirScUtXV3Ljcx/y4JvLiLVSiF8F+EVE\nMo+S0gygpFQkdRZ+tpEj//gCdbHEv1MqwC8iknlUp1REssrgvj1bTEgByitqqa6LpSkiERHJFEpK\nRSRtCvNzWy3A37dnvlbji4h0Q0pKRSStWivAv7GmnsnPL6C2XjtDiYh0J5pT2grNKRVJrZYK8Oca\nNN7dHzWwFz8/dif2G1ma5ghFRKQ5LXTKAEpKRVIvUQH+k/cexi0vLODe15fQ+Gv3td2HcOVXd6Sk\np8pEiYhERUlpBlBSKtK54hXgf2vJGi5/+F3e+2Q9AEP69uSPJ+3GXtv0jyJEEZFuT0lpBlBSKhKN\nWINz28uL+O0Tc6mNNZBjcP4h23H+IaPIy9V0eBGRdFJSmgGUlIpE6/1P1vP9+95i/spgDuq44f34\n40m7MbRf0Rf6JdryVEREOk5JaQZQUioSvaraGL/4z/vc/doSAHoX5vGrr+3MAaO24Obp83lg5seb\n5qaeOG4ok8pGaatSEZEUUlKaAZSUimSOJ9/7lEsf/B9rK+sA6FOYx/rq+s36jR7Ui6lnj1diKiKS\nItrRSUSkiSN33JLHLziAfUcEC57iJaQA81ZsZPL0BekMTUREOkhJqYh0KVuV9OTuM/elZyvzR6fO\nXJqmiEREJBWUlIpIl1MXa6CqLtZin/KKWqpb6SMiIplDSamIdDmF+bn0Ly5osU9pcYFW44uIdCFK\nSkWkS5o4bmiL7bsN65umSEREJBWUlIpIlzSpbBSjB/VK2P7sByu57ul5NDSoeoaISFegklCtUEko\nkcy1rrKOydMXMHXm0k11Sr+yy2De/ngts5euBeDLu2zFHybuqlv5IiIdoDqlGUBJqUjX0HRHp5r6\nGD/+1zv8681lAOw6tIRbTx3HwD6FUYYoItJlKSnNAEpKRbomd2fy9AX89om5AGxVUshfTxvHjoNL\nIo5MRKTrUVKaAZSUinRtT7y7nB/8822q6mIUFeTyx//bjSN23DLqsEREuhQlpRlASalI1/fusnWc\ncccbrFhfgxlcOmEsZx84ArNO/fdVRCRrKCnNAEpKRbLDivXVnHnHTN5Ztg6AE/ccyi+P35mCPBUh\nERFpjZLSDKCkVCR7VNXG+OHU2fz3nU8B2Hub/txyyp6bCvE3XSwlIiKfU1KaAZSUimSXhgbn+mfm\nceNz8wEY1r+IA0YP4Il3Pt1UVurEcUOZVDaKkqL8iKMVEckMSkozgJJSkez00Fsfc/HU/1GfoLj+\n6EG9mHr2eCWmIiKkJynVZCoR6ZaO330oh+8wKGH7vBUbmTx9QRojEhHp3pSUiki39dqi1S22T525\nNE2RiIiIklIR6Zaq62KsrqhtsU95RS3VdbE0RSQi0r0pKRWRbqkwP3fTqvtESosLtBpfRCRNlJSK\nSLc1cdzQFtsP2G6LNEUiIiJKSkWk25pUNorRg3olbH/yvU+ZsbA8jRGJiHRfSkpFpNsqKcpn6tnj\nOadsJKXhrfzS4gL+b6+t2aJ3D6rqYnz7ttd58cPPIo5URCT7qU5pK1SnVKT7aLqj0+LyCk6+9TWW\nra2iIC+Hyd/cg0O3T1xCSkQkm6l4fgZQUirSfX28ppJv/vU1FpdXkp9r3PiN3Zmw01ZRhyUiknYq\nni8iEqGja0I2AAAgAElEQVSh/Yr453f3Y+QWxdTFnO/d8xb//t8nUYclIpKVlJSKiLRgy5JC7vvu\nfozdsjexBufC+2YzfZ7mmIqIpJqSUhGRVmzRuwf3nLUvI7copr7BOfeuWcxeujbqsEREsoqSUhGR\nNuhfXMCdZ+zDViWFVNbGOP2215m/cmPUYYmIZI2MSkrNbIiZ/d3MlplZtZktMrPrzaxvkuf5spk9\nZWZLzazSzBaY2f1mtm9nxS4i2W9I357c+Z29KemZz5rKOk7922ssX1cVdVgiIlkhY1bfm9kI4FVg\nAPAwMBfYGzgEmAPs7+5r2nCe3wAXA6vC86wCRgFfBfKBU9z9niTi0up7EfmCWYvX8M2/zqC6roHt\nBvZi6jn70beo5S1LRUS6sm5VEsrMngQOA85395ubHP8D8APgFnef1Mo5BgHLgJXAzu5e3qStDJgG\nLHT3UUnEpaRURDYzbc5KzrxzJrEGZ49hfbn7zH3pWRDUOG1a71REJBt0m6Q0HCWdDyxy95HN2noB\ny8OXA9094b0yM9sbmAE84u7Hx2lfB+DuJUnEpqRUROL615sfc9H9bwNwwKgBjNmqNw+9uYzyilpK\niws4cdxQJpWNoqQoP+JIRUQ6pjvVKT04fH6qeYO7bwReBoqA1uaEfgjUAnubWWnTBjM7EOgNPN3h\naEVEgK/tMZSfHr09AC/OX8VfX1xEeUUtAOUVtUyZvpCJU15hXWVdlGGKiHQJmZKUjgEcmJeg/cPw\neXRLJwnnnF4CDALeN7MpZvZLM7sfeDJ8nJOakEVE4KwDR7Dr1olvvsxbsZHJ0xekMSIRka4pU5LS\nxn/R1yVobzze6ip8d/8TcAKQB5wJXBq+XgLc4e6rOhaqiMgXLSmvbLF96sylaYpERKTryos6gFQz\ns0uAa4E/AjcBnwJjgV8D95jZbu5+WTLnnDcv0QDu50pLSyktLW21n4hkl+q6GGtauT1fXlGrxU8i\nkpHKy8spLy9vvWMaZEpS2jgSmugeWOPxFrdQCVfY/xp40N0vbtI028yOJ5ge8EMzu8XdP2prcGPG\njGm1z5VXXslVV13V1lOKSJYozM+lf3EBq8O5pPGUFhcoIRWRjHTjjTdy9dVXRx0GkDlJ6VzASDxn\ndLvwubUhy68QzE19vnmDu1eZ2evAccDuwEdtDm7u3Fb7aJRUpPuaOG4oU6YvbKF96zRGIyLSduef\nfz4nn3xyq/3aMkDXUZmSlE4Ln49o3hCWhNofqCQo99SSHuHzFgnaG48nHtKIY/ToFtdXiUg3N6ls\nFNPmrGTeis23Hc3NMY7fbUgEUYmItC6Tph9mxEInd19IUA5qGzM7r1nzNUAxcGdjjVIzyzOzMWF9\n06ZeJBhx/a6ZDW7aYGZHESS31cArnfA1RKSbKinKZ+rZ4zmnbCSlxcHOTiU988nPNWINzg8fmE1V\nbSziKEVEMltGFM+HTQX0XwYGAo8CHxDUJT2IZtuMmtlwYBHwkbuPaHIOA54g2BlqI/AQwUKnHYAv\nh90ucPc/JxGXiueLSFIaFzU98/4KzvrHTNzhmF0H86eTdiP4Z0pEpGvpNjs6NTKzIQQjoxOAUoKd\nnP4FXOPu65r0Gw4sJEhKm+8AlQt8DziJIBktAlYDrwF/cvdnk4xJSamItNtN0+bzuyeDeemXTBjD\npIPavMuxiEjG6HZJaSZSUioiHeHunH/vW/z7f8sxg7+dNo5Dxg6KOiwRkaR0p21GRUSykpnxuxN3\nZcfBfXCHC+6dzfyVG6IOS0Qk4ygpFRHpZD0LcvnLqeMY0KuADTX1nHXnLNa1UnBfRKS7UVIqIpIG\nQ/r2ZPK39iQ/11i0qoLz73uLWIOmBomINFJSKiKSJntt059rjt0JgBfmfcZvnpgTcUQiIplDSamI\nSBp9Y+9hnLLvcAD+8sJC/vXmxxFHJCKSGZSUioik2RXH7MC+I/oDcNm/3mH20rURRyQiEj0lpSIi\naZafm8PN39yTof16UlvfwNn/mMnK9dVRhyUiEiklpSIiEehfXMCtp46jqCCXFetrOPuuWVTXaStS\nEem+lJSKiERk+636cN3XdwXgrSVrufzhd2ncrEMJqoh0N9rRqRXa0UlEOtv1T8/jhmc/BOBLo0r5\nYPkGyitqKS0u4MRxQ5lUNoqSovyIoxSR7kzbjGYAJaUi0tkaGpwz7niDaXM/i9s+elAvpp49Xomp\niERG24yKiHQDOTnG8NKihO3zVmxk8vQFaYxIRCT9lJSKiGSAR99e3mL71JlL0xSJiEg0lJSKiESs\nui7G6oraFvuUV9Rq8ZOIZDUlpSIiESvMz6V/cUGLfUqLCyjMz01TRCIi6aekVEQkA0wcN7SV9q3T\nFImISDSUlIqIZIBJZaMYPahX3LaSnnmcWzYyzRGJiKSXklIRkQxQUpTP1LPHc07ZSErDW/k984N/\notdV1fPS/FVRhici0ulUp7QVqlMqIlGorouRn5vDybfO4LVFq+ndI4//fP8AhrVQOkpEpLOoTqmI\nSDdVmJ9Lbo5xw0m707+4gA019Zx/75vU1jdEHZqISKdQUioiksG2LCnkDxN3BeDtj9fxuyfnRByR\niEjnUFIqIpLhDh47kO8eOAKAW19cxHNzVkQckYhI6ikpFRHpAn50xBh23bovAD+8/22Wr6uKOCIR\nkdRSUioi0gUU5OXw52/sTu/CPNZU1nHBvbOpj2l+qYhkj6RX35tZDjAEGArkx+vj7i90PLTMoNX3\nIpJJ/vvOcibd/SYA3z9kFBcdMSbiiESkO0jH6vukklIzuxj4ETCgpX7unjV74SkpFZFMc/nD73DX\njCWYwX1n7cs+I0qjDklEslxGJaVmdhVwBVAOPAYsA+rj9XX3q1MUX+SUlIpIpqmui3HcTS8z59MN\nbN2/J09ccCDFPfKiDktEslimJaVLgRpgT3df15lBZRIlpSKSid7/ZD3H3vQSdTHnm/sM49rjd446\nJBHJYplWPL8UeLQ7JaQiIplqh8F9uODQ7QC4+7UlvDDvs4gjEhHpmGSS0vlAv84KREREknNO2Uh2\nHVoCwKUP/o91VXURRyQi0n7JJKU3A18xsy07KxgREWm7vNwc/vD1XSnIy2H5umqueez9qEMSEWm3\nNiel7n4L8A/gZTM7zcx2NrNh8R6dF66IiDQ1amBvLjkyKAv14Jsf89R7n0YckYhI+yRbEuo04Hqg\npIVu7u5ZswxUC51EJNPFGpxv/GUGr3+0mgG9CnjqB2X0Ly6IOiwRySKZtvr+TGAKQRmol4BPSFwS\n6vRUBRg1JaUi0hUsLq/gqBtepLI2xtE7b8lNJ+9BTX0DhflZUzZaRCKUaUnpHIIR0vHuvqgzg8ok\nSkpFpKu4a8ZiLn/4XQB69chlY02M0uICThw3lElloygpirsJn4hIqzKtJNRw4IHulJCKiHQlX9l5\nK4oKgpHRjTUxAMorapkyfSETp7zCukqtzheRzJVMUrqMBHvdi4hI9Ca/sIDK2ljctnkrNjJ5+oI0\nRyQi0nbJJKV3AkebWe/OCkZERNpv6syPW2lfmqZIRESSl0xS+kvgdeAZMztIyamISOaorouxuqK2\nxT7lFbVU18UfSRURiVoypZtqwmcDnoVg0mscWVUSSkSkKyjMz6V/cUGLiWlpcYFW44tIxkomeXwR\n0DJ0EZEMNXHcUKZMX9hC+9ZpjEZEJDltTkrd/aBOjENERDpoUtkops1ZybwVGzdrM+DonbRLtIhk\nrjbPKTWzA81st84MRkRE2q+kKJ+pZ4/nnLKRlIY7OvUryqeoIBcHrnrsPWINuuElIpkpmeL5MWCK\nu0/q3JAyi4rni0hXVV0XozA/l+fmrOA7t88E4Oqv7shp47eJNjAR6XIyrXj+KqCqswIREZHUalzU\ndMjYQRy/+xAAfvvEHJav0z/lIpJ5kklKnwfGd1IcIiLSiS7/8vb0LcqnojbGlY+8F3U4IiKbSSYp\nvRwYY2Y/NzPt7CQi0oWU9urBT4/eHoCn3l/BE+9+GnFEIiJflMyc0r8Do4D9gRXA28CnbF4myt39\njFQGGSXNKRWRbOHunHzra7y6sJxBfXrwzEVl9C7UGIOItC4dc0qTSUob2nhOd/esqc6spFREssnC\nzzYy4YYXqa1v4NT9hnPNsTtFHZKIdAGZlpQOb+tJ3X1xuyPKMEpKRSTb3Pjsh/zh6XmYwYPnjmeP\nYf2iDklEMlxGJaXdlZJSEck2tfUNfPlPL/Lhyo2MGdSbf3//S+TnJrPEQES6m0wrCSUiIlmgIC+H\nX31tZwDmrtjArS8m3ppURCRdkk5KzWxfM/urmc0yswVm9qaZ3WpmKhclItJFjNumP9/cZxgANzzz\nIYvLKyKOSES6u6Ru35vZL4AfE2yj3JwDv3H3n6Qotoyg2/cikq3WVdVx2HXT+WxDDV8aNYB/nLE3\nZp16d05EuqiMun1vZhOBnwBLgDOBEUDP8PnM8PilZvb1TohTRERSrKRnPld/dUcAXpq/iofeWhZx\nRCLSnSWz+v4FYDtgZ3dfFad9APAuMNfdy1IaZYQ0Uioi2czdOfOOmTw7ZyX9iwt45qIy+hcXRB2W\niGSYjBopBXYFHoiXkAKEx6cCu6UiMBER6XxmxjXH7URRQS6rK2q59j8fRB2SiHRTySSleUBlK30q\nw34iItJFDOnbkx8eMQaAB9/8mFfmxx17EBHpVMkkpQuAr5hZ3PeEx48O+4mISBfy7fHbsMvQEgB+\n8tA7VNfFIo5IRLqbZJLSe4DtgUfMbLumDWY2EngA2CHsJyIiXUhujvHL43cmN8f4qLySPz83P+qQ\nRKSbSWahUwHwFHAg0AB8AiwHtgSGECS4LwGHuXttp0QbAS10EpHu5Nr/vM+tLy4iL8f4z/cPYMyW\nvaMOSUQyQEYtdAoTzcOBnwKLgKHAXsDW4eufAodmU0IqItLd/ODw0Qzp25P6BucnD71DQ4PrVr6I\npEXCkVIz6wNUJ0oyzawXUAKsc/eNnRditDRSKiLdzbS5Kzn9tjcAKC7IpaI2RmlxASeOG8qkslGU\nFOVHHKGIpFvUI6VrgEubBPN3M/tq42t33+juy7I5IRUR6Y722LofxT1yAaioDUZJyytqmTJ9IROn\nvMK6yroowxORLNVSUurN2r+NapCKiGS9m6fPp6Im/i37eSs2Mnm6iqyISOq1lJQuB0alKxAAMxsS\njsguM7NqM1tkZtebWd92nOtQM3vIzJaH51pmZk+Y2YTOiF1EJFtMnflxK+1L0xSJiHQnLRW6fw74\nZrh96PLw2HFmtk0r53R3PyPZQMxsBPAqMAB4GJgL7A1cABxpZvu7+5o2nuu3wI+ApcAjwCpgC2BP\n4CDgiWTjExHpDqrrYqyuaHm9anlFLdV1MQrzc9MUlYh0By0lpZcAgwhW3OcQ3M7fjdZv4TuQdFIK\nTCZISM9395sbD5rZH4AfANcCk1o7iZmdRZCQ3gac7e71zdr1r6iISAKF+bn0Ly5oMTEtLS5QQioi\nKddqnVIzywe2Aj4C/gjc0NpJ3X1xUkEEo6TzgUXuPrJZWy8+H6kd6O5VLZyngGB0tBLYrnlC2h5a\nfS8i3c2vHv+AKdMXJmw/p2wklx01No0RiUjU0rH6vtV96t29DlhiZouBj5JNONvo4PD5qTifv9HM\nXiYYsd0XmNbCeQ4nuE1/HeBm9mVgR6AaeN3dZ6Q0ahGRLDSpbBTT5qxk3orNi6v0L87n3LKRcd4l\nItIxrSaljdx9206MYwzBbf95Cdo/JEg4R9NyUrpXeJ5a4C1gp/A1gJnZC8CJ7r4qFUGLiGSjkqJ8\npp49nsnTFzB15lLKK2opzM+huq6BjdUx1lbVqlapiKRcm3d0MrNcMyuKc/wQM7vBzH5lZu1NXEvC\n53UJ2huPt7YKfyBgwMUEW6HuD/QGdgGeJNgi9f52xigi0m2UFOVz2VFjmfWzw5nz8wm88dPD2KJ3\nD2pjDfz83+9HHZ6IZKE2j5QCvwfONbNB7r4OwMxOAu4mSAQBzjSzPdw9qnohjUl2HXBMkzjeM7Ov\nEazoLzOzfdz9tbaedN68RAO4nystLaW0tDTZeEVEMl5hfi6F+bn85Oix/OCfb/PMByuZNmclB48d\nGHVoItJB5eXllJeXRx0GkFxSeiAwrTEhDV0JrCUo27Ql8CvgIoLV8sloPGdJgvbG42tbOU9j+1vN\nE2N3rzKzJ4HvEJSaanNSOmbMmFb7XHnllVx11VVtPaWISJdz3G5DuHvGEmYuXsPVj73H+FGl9MjT\nKnyRruzGG2/k6quvjjoMILmkdGvglcYX4Yr5McA17n5XeOxAYALJJ6VzCUZbRydo3y58bm3Icm74\nnCh5baxz2rPtocHcuXNb7aNRUhHJdmbG1cfuyDE3vsRH5ZX87aVFTDoorXusiEiKnX/++Zx88smt\n9mvLAF1HJZOU9gHWN3m9P8EioqaF6N/j85X0yWhcvHRE84awJNT+BGWeWls9/2wY0w4J2ncKnxcl\nE9zo0YlyZRGR7mXHwSWcvM8w7pqxhBufnc/xuw9hq5Kk/s4XkQySSdMP27zQiaBWaNOFTIcBVcCs\nJsd6AUnXBnX3hQTloLYxs/OaNV8DFAN3NtYoNbM8MxsTjtY2Pc8S4DFgmJld2LTNzI4AjiQYLdWO\nTiIi7fTDw8fQtyifqroYv/zvnKjDEZEs0Wrx/E0dze4FjgFOIqj7+QjwrLt/tUmffwPbuPtO8c/S\n4vlHAC8TrKB/FPiAoC7pQcAcYNM2o2Y2nGC08yN3H9HsPEPC82xNsFXqW8AI4FiCFfn/5+4PJxGX\niueLiDRz92uL+elD7wJw71n7st/IzBhpEZHOkY7i+cmMlP4y7P8IQXmlAoKtPwEws0LgAJJYQNRU\nOFo6DridYCHSRQQjs9cD+8XZ9975vAZp0/MsI9jj/s/AKOD7BIu0HiFIbNuckIqISHwn7TWMnYb0\nAeDqx96jPtYQcUQi0tW1eaQUwMx2Bk4LX/7T3d9o0rYfcAlwk7s/k9IoI6SRUhGR+GYtXs0Jk18F\n4KpjduDb+3fmHisiEqV0jJQmlZR2R0pKRUQSu+j+2fzrzWX0Lsxj2o8OYkCvHlGHJCKdINNu34uI\niHzBZUeNpVePPDZU1/O7J1ovnycikkjSI6VmNo5gzmc/IF7VZHf3n6cgtoygkVIRkZb99cWF/OI/\nH2AG/zn/AHYY3CfqkEQkxTLq9r2Z9QH+RVCHtKWg3N2zZosPJaUiIi2rrW/giOun81F5JeNHlnL3\nmftg1qn/3yUiaZaOpDSZ4vm/Aw4BXgRuA5bSjpqkIiKSXQrycrjsqO05565ZvLKgnOfmrOTQ7QdF\nHZaIdDHJjJR+CnwM7O3u3ab2h0ZKRURa5+78319m8Pqi1YzcopgnLjyQ/FwtWxDJFpm20KkEmNad\nElIREWkbM+PyL28PwILPKrj39SURRyQiXU0ySemHgO7HiIhIXLsM7cvXdh8CwPVPz2NdVV3EEYlI\nV5JMUnoTcEy4jaeIiMhmfnTkGArzc1hTWcfN0+ZHHY6IdCHJJKWPA08BL5vZ6Wa2i5kNi/fopFhF\nRCTDDe7bk7MOGAHAbS9/xJLyyogjEpGuIpmFTg0Ee80bcfacb8LdPZlV/RlNC51ERJJTUVPPQb9/\nns821PDlnbfipm/uEXVIItJBmVan9HZaTkY3cffTOxBTRlFSKiKSvH++sYRLH3wHgAfP3Y8dB5dQ\nmJ81JaxFup2MSkq7KyWlIiLJizU4R93wAvNWbCQvx6hvcEqLCzhx3FAmlY2ipCg/6hBFJAmZVhJK\nRESkTTZW11NRE+yvUt8Q/GFfXlHLlOkLmTjlFdZVamW+iHyRklIREUm5m6fPZ9na6rht81ZsZPL0\nBWmOSEQyXdILksxsL+BIYAjQI04Xd/czOhqYiIh0XVNnftxK+1IuO2psmqIRka6gzUmpmRlwO/At\nPl+B33RuQdOV+UpKRUS6qeq6GKsralvsU15RS3VdTIufRGSTZG7fnwecAvwDGEeQgP4RGA/8BNgA\n3AeMSHGMIiLShRTm59K/uKDFPqXFBUpIReQLkklKTwPmuvu33f3N8Nhad5/h7r8GDgZOAA5JdZAi\nItK1TBw3tJX2rdMUiYh0FckkpWOB55od23T7393fAv4NTEpBXCIi0oVNKhvF6EG94rYVFeRybtnI\nNEckIpku2dX365r8dwXQv1n7hwTJq4iIdGMlRflMPXs855SNpDS8ld+rR3C7vrI2xuyP10YZnohk\noGR2dJoLzHD308LXbwOV7r5fkz4PAvu7+5adEWwUVDxfRKTjquti9MjL4YTJr/DmkrWMGdSb/15w\nALk5nVqLW0RSJNOK578O7Nnk9ePA3mb2MzPb0cy+BxwLzEhlgCIi0vUV5udiZlz+lR0AmLtiA/fP\nXBpxVCKSSZJJSh8Ecs1s2/D1b4HFwNXA/4AbgbXAZSmNUEREssYew/pxzK6DAbju6XlU1tZHHJGI\nZIo2376P+2azEuAsYCTwEXCnuy9PTWiZQbfvRURSa0l5JYde9zx1MedHR4zmvEO2izokEWlFOm7f\ndygp7Q6UlIqIpN5Vj77H7a98RK8eeUy/+CBKe8XbIFBEMkVGzSk1s5iZ3d2ZwYiISPdw/iGj6NUj\nj4019fx52vyowxGRDJDMnNINwJLOCkRERLqP0l49OPvAYAPAu2YsZkl5ZcQRiUjUkklK3wJ26KxA\nRESkeznjgG3ZoncP6mLOH56eG3U4IhKxZJLS3wBHm9nhnRWMiIh0H0UFeVx4WLDI6ZHZn/DusnWt\nvENEslkyxfNPBSYCRwEPA28AnwKbncDd70xhjJHSQicRkc5TH2vgiOtfYOGqCg7YbgD/OGOfqEMS\nkTgyavW9mTUQJKDNA2p6AgPc3XNTE170lJSKiHSuJ95dzjl3vQnAP87YmwO22yLiiESkuXQkpXlJ\n9D2906IQEZFu68gdt2T3YX15a8lafv34HPYfOYAcbT8q0u2oTmkrNFIqItL5Xl+0mq9PeRWAG07a\njWN3GxJxRCLSVKbVKT3QzIa10mdrMzuw42GJiEh3sve2/Tls+4EA/O7JudTUxyKOSETSLZnV99OA\nb7fS59Swn4iISFIumTCWHIOP11Rx9wyVxRbpbpJJStsyZGvEWY0vIiLSmtGDenPinkMBuPG5D1lf\nXRdxRCKSTskkpW0xnGDnJxERkaT94PDR9MjLYU1lHX+ZvjDqcEQkjVpcfW9mVzQ7dJBZ3AHTXGAY\ncBLwUmpCExGR7markp6cvv+23DJ9AX99aSGn7jecgX0Kow5LRNKgxdX3YW3SRvFqlDa3DDjO3Wel\nILaMoNX3IiLpta6yjgN/N411VXV8Y+9h/OprO0cdkki3F3nxfDMra/xP4DngduCOOF1jQDkw190b\n4rR3WUpKRUTS79YXFnLtfz8gN8d48sIDGTWwV9QhiXRrkSelzYK5DXjI3R/tzIAyjZJSEZH0q66L\ncegfprNsbRVH7jiIKaeMizokkW4to+qUuvvp3S0hFRGRaBTm53LR4aMBePK9FcxavCbiiESks6V6\n9b2IiEhKHLf7EMZu2RuAXz/+Ae5OdZ2K6otkK20z2grdvhcRic60uSs5/bY3AOjdI48NNfWUFhdw\n4rihTCobRUlRfsQRinQPGXX7XkREJN12H9qXnvm5AGyoqQegvKKWKdMXMnHKK6yrVIF9kWyhpFRE\nRDLW5BcWUJXglv28FRuZPH1BmiMSkc6ipFRERDLW1Jkft9K+NE2RiEhnU1IqIiIZqbouxuqK2hb7\nlFfUavGTSJZoV1JqZmPN7HgzOyXVAYmIiEBQFqp/cUGLfUqLCygM55yKSNeWVFJqZruZ2UzgPeAB\ngh2eGtvKzKzSzI5JbYgiItJdTRw3tJX2rdMUiYh0tjYnpWY2GngeGAPcADzerMsLwGrgxFQFJyIi\n3dukslGMHhR/i9ERWxRxbtnINEckIp0lmZHSK4ECYB93vwh4o2ljWMzzVWCv1IUnIiLdWUlRPlPP\nHs85ZSMpDW/lNxZK3HfbAapTKpJFkklKDwX+5e7vt9BnKTC4YyGJiIh8rqQon8uOGsusnx3OnJ9P\n4EdHjgFg6qylLF1dGXF0IpIqySSl/YCWa3MEf8C2PCtdRESknQrzczl9/23YoncP6mLO9U/Pizok\nEUmRZJLSFcCoVvrsSDBaKiIi0imKCvL4/qHbAfDQ7GV8sHx9xBGJSCokk5Q+BxxjZmPiNZrZXgS3\n+J9MRWAiIiKJnLTX1gwvLcIdfv/k3KjDEZEUSCYp/RVQD7xgZucSzh01sx3D148BG4DfpzxKERGR\nJvJzc7jo8NEAPDtnJW98tDriiESkoyxYNN/GzmYTgHuBPo2HAA+f1wInuvtzqQ4ySmbmyfyMREQk\nPRoanK/c+BLvL1/PuOH9mHrOfphZ628UkaSZGe7eqb9gSRXPd/cngG2Bi4D7gWeAfwEXA6OyLSEV\nEZHMlZNjXDIhmFE2c/Eanv1gZcQRiUhHJDVS2h1ppFREJHO5O9+4dQYzFq5mzKDe/PeCA8jN0Wip\nSKpl3EipiIhIJjEzLpkwFoC5Kzbw8FvLIo5IRNormW1GzzGzBWYWtzi+mQ0J289IXXgiIiIt22NY\nP47ccRAA1z09j5r6WMQRiUh7JDNSejKw3N0/idfo7ssIiut/KxWBiYiItNXFR44hx2DZ2irunrEk\n6nBEpB2SSUrHAG+30ud/wNj2hyMiIpK8UQN7c+KeQwH487T5bKypjzgiEUlWMklpCUHZp5asJ9iO\ntF3CKQB/N7NlZlZtZovM7Hoz69uBc37LzBrCx3faex4REclsFx42moK8HFZX1HLrCwujDkdEkpRM\nUroc2KWVPrsAn7UnEDMbAbwJnAbMAK4DFgAXAK+YWdLJrpltDdxIUNRfS+hFRLLY4L49OW2/4QD8\n9cWFrNpYE3FEIpKMZJLSacAEM/tSvEYzOwA4Cni2nbFMBgYA57v7Ce7+E3c/DLieYErAte04523A\nKku7Q7AAACAASURBVOCWdsYkIiJdyKSDRtG7Rx4VtTFufPbDqMMRkSQkk5T+BqgFnjGz68zsiHCL\n0SPM7HrgaaAm7JeUcJT0cOAjd7+5WfOVQAVwipn1TOKcFwAHAacDlcnGJPL/7d15fBXV/f/x1ycb\nS0IChFX2HZTFBZe6Ae7W31e/VqGttUrdd1u1FWsr6rd2U2u/tVVp64ZtteJe/bpVAS3ggiigsodN\ndgIJIRCSkPP7YyYYwk1y783NncnN+/l4zOOSOTNnPnNPLveTM3POiEjz0yE7i6vGDgDg7x+uYXVh\nacARiUi0ok5KnXNLgAl4iecPgdfxBja9jneJvQwY75xbFEcc4/zXtyIcdycwC2gLHBNNZWY2DPgV\n8Hvn3H/iiEdERJqpS47rR5d2raisctz75pKgwxGRKMX6mNHXgP54jxV9Hu9S/fPALcAA59z/xRnH\nELx7PpfWUV59DWZwQxWZWTrwFLAKuD3OeEREpJlqk5XOj071vi5eXbCB+WsbGqMrImGQEesOzrlC\n4P4Ex5HnvxbXUV69PppR+JOBUcBxzrmE3OW+dGldufLX8vPzyc/PT8ThRESkkcYf0ZO/vl/Aii2l\n/Pr1xfzj8qMx0+NHRWorLCyksLAw6DCAOJLSMDOzo4HbgPuccx8lqt4hQ4Y0uM3kyZO58847E3VI\nERFphIz0NG49YyhXPPUJcwoKmbF0C+OGdAk6LJHQefDBB7nrrruCDgOIMyk1s55AD6BVpHLn3Hsx\nVlndE5pXR3n1+jqvwfiX7acCS4A7ahfHGM9+lixp+J4k9ZKKiITLqQd3ZXSfDsxdvZ3fvL6YEwd1\nJj1NvaUiNV1//fVccMEFDW4XTQddY5lz0U/faWan8fUUTXVyzqXHFITZpcBfgCnOuasjlL+BNzr/\nFOfc9DrqyAO2492bGul/nZrrf++cuynK2Fws75GIiITHJ6u3cd7DcwC4f/wozvOf+iQisTEznHNN\n+ldd1D2lZnYM8Cre5Ph/BK4HZuL1TJ4ADANeAT6NI47qRPO0CMfNAY7Dm9bpg3rq2AP8tY6yw4HD\ngPf9eOfEEaOIiDQzR/TpyOmHdOXNLzbxu7eXctbI7rTOjKnfRESSJJbR97fhTft0pHPuRn/ddOfc\nVcBw4BfAKcBzsQbhnCvAmw6qr5ldV6v4biAbmOqc2w1gZhlmNsSf37S6jjLn3BWRFuBf/mZP+uum\nxRqjiIg0Tz8+fSjpaca6ot1MnbOKsoq9QYckIhFEffnezDYDbznnLvR/rgLuds7dWWObj4HVzrnz\nYw7ESzBnAV3welwX4c1LOhZYjDeafru/bR9gJd5k+/0jVrh/3ZPxRuVf5px7LMa4dPleRKSZu/nZ\n+Tw/7ysM716u/Owszh/dk2vGDCSvbWbQ4YmEXqgu3+MNNlpT4+dyvB7MmmYBDd8tG4FzrsDMRuP1\njJ6B98jSDXj3sN7tnKs9XZQjtufZhyqzrKioYOHChUGHkbJGjBhBZqa+aEQEindV8OmabcDXXwSF\npeVMmVnA9MWbmXblsUpMRUIglsv3m4EOtX4eUGubTCDqR4HW5pxb55y71DnXwznX2jnXzzl3c+2E\n1Dm32jmX7pyrffy66r3L3z6mXtKmtHDhQhYtiufhV9KQRYsWKeEXkX0emrmcgq2Rnza9dNNOHp65\nIskRiUgksfSULmX/JPQD4EwzG+ycW2pm3YDz+PrpS9KAYcOGcfjhhwcdhohISps296sGytcy6cx6\nJ5URkSSIpaf0DWCMmXX0f/5fvF7RT/17SRcDnYHfJzZEERGR+JRV7GVbaXm92xSWlmvwk0gIxJKU\nTgFOBCoAnHOzgPF4A46G493/ebVzbmqigxQREYlH68x0OmZn1btNfnaWpokSCYGok1Ln3A7n3IfO\nuZIa6150zg13zrVxzg1zzv25acJseVYXltJ30mv0nfQaqwtLA69HRKS5Gj+6/gnzx4/ulaRIRKQ+\nsfSUioiINDvXjBnI4K45EctaZ6Rx1YkNziwoIkmgpFRCafjw4UybpmcciEjj5bXNZNqVx3LVmAHk\n+5fyc1t743zLKquYtaIwyPBExFfn5PlmVhBnnS7aqZqag6aaPH/evHkAEUffF++q4NdvLOLpj9YC\n0L5tJt8+slfMkzwnqp7mpr73VkSkrGIvrTPTufixj5i5dAt989vy9k1jyExXP41IXZIxeX59n8A0\nwOJY9KluhOJdFYyfMntfIglQtKuCKTMLGD9lNsW7KpJaj4hIqqke1HTrGUMxg1WFu3j6ozUN7CUi\nTa3OBNI519efvD7mJZknkGoemrmcpZt2RiyLZZLnRNVTrV+/ftxzzz2cdNJJtGvXjlGjRrFw4UKe\neeYZBg0aRIcOHbj88supqqoC4JJLLqF3797k5uYyfPhwnn766f3qe+211zjkkEPIzc3l7LPP5qab\nbmLcuHH7He8f//jHvp8XLFjAmWeeSZcuXejUqROnnXZaTPGLiNR28EG5nHtoDwD+99/L2LmnMuCI\nRFo29WqGTDSTPCeznpqmTp3KI488QlFRESNHjuTcc89lxowZLFy4kAULFvDKK6/wz3/+E4ATTjiB\nBQsWUFxczB133MHEiRNZvHgxACtWrOC8885j8uTJFBUV8cMf/pBHH30Us8hXBTZu3MjYsWMZN24c\nq1evZuPGjUyaNCnm+EVEarvptMFkZaRRWFrOn6YvDzockRYt7qTUzHLNrJeZ5SYyoJYsUZM8N9Vk\n0VdccQWDBw8mPT2dCy64gJUrV/LLX/6S1q1b06tXL8aOHcvcuXMB+MEPfkD79u0xMyZMmMDIkSOZ\nMWMGAM888wzHHHMMEyZMIC0tjZNOOolzzjmnzuM+9dRTDBo0iJ/85Ce0adOGjIwMTjrppJhiFxGJ\npGeHtlx2vHeB79H3V7KmMPLjSEWk6cWUlJpZlpndbmYrgO3AKmC7ma3w19c/Q7HUK1GTPDfVZNHd\nu3ff9++2bduSnp5Ox44d91tXUlKCc4477riDoUOH0qFDBzp06MCCBQvYsmULAOvWraNPnz771V37\n55pWrVrF4MGDY4pVRCRa14wbSOd2rSjfW8WvXl8UdDgiLVbUSamZtQP+A9wN9AHWAB/5r3389e+b\nWeTJ4CQqiZrkOcjJop9++mkeffRRXnzxRbZv38727dsZOXIk1bMY9OjRg9WrV++3z5o1dQ8y6Nu3\nL8uWLWuyeEWkZctplcGPTx8CwOufb+SDAk0RJRKEWHpK7wJGAy8Cg/xBTd/wBzYNAl4CjvS3kzjV\nN8nz4K45XD0mutm2ElVPPHbs2EFmZib5+flUVlby2GOPMX/+/H3l3/nOd/jwww957rnnqKqqYvr0\n6bz00kt11nfhhReyZMkS7r33Xnbv3k1FRQXvvPNOk8UvIi3P+Yf3ZESPPADu+teX7K1K/FSAIlK/\nWJLS8cBnzrnznXMraxb4P58PzAcmJDC+Fqd6kucLjvq6J7N920yuGjOAaVceG/X8oomqp1pdg5Ai\nmThxIkcddRQDBw6kV69eLF68mBNPPHFf+YABA5g2bRp33HEH7du354EHHuCiiy6iVatWEY/XvXt3\nZsyYwVtvvUXPnj3p3r079913X0zxi4jUJy3NuOO/DgZg0YYdcQ0GFZHGqXPy/AM2NNsN/N45d1s9\n2/wauME51zZB8QUuiMnzwXtm/Zh7ZwAw88dj6ZOfHddxElVPU7vgggvIzc3lkUceaXRdmjxfROJ1\n7T/m8dqCDXTKyWL6LWNp1zp1HzQiEotkTJ6fEcO2q4D2DWyT528njdQnP5tVvz4rNPUk2r/+9S+O\nP/54cnNzefXVV3nhhRd46623gg5LRFq4284cyttfbmLrznL++O5ybvvmsKBDEmkxYrl8/xdggplF\nHEFjZr2Bb/vbidTrvffeY/DgwXTo0IHbb7+dKVOm7HeJX0QkCD07tOWKE/oD8NislazaWhpwRCIt\nRyyX7/sCvweO9V/fAzYBXYExwI3ALOBHQFXNfZ1zzfb5bUFdvpf46b0VkcYo3VPJuPtmsLlkD6cd\n3JU/XzQ66JBEAhe2y/cFgMN7vv3/RCg34Gx/qcnFeBwREZHAZLfK4NYzhnLztPm89eUmZi/fyrED\nOwUdlkjKiyVZnIqXYIqIiKS0cw/rwdQ5q5j/VTF3v/olr91wAulpTdpJJNLiRZ2UOucmNmEcLdKi\nRXpySFNYtGgRw4ZpcIKIxK96iqjzHp7D4o0lPPPxGr53dN1PnhORxovpMaOSOCNGjFDi1ESGDRvG\niBEjgg5DRJq5I/p05OxRBwFw/1tLKd5dEXBEIqkt6oFOLVVTDXQSEZHwW1e0m5Pvn0FZRRWXn9CP\n2886OOiQRAKRjIFOMSelZnYkcDrQA2gVYRPnnLs0AbGFgpJSEZGW7XdvL+UP7ywjM91460dj6Ncp\nnA8hEWlKoUpKzXvu4xPAhXgj7atH4ler/tk559ITG2ZwlJSKiLRsu8orOem+mWzcUcYpw7rw14uP\nDDokkaRLRlIayz2l1wHfB54CRuMloNXzlv4UKAGeAfonOEYREZHAtM3K4NYzhwDw70WbeX/ZloAj\nEklNsSSlFwNLnHMTnXPz/HVFzrkPnHO/BsYB5wEnJTpIERGRIJ0zqgeH9vKetP0/r35J5d4qyir2\nBhyVSGqJ5fL9TuBJ59y1/s9VwC+cc3fU2OZ5oLdzLmWubejyvYiIAMxbs51vPTQbgOysdErL95Kf\nncX5o3tyzZiB5LXNDDhCkaYTtsv3AMU1/l0KdKxVvgwY2qiIREREQmhApxzatfam9y4t93pJC0vL\nmTKzgPFTZlO8S1NGiTRGLEnpOrwR99UKgCNqbTMIL1kVERFJKQ/NXE5JWWXEsqWbdvLwzBVJjkgk\ntcSSlH7E/kno68BRZvZzMzvEzK4FzgE+SGSAIiIiYTBt7lcNlK9NUiQiqSmWpPR5IN3M+vk//xZY\nDdwFLAAeBIqASQmNUEREJGBlFXvZVlpe7zaFpeUa/CTSCBnRbuicewl4qcbP28zsMOByYACwCpjq\nnNuQ6CBFRESC1DoznY7ZWfUmpvnZWbTOTJlpukWSLuqkNBLnXDFwX/XPZtbazHKdczsaHZmIiEiI\njB/dkykzC+op75XEaERST6yj7xvyMLAtwXWKiIgE7poxAxncNSdiWeuMNK44Qc+OEWmMRCelsP+j\nR0VERFJCXttMpl15LFeNGUB+dhbAvimiyiqreGX+uiDDE2n2op48P6rKzB4HLnLOpcxNNZo8X0RE\nIimr2EvrzHRu+udnvPDpOrKz0nn7pjEc1L5N0KGJJFwYJ88XERER2Deo6fazhtGhbSal5Xu54+XP\nUUeGSHyUlIqIiDRCfk4rfnbWwQD8e9Fm3vh8Y8ARiTRPSkpFREQa6VuH9+C4gfkATH7lC4p365Gj\nIrFSUioiItJIZsY9/z2CVhlpbC7Zw2/fWBx0SCLNTr1JqZntjWUBLkpS3CIiIqHSt1M2N54yCIC/\nf7iGj1dphkSRWDTUU2pxLCIiIi3S5Sf0Z2i3dgDc9sJC9lTqsaMi0ao3KXXOpcWxpMx0UCIiIrHI\nTE/jV98agRks37yz3idAicj+dE+piIhIAh3WuwMXf6MvAH98dzkrtuwMNiCRZkJJqYiISILdcvoQ\nuue1pnxvFT99YaHmLhWJgpJSERGRBMtplcHd5wwH4MOV23h27tqAIxIJPyWlIiIiTeDUg7ty5vBu\nAPzPq4tYU7gr4IhEwk1JqYiISBO56+xDyM/OYueeSq5/5lPKK6uCDkkktJSUioiINJEuua25b8Io\nAOavLeL+t5YEHJFIeCkpFRERaULjhnThsuP7ATDlvQJmLt0ScEQi4aSkVEREpIn95IyhjOiRB8DN\nz37G5pKygCMSCR8lpSIiIk0sKyONB797GNlZ6WzdWc5N/5xPVZWmiRKpSUmpiIhIEvTtlM09544A\n4D/LtzLlvQLKKvQYUpFqpgl962dmTu+RiIgkyg1Pf8or89fv+zk/O4vzR/fkmjEDyWubGWBkInUz\nM5xz1pTHUE+piIhIkhTvquDL9cX7rSssLWfKzALGT5lN8a6KgCITCZ6SUhERkSR5aOZylm8pjVi2\ndNNOHp65IskRiYSHklIREZEkmTb3qwbK9ThSabmUlIqIiCRBWcVetpWW17tNYWm5Bj9Ji6WkVERE\nJAlaZ6bTMTur3m06ts2kdWZ6kiISCRclpSIiIkkyfnTPesu75bVJUiQi4aOkVEREJEmuGTOQwV1z\n6iz/csMOXl+4IYkRiYSHklIREZEkyWubybQrj+WqMQPI9y/l52dnccWJ/Tm8d3sAbn1+AV9t3xVk\nmCKB0OT5DdDk+SIi0lTKKvbuu4d0fdFuvvmH9ynaVcHB3XN59qpvkNMqI+AIRTwtbvJ8M+thZo+Z\n2TozKzOzlWb2gJm1j3L/jmZ2mZm9YGbLzGyXmRWZ2ftmdomZNembKSIiEouag5oOat+G300YRZp5\nl/Gv/tsnVOytCjA6keQKTU+pmfUH5gCdgJeAJcBRwEnAYuA459z2Buq4EngYWA9MB9YAXYFvAe2B\n55xzE2KMSz2lIiKSNE/NWcXPX/4CgG8d3oP7x49CfSoStGT0lIYpKX0TOAW43jn3UI319wM/Ah5x\nzl3TQB1jgWzn3Gu11ncBPgZ6Auc7516MIS4lpSIiklS/eWMxD8/wnu503biB3HL6kIAjkpauxSSl\nfi/pcmClc25ArbIcoHooYhfn3O44j3EbcA/woHPuxhj2U1IqIiJJ5Zzjpmfn8+Kn6wC459zhfO/o\nPgFHJS1ZS7qndJz/+lbtAufcTmAW0BY4phHHqPBfKxtRh4iISJMzM35z3kiOG5gPwM9f+py3v9wU\ncFQiTSssSekQwAFL6yhf5r8OjqdyM0sHLvaP8UY8dYiIiCRTVkYaD194BEO7taPKwfVPz2PemshD\nK/RoUkkFYZlrIs9/La6jvHp9VKPwI/gNcAjwqnPu7Vh3Xrq0rlz5a/n5+eTn58cRmoiISGS5rTN5\n8pKjOPdPs1hfXMZlT87l+auPpV+nbIp3VfDQzOU8N/crCkvLyc/O4vzRPblmzEDy2mYGHbo0E4WF\nhRQWFgYdBhCepLTJmNkNwE3Al8BF8dQxZEjDN5hPnjyZO++8M57qRURE6tQ1tzVPXnIU5z08m22l\n5Ux8/CMen3gkV/3tE5Zu2rlvu8LScqbMLGD64s1Mu/JYJaYSlQcffJC77ror6DCA8Ax0+i1wM3CL\nc+6BCOUPAtcA1zjnpsRQ73XAH4DPgVOcc5vjiM0tWbKkwe3UUyoiIk3pw4JCvv/oR5TvraJzu1Zs\nKdlT57ZXjRnApDOHJjE6aa6i7SkdMmRIixl9fynwF2CKc+7qCOVvAKfiJZbTo6zzh8DvgAX+flvj\njE2j70VEJBReW7CB656eR0NfS/nZWXzy81OTE5S0CC1p9H11onla7QJ/SqjjgF3AB9FUZma34iWk\n84Bx8SakIiIiYXLWyO5MOqPhHtDC0nINfpJmJxRJqXOuAG86qL7+Jfea7gayganVc5SaWYaZDfHn\nN92Pmf0c+BXeZPmnNPQUKBERkebkyjEDaJVR/9d3fnbWfo8wFWkOwjTQ6Rq8+Uj/18xOBhbhzUs6\nFu8xoz+rsW0Pv3wVsC8xNbOLgbvw5iKdBdwY4dFsq5xzTzbJGYiIiCTBxcf24c/vrayzfPzoXkmM\nRiQxQpOUOucKzGw0Xs/oGcCZeE9yegC42zlXe7oo5y819fXXpQN1PbVpJqCkVEREmq1rxw7i3cWb\nWb659ICywV1zuHrMgAh7iYRbKAY6hZkGOomISBgV76rgD+8uY+qcVVTs9b6nBnfN4R+XHUOndq2C\nDU5STjIGOikpbYCSUhERCbOKvVXcMm0+L3+2HoAxgzvz0PcOJ7tVaC6GSgpQUhoCSkpFRCTsnHP8\n9s0lPDxjBQCjeubx2MQjyc9Rj6kkhpLSEFBSKiIizcXjs1Zy96tf4hz065TNkz84it75bYMOS1KA\nktIQUFIqIiLNyb/mr+fmZ+dTvreKTjmteOIHRzK8R17QYUkzp6Q0BJSUiohIczN7+VaueOoTdu6p\nJKdVBo9ceATHD+oUdFjSjCkpDQElpSIi0hx9sb6YiY9/zJaSPWSmG/eNH8U5h/YIOixpppSUhoCS\nUhERaa7WbtvFxY99RMFWbz7Tn501jMtOOOBhiCINUlIaAkpKRUSkOSvcuYdLnpzL/LVFAFxxYn8m\nnTGUtLQmzS8kxSgpDQElpSIi0tztKq/k2r/PY/qSLQB8o38+908YxUHt2wQcmTQXSkpDQEmpiIik\ngoq9Vdzx8uc8/dFaANq1zuAX/z1c95lKVJSUhoCSUhERSSWvLdjAT19cSPHuCgD+a9RB/OKc4eS1\nzQw4MgkzJaUhoKRURERSzcbiMn783HzeX7YVgO55rbl//CiOHahpoyQyJaUhoKRURERSUVWV48k5\nq/jV64spr6wC4LLj+3HL6UNonZkebHASOkpKQ0BJqYiIpLKlm0r44TOf8eWGHQAM7daOB759KMO6\n5wYcmYSJktIQUFIqIiKprryyit+9vZQp763AOchKT+OW0wdz2fH9NXWUAEpKQ0FJqYiItBQfFhRy\n07PzWVe0G4Bj+nfk/gmH0kNTR7V4SkpDQEmpiIi0JDvKKrjz5S944dN1AOS0yuCqMf259Pj+tMnS\nvaYtlZLSEFBSKiIiLVHtqaO6tGvFTacO5vwjepKRnhZwdJJsSkpDQEmpiIi0VIU79/Dgu8v52wer\nqazyvgsHdsnh1jOGcsqwLpjpftOWQklpCCgpFRGRlm51YSn3vrmEVxds2LfuqL4dmfTNoRzeu0OA\nkUmyKCkNASWlIiIinvlri/jV64v4oGDbvnVnDu/Gj08fQv/OOQFGJk1NSWkIKCkVERH5mnOOGUu2\n8OvXF7NkUwkA6WnGd4/qxY0nD6Zzu1YBRyhNQUlpCCgpFREROdDeKscL877id28vZUNxGQBts9K5\n5Lh+XPSNPnTJbR1whJJISkpDQEmpiIhI3coq9vLE7FX8afpySsoqAchIM84a2Z2Jx/blMN1zmhKU\nlIaAklIREZGGbS8t55H3VvD0h2vY4SenAKN6teeS4/py5vDuZGVoKqnmSklpCCgpFRERid6u8kpe\n/HQdT8xaxbLNO/et79yuFRce3YcLju6t+06bISWlIaCkVEREJHbOOWYtL+SJ2St5Z/Fmqr9Ks9LT\n+H8juzPxuL6M7Nk+2CAlakpKQ0BJqYiISOOsLixl6pzVPPvxWkr2fH1p//De7bng6D6cfkhX2rXO\nDDBCaYiS0hBQUioiIpIYpXsqeWHeVzw+exUFW0r3rW+VkcYpw7pyzqEHMWZIZ1plpAcYpUSipDQE\nlJSKiIgkVlWV4z/LtzJ1zmpmLNm87xGmALmtM/jmiO6cfehBHN0vn/Q0Pco0DJSUhoCSUhERkaaz\nvbSc1z/fyMufrePDldv2K+ua24r/GnkQ5xzag+E9cjFTghoUJaUhoKRUREQkOdYX7ebVBet56dP1\nfLlhx35l/Ttnc86oHpwxvBuDu+YoQU0yJaUhoKRUREQk+ZZtKuGV+et5+bP1rNm2a7+yXh3bcPLQ\nrpw8rAtH98vX/KdJoKQ0BJSUioiIBMc5x2dri3j5s/W8tnADW0r27Fee0yqDEwd34uShXRk3tAsd\ns7MCijS1KSkNASWlIiIi4VBV5Viwrph3F23i34s2H3CJ3wwO792Bk4d14ZRhXRnURZf5E0VJaQgo\nKRUREQmn9UW7eWfxZt5dtIlZKwopr6zar7xXxzacMKgzxw/sxDf659NBvahxU1IaAkpKRUREwm9X\neSX/WbaVdxZt5p3Fm9m6c//L/GZwyEG5HDewE8cP7MToPh1pk6X5UKOlpDQElJSKiIg0L1VVjoXr\nipm+ZDOzlxcyb832/eZCBe9xp0f06cDxgzpx7IB8RvTIIyNdA6bqoqQ0BJSUioiING+leyr5aOU2\n/rN8K7OWb2XxxpIDtmnXOoNj+udzdL+OHNm3I4cclKsktQYlpSGgpFRERCS1bCnZw+wVXoI6a3kh\n64p2H7BN26x0Du/dgSP7duTIfh04rFeHFn25X0lpCCgpFRERSV3OOVYX7uI/y7cyp6CQj1duY3Ot\naacAMtON4T3yOKqv15M6um8H2rdtOQOnlJSGgJJSERGRlsM5x5ptu/ho5TY+XrWNj1dtZ+XW0ojb\nDu6aw2G9OnBY7/Yc1rsDA7vkkJ6WmlNQKSkNASWlIiIiLdvmkjLmrtrORyu3MXf1Nr5cv4OqCKlB\ndlY6o3q157De7Tm0VwcO7dWezu1aJT/gJqCkNASUlIqIiEhNJWUVzFtTxCert/Ppmu3MX1vEjrLK\niNv27NCGw3p34LBe7RnVqz0Hd89tlvemKikNASWlIiIiUp+qKkfB1lI+XbOdT9cW8dmaIhZvjNyb\nmp5mDOycw/AeeYzokcuInnkc3D0v9ImqktIQUFIqIiIisSrdU8nCdcV8trbIS1bXFEUcQAWQZjCo\nS7tQJ6pKSkNASamIiIgkwqYdZSz4qpiF64r5fJ33uqWeRLV/5xyGdc9lWPd2DOuey8Hdc+nSrhVm\nyR9MpaQ0BJSUioiISFPZtKOMhbUS1bp6VAE6Zmd5SWq3XIZ1z2Vo93YM6tKOrIymnehfSWkIKCkV\nERGRZNq8o4yF64pZtGEHizaUsGjDDlYWllJXOpKRZgzsksOQbu0Y3LUdg7rkMLhrO3p1bJuwKaqU\nlIaAklIREREJ2q7ySpZsLGHxxhI/Wd3B4g0llOyJPOofoFVGGgO75DCoSw6DunoJ6+CuOfTq0Ja0\nGJNVJaUhoKRUREREwsg5x1fbd/Oln6Qu27STpZtKWLm1lMpIQ/99rTO9ZHVAZ2/p3zmbAZ1z6Ncp\nm9aZkQdXKSkNASWlIiIi0pyUV1axqrCUpZtKWLppJ8s2lbB0UwmrCnext55k1Qx6tG9D/845K76J\nMQAAE1hJREFU9O+UzYAuOQzwX7vltVFSGjQlpSIiIpIK9lTuZeXWUpZu2snyTSWs2FrKis07Wbm1\nlD2VVfXuu/o3/6/Jk9KMpqxcRERERMKhVUY6Q7vlMrRb7n7rq6oc64p2U7C1lIItO1mxZScFW0op\n2FLKxh1lSYtPPaUNUE+piIiItFQ791SyckspI3u11+X7oCkpFRERkZYuGQOdmnamVRERERGRKCgp\nFREREZHAKSkVERERkcApKRURERGRwCkpFREREZHAKSkVERERkcApKa2HmeUDFBYWBh2KJEBhYSF3\n3nmn2jNFqD1Ti9oztag9U0t1O1bnRU1FSWn9lJSmkMLCQu666y61Z4pQe6YWtWdqUXumlhrt2HKS\nUjPrYWaPmdk6Myszs5Vm9oCZtQ+iHhERERFJjoygA6hmZv2BOUAn4CVgCXAUcCNwupkd55zbnqx6\nRERERCR5wtRT+jBeInm9c+4859xPnXOnAA8AQ4F7klyPiIiIiCRJKJJSv3fzVGCVc+6hWsWTgVLg\n+2bWJhn1hNXzzz8fmvpi2TeabRvapr7yusoS/X4lmtoztrKW1p6NqVPt2Xip3J4Nbaf2bNo61Z51\nC0VSCozzX9+qXeCc2wnMAtoCxySpnlBSEhNbWUv7T1LtGaxU/tJTewZbp5KYxlN7xlbW0pPSIYAD\nltZRvsx/HZykekREREQkicKSlOb5r8V1lFevb2j0fKLqEREREZEkCs3o+zBbuXJlg9vk5+eTn9+k\n03eJiIiIJFRhYeEB88nu2LGDpUu/vugcTR6UEM65wBfgt8Be4Ed1lD/ol1+ZjHpqbJ+PdzuAFi1a\ntGjRokVLS1/ymzIfDEtP6RLAqPtez0H+a133iia6HgCcc4Vm1ononmBQ6JzToytERESk2fAfHRqK\nPMf8HsFA+VM5LQdWOucG1CrLATb4P3Zxzu1u6npEREREJLlCMdDJOVeAN41TXzO7rlbx3UA2MLU6\nkTSzDDMb4iehcdcjIiIiIuEQip5S2NfLOQvoArwCLMKbT3QssBjY93hQM+sDrMSbJL9/vPWIiIiI\nSDiEJikFMLMeeD2aZ+Dd37ABeAG42zlXXGO7PkABXlI6IN56RERERCQcQpWUioiIiEjLFIp7SkVE\nRESkZVNSKiIiIiKBU1IqIiIiIoFTUppAZnaNmRWY2W4zm2tmxwcdk8THzE4ws5fN7CszqzKzi4KO\nSeJnZreZ2UdmVmxmm83sFTM7JOi4JD7+/7Xz/fYsNrPZZvbNoOOSxvM/q1Vm9oegY5H4mNlkvw1r\nLuuj2VdJaYKY2beB3wO/AA4FZgOvm1nPQAOTeOUAC4EbgF0BxyKNdyLwR+AbwDigEvi3mbUPNCqJ\n11rgJ8BhwBHAu8BLZjY80KikUczsGOByYH7QsUijLQa6At38ZUQ0O2n0fYKY2QfAZ865q2qsWwpM\nc87dHlxk0lhmVgJc65ybGnQskhhmlg0UA+c4514LOh5pPDMrBCY55/4SdCwSOzPLAz4BLgXuBBY6\n524INCiJi5lNBs5zzo2MdV/1lCaAmWXi/bX+dq2it4Bjkx+RiDQgF+//Pz1Io5kzszQz+w7eE/tm\nBx2PxO3PwLPOuZlBByIJ0d/M1vm3ND5tZv2i2SmjqaNqIToB6cCmWus3AScnPxwRacD/AvOAOUEH\nIvHxL9XPAVoDJcC5zrkvgo1K4mFmlwP9ge8GHYskxAfARLxL+F2AnwOzzezghp6o2SJ6Ss3sPDP7\ng5m9598UX2Vm9V6KNbMeZvaYn+mXmdlKM3tA96AFT+2ZWpLdnmb2O7wrGOc53b+UcElsz8XAKOAo\n4GFgqpkdnMBTEZq+Pc1sMHAPcIFzrqqpzkM8yfh8OufedM4955z73Dn3LnAWXr55cUPxtZSe0p8B\nI4GdwFfA0Po2NrP+eH+BdwJeApbg/cd3I3C6mR1XK9vfCuzFu6m3pq7AxkScgOynqdtTkitp7Wlm\nDwATgLHOudUJOwOpKSnt6ZyrxHvcNMCnZnYU8CO8gTKSOE3dnt/Aexz4l2ZWvS4dONHMrgKynXMV\niTudFi/p35/OuV1m9gUwqMHonHMpvwBjgAE1/l0FTK1n+zfxksxraq2/39/3oQj7fAA8UmvdEuAX\nQZ9/qi3JaM9a25UAFwV93qm6JKs98S7ZrwcGB33Oqbwk+/NZY/t36juOlnC2J9793QfXWj4C/gYM\nC/r8U20J4vOJd4vNeuBnDW4b9BsUUIPU2Qh497VUASsilOX4CUoJ0KZW2QSgDG/k4FD/C3AH0Cvo\nc07lpQnbMxvv0uChQCneX5ej1J7Ntj3/hDfafizeFYzqJTvoc07lpQnb81fA8UAfYLj/cyVwWtDn\nnMpLU7VnhG2nA38I+nxTfWnCz+e9eNPw9QWOBl4FiqL5/mwR95TGaJz/+lbtAufcTmAW0BY4plbZ\ns8APgduBT/HuWTvTObe2SaOVhsTVnsBovHb8BO+vvLvwBsbc1WSRSjTibc+r8f4TfQfvL/bq5eYm\ni1SiEW97dgOewruv9N94s5+c4Zw7oB5Jqnjb84DNExyXxCfe9uwJ/APv8/kcsBs4Jpp8qKXcUxqL\nIXgfiKV1lC8DTgUG4/01t49z7hHgkSaNTmIVV3s6b1oS/dEWPvG2p9oynOJtzx80fWgSh7i/P2ty\nzp2U+NAkDvF+PuOeRUH/UR8oz38trqO8er1GbTcPas/UovZMLWrP1KL2TC1Jb08lpSIiIiISOCWl\nB6rO/PPqKK9eX5SEWKTx1J6pRe2ZWtSeqUXtmVqS3p5KSg+0BDC8eyQiqZ5nq657LCRc1J6pRe2Z\nWtSeqUXtmVqS3p5KSg9UfbPuabULzCwHOA7YhTcvqYSf2jO1qD1Ti9oztag9U0vS21NJaS3OuQK8\n6Q/6mtl1tYrvxpu/cqpzbnfSg5OYqT1Ti9oztag9U4vaM7UE0Z7mT3Sa0szsHOC//R+7AafjPZ7u\nfX/dVufcj2ts3x9v/q0uwCvAIrx5uMbizbulx1IGSO2ZWtSeqUXtmVrUnqkl9O0Z9BMFkvTUgsl4\nj8mqa4n0tIIewKPAOrwnNa3Ee6xWXtDn09IXtWdqLWrP1FrUnqm1qD1Tawl7e7aInlIRERERCTfd\nUyoiIiIigVNSKiIiIiKBU1IqIiIiIoFTUioiIiIigVNSKiIiIiKBU1IqIiIiIoFTUioiIiIigVNS\nKiIiIiKBU1IqIiIiIoFTUioiIiIigVNSKiIiIiKBU1Iq0gKZWR8zqzKzx4KORcDMbjCzL8xsl98u\nNwQdU3OWqN/veOrRZ0skfkpKRZLE/6LaG3QczV2qfemb2XeA3wO7gQeAO4EPgowpRTh/EZFmIiPo\nAEREWriz8JKns5xzm4IOJkWsA4YBxUEHIiLRU1IqIs2NBR1Agh0EoIQ0cZxzlcDSoOMQkdjo8r1I\nCJnZRDN7zsxW+PcZFpvZf8zsexG23Xc528yGmNlLZlZoZjvN7H0zO7UpjltjnyPN7J9m9pWZlZnZ\nejN708zGR9j2aL/+DWa2x8zWmNkjZtY9yvgmAwV4PYsT/fOuXi6K8H4M8mPbZGZ7zezEWM+zVn19\nzOwZM9tiZrvN7GMzO6uOWM82s3f896PMzNaZ2Qwzu7r6XMysChjn/bjvPA64xcPMJpjZe2ZW5Me7\nwMwmmVlWPbEecO61yvv778FWM9vht9khfj2dzOzPfuy7zewjMxsbZRsd7R/j+Xq2WeTX277Gunjb\npN7zjLBvzL/j/n6N+mzVeG/i/v0XSXXqKRUJp4eAz4GZwAYgH/gm8JSZDXbOTY6wT39gDrAAeATo\nDnwbeN3Mvuucm5bo45rZ5f4+lcArwDKgCzAauBqYVmPbS4ApQJm/7VpgEHAp8F9mdrRz7qsG4psO\n5AE/BD4DXqpR9lmtbQcCHwJLgL8BbYAd8Zynry/wEbACmAp0xHt/XzKzU5xzM2uc6xV4bbDBP9et\n/vsyEpgIPOyfiwN+APTGu5fUqHUfpJn9EpgEbAH+DuwEzgR+CZxmZqf5PYPRnjtAP7/8S+Bx/9y+\nBUw3s2OBN/AufT/jn+d3gf/z35t628g596GZLQG+aWYdnHPba53PkcAQYJpzrqhGUTxt0tB5RhLI\nZytBv/8iqc05p0WLliQsQBWwN8pt+0VYlwH8G9gDdK+xvk913cCva+1zOFAOFAI5EfZ5rBHHHebX\nvRUYGmG/g2r8e5C//xKgW63txuEltc9H+d5EjL2O9+N/Evz+/qzWPqf5Za/WWj8Xb+BSfoTjdKz1\n8/S6fi+AY/z6VwKda6xPw0ts9gKToj33WuWTapX9zC8rBP5Uq+xCv+z+KNtokn+MayKU/ckv+2aC\n2qS+8zzgd6QRx4n7s5XI3/8o3vtewJ/xBs39CpgMtElE3Vq0NPUSeABatLSUhRiS0nrqONf/gryw\nxrrqL8FtQHaEfR739/l+hH0iJnZRHvdBf90NUez/gL/tmXWUv+B/wR8Qf4Rto01K1wOZCXx/CwCL\nsM8qYHOtdXOBEqB9FMesLyn9ix/PpRHKBvnJzPJoz71G+Yra5+InM1V+3Nm1ytL89nknyvexhx/b\nh7XWZ+L9EbMBSEtAmzR0nlH9fkdxnEZ9thL5+9/AObTGS3wH+T/3x+thP7sx9WrRkqxFl+9FQsjM\neuH1Np2Ed2m3TY1ih/elX9s851xphPUzgIuBw4CnEnjco/3XN+qr03eM/zrWzI6KUN4FSAcGA59G\nUV805jvnKiIVxPn+fuacizTF0Fq+Pr9qfwfuA740s2fwLhXPcs5tje0UOMx/nV67wDm3zMy+AvqZ\nWTvnXEmN4jrP3RfpXNb7r0tr/x4556rMbBPQM5qgnXPrzOwd4BQzG+qcW+wXnY13O8D9zrmqmvvE\n2SYNnecBAvpsJev3/1SgM97vJEARXkL8diPqFEkaJaUiIWNm/YCP8e6dfB94E+/+vr149/5dDLSK\nsGtdo7c3+q95CT5u9SCVdfXV68v3X2+pZxsH5ERRV7Q2RlrZiPe3KMI68HoE9xs06px7wMy2ANcA\n1wM3+seeCfzYOfdJlOdQ3WYb6ijfgNfD2R6vh7NaxHOv4YCpkpxze80sYpmvEq+nM1pP4CVJFwO3\n+esuxmvnqTU3bESbNHSe+wnqs0Xyfv+L8H4XPjez/wOedc79spF1iiSNklKR8LkZ6ABMdM7t1/ti\n3kTrE+vYr2sd67v5rw3N2RjrcauTtB40PP1O9bFz6+hxagqRejUh/vc3toM79zfgb2aWCxyLd3n4\nUuANv/ewMIpqqt+3bnj3ldbWvdZ2+w4fR8iJ9iLeoKMLzeynQCfgDLxe2oW1to23TWI9z6A+W0n5\n/XfOvW9mt+L9IXQtcJ2ZXeuce7ipjimSSJoSSiR8BvivL0QoG0vdX8SHm1l2hPXj/H0auiwY63Gr\nnzp0ZgP11tz2xCi2bUj1lEnpce4f7/sbF+fcDufcG865K/F6DzsS/ftQ3WZjaxeY2QC8y+krnXMN\njThPOudcGfAs3jyspwDfw+sIeTLC5slqk6A+W4n8/a+Xc+5e51xvYDjezATXNvUxRRJFSalI+Kzy\nX8fWXGlmp+P1tNUlD2+kbc19RgMX4PVqvpjg4z6MlyD+3MyG1S40s5r35v0R7/LvA2Y2KMK2mWZ2\nfAPxVduOlwj0jnL72lb5r2NrxdDQ+xu1eub0rO5x2xVlVY/hTRP1MzPrVKP+NOB+v+yvcYaZDE/g\nxXgx8H2gAvhHhO1W+a9ja65MZJs08jiN/WzF9ftvZk9YjTl462NmL5jZvmnRnHOL8KbJKmhoX5Gw\n0OV7kSQzs8frKb4abx7FHwDPmdlzeANQhgOn4/U8faeOfd8DLjWzo4FZeD1UE/CSgiudczsbCC2m\n4zrnFpnZNXjJ6adm9jLePKX5wJF4lyxP9rdd4s/T+CjwhZm9gXfJPxMvuTwB2Awc3ECMOOdKzexD\n4AQz+5tfz17glQiXhRt9nnF60cx24vWQrcJrgxPw3peP8aYfapBzbo6Z/Rb4Md59gs8BpXi904fg\n3Rd5XwLibRLOudlmthwYj9fWr9Qx2CsZbdKY4zTqs9WI3//qeWtrz0MbyRHsPy9wF7yk+cYo9hUJ\nBSWlIslTfWmwrl4PB9zonFvo97T9Am9S7wxgPt49iTvwJu2OdJlxJXAV8GvgSrwBG3OBu51zkZIg\nV7OeeI7rnPurmS3EG8AxBjgHb8qfBdTqwXPO/d3vybkZ77LnqXgJ1nq8L9N/1vG+RHIh3qji0/ES\nCcMbcVydlO53brXiiOf9rbO+GuU13erHdhheAlkGrMZLLh9xztV+alOddTvnJpnZPOA6vN7GTLwp\nnW4HfucOnDg/mljrKo/1PKPxJHA33jRJT0SstOnapPbva7zHKaARny3/2PH8/o/AG8D2Wj3nWe1C\nYIyZ3QPkAm3x/j+ZG8W+IqFgkWc4EZHmwsz64CWkTzjnLgk6HhFpPDPLw5uY/17n3G0NbS+SCnRP\nqYiISPicgDeh/gNBByKSLLp8LyIiEjLOuVfxLsGLtBjqKRVJDQ3dXyciIhJquqdURERERAKnnlIR\nERERCZySUhEREREJnJJSEREREQmcklIRERERCZySUhEREREJnJJSEREREQmcklIRERERCdz/B+m5\ns+G0Uc4UAAAAAElFTkSuQmCC\n", 276 | "text/plain": [ 277 | "" 278 | ] 279 | }, 280 | "metadata": {}, 281 | "output_type": "display_data" 282 | } 283 | ], 284 | "source": [ 285 | "# Plot the original inferred Laplace transform values as points, and show fitted curves.\n", 286 | "# The top x-axis gives the time scale that each point roughly corresponds to.\n", 287 | "# Note that small s ~ long time, and vice versa.\n", 288 | "\n", 289 | "srange = np.logspace(0, 5)\n", 290 | "\n", 291 | "for stat in stats:\n", 292 | " plt.errorbar(*zip(*MAGIC[stat]['LT']), fmt='o', c=statcolors[stat], label=stat) \n", 293 | " plt.plot(srange, MAGIC[stat]['T'].lt(srange), c=statcolors[stat])\n", 294 | " \n", 295 | "plt.xscale('log')\n", 296 | "plt.legend(bbox_to_anchor=(.2, .4))\n", 297 | "plt.xlabel('Laplace transform variable, $s$')\n", 298 | "plt.ylabel('Laplace transform')\n", 299 | "\n", 300 | "slim = plt.gca().get_xlim()\n", 301 | "\n", 302 | "plt.twiny()\n", 303 | "plt.xscale('log')\n", 304 | "plt.xlim(1/(s*tfactor) for s in slim)\n", 305 | "plt.xlabel(r'Time scale (years)')" 306 | ] 307 | }, 308 | { 309 | "cell_type": "markdown", 310 | "metadata": {}, 311 | "source": [ 312 | "## \"Effective population size\"" 313 | ] 314 | }, 315 | { 316 | "cell_type": "code", 317 | "execution_count": 13, 318 | "metadata": {}, 319 | "outputs": [ 320 | { 321 | "data": { 322 | "text/plain": [ 323 | "" 324 | ] 325 | }, 326 | "execution_count": 13, 327 | "metadata": {}, 328 | "output_type": "execute_result" 329 | }, 330 | { 331 | "data": { 332 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAyQAAAIOCAYAAABJSsngAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xe8XFW5//HPNwnpECAJLZQQIEFExEuRKqA0QYQrUoRL\nkSJFEPDKTxQ0FPHeKyKIgopeRASpKk24IBAIQogB6ZDQEkIJkN4h7fn9sfYkw2TmnDlTT/m+X695\nzTl777X2mnM2ZD1nlUcRgZmZmZmZWTN0a3YDzMzMzMys63JAYmZmZmZmTeOAxMzMzMzMmsYBiZmZ\nmZmZNY0DEjMzMzMzaxoHJGZmZmZm1jQOSMysS5P0sKRlzW5HW0n6uqRlkrZtdltsZZL6SJoi6bpm\nt8XMrL1zQGJmnULWOW/L6+isaAAdKiCR1A+4GLgjIp5sdntsZRGxEPgv4AhJ2zS7PWZm7ZmcGNHM\nOgNJPyxy+CxgNeDnwKyCc7dHxHOS1gf6RsQr9W5jrUj6PnARsFNEjG12e6w4Sb2Ad4FxEbFvs9tj\nZtZeOSAxs05L0kRgQ2DjiJjc7PbUgqRuwERgQUR8otntsZZJugr4BjAiIl5vdnvMzNojT9kysy6t\n2BoSSbtl07p+KGkbSf8naZakGZJuy0ZVkDRM0k2SPpC0QNJDkrYqcZ8+kr4n6WlJ8yTNlfS4pMPb\n2OS9gA2AmwvqXz1rw6stfNa7ss/1bwXHP5t9rimSPpI0WdKvJa1bpI5/k/RzSc9Imi5poaRXJP1U\n0upFrj8mN0VO0r6SRmU/y6V51+yate0tSR9m7RhTYtSr2OdaRdJpkv4maVJWx3RJf5dUcmRC0j6S\nHst+H9Ml/VXSCEnXZm3esEiZQyWNzj7DAknPSTpHUs8St7mJ9G/tceV8FjOzrsgBiZl1dZG9itke\neJS0xuRqYCzwFeDvkkZk368H/AG4G9gNuF9S3/xKJA0AHgN+BCwB/he4FhgE/EnShW1o755Zex/7\n2IeImAXcCAyT9IXCQlkQtS9p+tC/8o4fB/wD2Ad4CLgMGAccDzyZC77ynAgcCowHrgGuIk1L+jbw\nj2x9S6EADgHuAuYAvyJ11MkChlHATsADwE+BvwIfAqeU8wMB1gQuB/oD9wOXAncAWwP3ZJ+x8Odx\nOHAP8GlScPdrYHVgDLARRZ4JST/O2j0CuAH4RXbqx8D/SepRpG3/BBaTAkkzMysmIvzyyy+/OuWL\nNLVpKbBhC9eMApYWHNuNFIQsBQ4vOPe77Nx04JyCc+dlZU4vOH5tdvw/C473BO4lBSlblfmZxmR1\nrVHk3DZZ224pcu78rNxxecc2Az4CJgDrFFy/R9auPxcc34Bsum/B8a9n9z674Pgx2fElwF5Fyv05\na9eWRc6tWebPpCewXpHjqwLPA9OAXnnH+wMzgYWF9yUFF7nf/YZ5x3fIjk8EBucd7wbcmV1/Ton2\n/YsUlPRr9n8Tfvnll1/t8eUREjOz0h6NiJsKjv0he58F/E/BuesAkf4yD4CkNYEjgScj4tL8iyNi\nEfBdUqf2iDLbtCGwOCJmFp6IiKeAJ4EDJa2V14bclKG5ZCMTmVOBHsCZEfFeQV2jSB3tA/JHPSLi\nrYgoNqJ0LWn0Y58S7b49Iv5e5Hiurg+LfJ4ZJeoqvG5RRLxb5Phc0ijOGsB2eacOBAYA10fECwXF\nLmblDRAgjRgF8KOImJp3j2XAf2bnTijRxPdIv+Mh5XweM7OuptjwspmZJU8VOZbr+D5TpGP+Tvae\nP81pO6A7EJJGFqkvt/ag3AXqA0l/3S/lKlIn/Djgv7Nj+2dtujIiFuRdu0P2vruk7YvUtVbW9uHA\n0wDZtKSTgcOALUgd+/w/bpXqdI8rcfwG4N+Bf0q6mTRi9VhEvFPi+qIkbQH8P2BXYF2gd97pKGjX\nZygy7Q0gIuZLeoY0SkZBGbL2FZZ5VdLbwMaSVs0CoXy5wGoQ0GF2czMzaxQHJGZmpc0ucmxJqXMR\nsVQSwCp5hwdm79vx8b/Sf6woUGztRTEL+Xhnu9BNpDUUJ7IiIPlGdo+rC67Nte07LdQXpClOObcA\nBwGvA7eT/vr/UXbuLKBXiXreK3YwIv4q6UukUYavZ22VpKeA70XEAy20DdLFOwAPkoKnB0nrR+aQ\nplhtTRoRyW/XgOz9/RJVFjueKzOlRJkppOlsq5NGovL1yd4XlihrZtalOSAxM6uvXOByWUS01PEv\n1wfAppK6R8TSwpMR8aGka4EzJe0NvERazP5ERDxfom2rRcT81m6cJfg7iLRwfL9sulLunEjTz4pp\naeMAIuJe4F5JfYDPAl8iTSe7S9JnImJ8K007jxSk7R4Rjxa0+RxSQJJvTva+don6ih3P/azWIa0j\nKbRuwXX5coHfByXuZ2bWpXkNiZlZff2T9Jf6XWtU33PZ+4gWrvlV9n4Sae1DN+A3Ra57Inv/XJn3\n3jR7vys/GMl8lhUjARWJiIUR8XAWuP2YNJ3ti2UU3QSYURiMZHYvcuxp0lqfXQpPZOtltl6pRDZl\nrVh9kjYhTYmbGBFzCs+TflfT2zoNzcysq3BAYmZWR9kC6BuAbSWdly0w/5gsn8nQMqt8mNSZ3qHU\nBRHxGmnq0gGk9R6zKMhbkvklaQraZZI2K9KuVSTld9onZe+7F1y3VlZXm2U5SLoXObVO9r6gyLlC\nk4A1JW1ZUPfxwN5Frr+DNJJxZJG8MT8gTbsqdA3p536epEF59+hGmiIn0g5sH5P9XtemyNoTMzNL\nPGXLzKz+TiONLlwAHCXpH6R1CuuRFrNvC3yNFR3+ltxByrmxD6mTXMpVpJwlawFXRMRHhRdExIQs\nR8f/Ai9K+j/SoutVSLt57UqaZrRFVmQcaSH4VyQ9RspfsjZpFGM8Kxb8F1IL7bwCGJLVNwlYRNq+\n+POkqVGFu5wVk/t5PCbpFlKwsS2wM3ArKQdK/ueeK+mbpF3RHs/KTCHlQtmKFPTltn7OlRkj6SfA\n2cALkm4D5mef/ZOkfDU/LdK2fUjT1f5cxucwM+uSPEJiZp1dybULrVzT0rqHNp3Ldl3aDTgdmEpK\nrngWaaRhDnAmUGxL3JUrj3iblGDwgCzhYil3kvJvwMqL2fPru4EUAFwPfAr4Jmmb4k1InflT865d\nRhp1+RVpzcTppE7/1aSO92JK/yxLuZj02bcgTS87iRRE/QjYPiKKrcko/Az3kdadvEhK2ngcaQH5\nHqTkhyvdPyL+RNp97JmszMmk3ct2JAUasGKtSa7MOaTA8RXgKNLnF3AusHdELGFlx5B+539p7XOY\nmXVVKr6dvJmZtVeSdiSNVJwVET8vcc3GwGukXCq7N7B5HVo2BesNYJWIqCpvSDYd7Bng3Ij4r1q0\nz8ysM/IIiZlZBxMRY0ijF9+VVGoL4LOz94rWdnR2kgZku3oV+gFpulotRjQuACYDP6tBXWZmnZZH\nSMzMOiBJG5DydtwaES/nHTsS2Aw4lpS8cZumNbIdk7QPaaH//aS1K/1JGwVsDbwJbBcR00pW0Hr9\nfUj5XR6JiNFVN9jMrBNzQGJm1klI2o20m9N80iLrUyNiUlMb1U5lu19dRFoDM5i0yUtufc5/Zbuj\nmZlZAzggMTMzMzOzpvEaErNOTtL3JC2TdEWz22Idh6SR2XOT/yq1ra9ZUZLWkXStpA8kLZT0gqRa\nJQm1Tk7SxCL/H1om6a5mt81qy3lIzDoxSTsAJwLPNrst1iGNJ21XnMsjsrSJbbEOJtuW+jFgNClf\nyzRgGCm3jVk5tgXyE6euBzxF8USv1oE5IDHrpLLOwPWkhc/nN7c11kEt8VoKq8J3gXcj4ut5x95s\nVmOs44mI6fnfSzqRlPj01ua0yOrFU7bMOq+rgVsi4pFmN8Q6rGGS3pH0hqQbs9wmZuU6EBgr6SZJ\n70t6WtI3m90o69COA/4YER81uyFWWw5IzDqh7K9Iw4Dzmt0W67CeIG0dvA9wArAO8LikNZrZKOtQ\nhgGnAq8DewOXA/8t6dSmtso6JEl7A0OB3za5KVYHDkjMGkzSwZKukDRa0uxsgd51rZQZIuma7K/V\nH2YL/S6TtHqRa4cDFwNHRMSyen0Oa556P0MAEXFfRNwWES9ExEPA/qR/M46pw0eyBmvEM0R6Xp6K\niHMj4tmI+ANwBeBRkk6gQc9QvhOBcRHxQm0+gbUnXkNi1njnAVsB80h5DzZv6WJJw4AxwCDgdmAC\nsD1wBrCPpJ0jYmZekR2BgcBLUm4tMt2Bz0k6GegXEYtr93GsCer9DK0kIhZIepGUdNE6vkY8Q1OA\nlwuOvQx8q+rWW3vQsP8PSRoMfBk4pWatt3bFIyRmjXcmMDwiBpCmM6iV639F+h/46RFxcER8PyL2\nBC4j/QNwccH1fwU+BXw67/UkcCPwaQcjnUK9n6GVSOqdXTulqpZbe9GIZ+gxYETBsRF4YXtn0cj/\nD30d+BC4qfpmW3vkxIhmTZSXWfv6iDi6yPlhwGvAxIjYpOBcf1Z0DteKiIUt3GcU8HxE+C+TnUy9\nniFJl5Cylk8G1gZ+AOwCfCoi3qrHZ7HmqOMztC0pKLmAtE3rv5Hm/58TEb+ux2ex5qj3v2WSJgCj\nIuLkmjfe2gWPkJi1b3tk7/cXnoiIeaR/7PsCO7RSj//y0HVV+gytD/yJlIvkNmAhsIODkS6pomco\nIp4EDgIOBZ4HLgLOdTDSJVX8b5mk3YFN8WL2Ts0BiVn7NoIUTLxS4vyr2fvwliqJiM97dKTLqugZ\nioivRcT6EdE7IjaIiEMiYnw9G2rtVsX/H4qIeyNi64joGxGbR8SV9WqktWvVPEMPR0T3iHiqXo2z\n5nNAYta+DcjeZ5c4nztezg4l1jX5GbJq+RmyavkZshY5IDEzMzMzs6ZxQGLWvuX+ajSgxPnc8VkN\naIt1TH6GrFp+hqxafoasRQ5IzNq3CaStFEutEcnlhCg1L9fMz5BVy8+QVcvPkLXIAYlZ+zYqe9+7\n8ES2VeLOwALgiUY2yjoUP0NWLT9DVi0/Q9YiByRm7VhEvEHaJnGopNMKTl8I9AOuaykHiXVtfoas\nWn6GrFp+hqw1Toxo1mCSDiTtzQ+wDrAP8AbwaHZsWkScnXf9MNIe7WsBdwIvk/Zq352UI2LniJjZ\nkMZbu+BnyKrlZ8iq5WfIaskBiVmDSRoJ/LCFSyYVyWQ7hPRXpH2BgaSstn8BLoyIUtsoWiflZ8iq\n5WfIquVnyGrJAYmZmZmZmTWN15CYmZmZmVnTOCAxMzMzM7OmcUBiZmZmZmZN44DEzMzMzMyapt0H\nJJKGSLpG0juSPpQ0UdJlklavdz2SdpJ0j6TpkhZIelbSGZKK/twkDZb0E0nPS5ojaZqkJyV9J0v8\nY2ZmZmZ1IulgSVdIGi1ptqRlkq5rpUw3SSdIekTSjKzP97qkmyRtWqLMMZLGSporaZakUZL2b+Ee\nvSVdIGm8pIWS3pd0s6TNWyhT975re9Gud9nK9qweAwwCbgcmANsDn6cNe1ZXUk+2v/ZtwELgZmAG\ncACwOXBrRBxWcP1GwD+zezwMPAn0JmUlHQE8C+wQER+18cdgZmZmZmWQ9DSwFTAPeJvUb7shIo4u\ncX0/Ul6UPYCngUeAD4EhwK7AaRFxT0GZnwLfBt4i9RV7AoeTtjI+LSKuKri+J/AQsBMwLvt6A+BQ\nYBGwR0SMKyhT975ruxIR7fYF3AcsBU4tOH4psAy4qh71AKsCH5B+oZ/JO96TlNRnKXBoQZkrs+Pn\nFRwX8EB27j+a/TP1yy+//PLLL7/86qwvYDdgk7yvl5GywJe6/oasj3ZCifPdC77fMatzArBa3vEN\ngWnAAmDDgjLfy8rcVHD8gOz480XuW/e+a3t6tdvhmywy3IuUWOeqgtMjgfnAUZL61KGeQ0gR6Y0R\n8XTuYEQsAs4jBRmnFNS1cfZ+V/7BSE/D37Iyg1tqq5mZmZlVLiIeiYjXy7lW0meAr5EChd+VqG9p\nwaFTgAAujog5eddNJv1xuhfw9YIyJ2dlvltQ912kzPZbSNotr12N6ru2G+02ICENnQHcX3giIuaR\nor2+wA51qGcP0oNzX5H6RpOi350krZJ3/EXSL/tj8wclCdiPFJk+1EpbzczMzKwxjiT1926StJqk\n/5B0jqQTJW1SokyuX1msj3gvqS/4+dyBrJ4NgFci4s1yytC4vmu70Z4DkhGkH+wrJc6/mr0Pr0M9\nI7L3lcpkkfJEoAcwLO/UT0hz+i6S9EC2uP1yUqDyb8DxEfFsK201MzMzs8bYNnsfCrwO/AG4GPg1\n8IqkX2Z/WAZAUl/S2pJ5EfF+kfra1KdspUwj+q7tRnsOSAZk77NLnM8db223rUrqaXOZiJhKmld4\nOylK/U/gdNLDcgseHTEzMzNrT9YijU78jNRP25y0FmNP4DXSFKcf5F3fkD5lA8u0Gz2a3YDOIttl\n6y7S3MEvAo+ThtMOJD3oB0naocRwXak6B5J2bGjN9IiY3vZWm5mZmTVHO+jn5P4w/zJweLbuF2CU\npEOAfwHflvTjiFhSh/tbpj0HJLlIbkCJ87njs+pQTyVl/gB8EtgqIl7Mjs0DfpstOrqctBDpuFba\nm29auRfmjSiamZmZdTb16OjMIk2NuisvGAEgIp6TNJE0xekTwPM0rk/ZqDLtRnuesjWB9PCVWiOy\nWfZean5dNfVMyN5XKiOpO2lHrSXAG9mx/sDngBl5wUi+Udn7Nq20dSUTJkxo9TVt2rS6bMH2ta99\nre7bvNXyHpXW1ZZy5V7b2nWVnJ8wYcLyZ6Lev5dm/06adQ8/Q+3v1YhnqJb38TPU/l5+htrXMxSx\n4jl64oknyurn1FGu8lKd9Fyejz4AEbEAeAfoL2ntIte3qU/ZSpm69l3bm/Y8QpLrxO9deCILAHYm\n7RjwRB3qeYi088K+pMQy+XYjTcV6OCIWZ8d6Zu+rSeoRKw/r5bb7XdRKW1cyfHhra/bNzMzMOp41\n1lij2f2cB4CjgC0LT2TJDHMd/0l5px4C/oPUR/xDQbH9svcHcwci4nVJk4HhkjaKlafu70capclf\na9yIvmu70m5HSCLiDdJ2Z0MlnVZw+kKgHynRzUIAST0kjcj2bq64nsxtpOlSh0taPqohqRfwI9KD\n86u8e8wgzT/sAfww/wZZmR9kZR4o/ydgZmZmZnX0Z+Bd4DBJ2xWc+yFpmtNDEfFB3vFfk0YvzpW0\nfIG4pKHAN0lZ3q8tqCtX5icFu3YdCOwCvBgRj+SON6Lv2t5UNEIi6ZOkCGxrYBPSL6w7af7aROBp\n4IGIeKrK9p1K2mv555K+QOr07wDsTtpi97y8a4dk5yex8pZmbamHiJgr6UTgVuBhSTcBM4Avk4bC\nbo2IWwvu8S3gbtIDuhdpUXsf0gL3DUlbtP2kgp+BmZmZmZUh6+QflH27Tva+k6TfZ19Pi4izIU3B\nknQsaVOiRyX9hTQl67OkQOE9UlLD5SJijKSfAWcBz0m6jTRT5jDSDlanRUqSmO9nwJeArwJjJT0I\nbJR9P4/i64sb0XdtN8oOSLKI7gjg+6TO/xhSjo3xpA+8jLRTwkDSL/EcSR+QFnNfHStnumxVRLwh\naVtSNLgvqXM/BbgMuDAiCrc2i+xVbT1ExB1Z1sxzga8AvUlbwJ0F/KLI9Q9m0fXZpKGxb5KSIb4B\n/Bi4JPIyenYEBx98cIe6R6V1taVcude2dl215zsKP0OVX+tnKGnU56jVffwMtT9+hiq/toM+Q1sD\nR+d9H6T1Extn308i9dXSyYgHJG1Pms3yBdIf2d8DrgJ+FBHvFd4gIr4j6TlSX+9EUh/4KVJf794i\n1y+StCdwDikz/JnAHOAvwPkRMb5Imbr3XdsTRazUf1/5Imlj4I/AZODnwLiIWNZKGZESzpwObAUc\nFRHPV93iLkRSlPP7sa7hlVdeYcSIEUyYMKHZc26tg/IzZNXyM2S10NbnSBIR4e1EO7FWR0gkbU2a\nanRsRLxWbsVZT3occHQW0Fwl6X8i4uFKG2tmZmZmZp1LOYvaDwIOaEswUigiJgIHAHtIarcL6c3M\nzMzMrLFaHSGJiPNrcaNsK9yRtajLzMzMzMw6h4pHKySdUuTY+iUSxZhZlQYOHMjIkSMZOHBgs5ti\nHZSfIauWnyGrBT9HVqisRe0AkjYA3o+IRdn390TEfgXXDADOABZExE9r3diuxovazczMrKvzovbO\nry0ByTvAGsBYYDSwB7BnLkApuHZbYLeIuLSGbe1yHJCYmZlZV+eApPNry5StXUk5SKYDJ5FyjcyW\nNFrSRZL2lNQXICKeBDx1y8zMzMzMWlT2CMlKBaUngGtIIyW7kwKQxcAzpKQz60XErjVpZRflERIz\nMzPr6jxC0vmVnam9iJkRcTVwNYCkLYDPk0ZOupOyV5qZmZmZmZVUzQjJoRFxS43bY3k8QmJmZmZd\nnUdIOr+KAxKrPwckZmZm1tU5IOn8WlzULqmHpGNrdTNJZ9SqLjMzMzMz6/haDEiy7OrzJF0uqXel\nN5G0uqTbgPGV1mFmZmZmZp1Pq4vaI+I2STOA0ZKuB/4YETPLqVzSusCZwBeBEyNibFWtNTMzMzOz\nTqWsXbYi4iFJe5LykLwmaSLwOPA8MCt7dQPWzF5bALuRtgK+EtgxIubXvvlmZmZmZtaRtXlRe5b8\ncH9gL+AzwFBgABCkwGQi8A/g/4DRxTK5W3m8qN3MzMy6Oi9q7/y8y1Y75oDEzMzMujoHJJ1fi4va\nWyKpp6QDJK1XcPyLkvpU3zQzMzMzM+vsKg5IgHOBG4A7Co6/DPyyinrNzMzMzKyLKGtRewm9gC+R\n1o8sFxGTJP1e0rERcW01jTMzMzMzs86tmoCkd0SMLnYiIv4h6eAq6jYzMzMzsy6gmilbAyRt2cJ5\n765lZmZmZmYtqiYg+Rlwn6QjJRXb+WDNKuo2MzMzM7MuoKptfyUdClwHvAfcCTwFzAU+B6waEcfX\nopFdlbf9NTMzs67O2/52flXnIZH0GeAnwOeB3MNyH3BYRMyprnldmwMSMzMz6+ockHR+NUuMKGkQ\nMAz4ICIm1aTSLs4BiZmZmXV1Dkg6P2dqb8cckJiZmVlX54Ck82txUbukf5f0F0mHSOrVqEaZmZmZ\nmVnX0OoIiaQRwBGkJIgvAH8C/h4Ry+rfvK7NIyRmZmbW1XmEpPNr05QtSdsBRwK7A48Cf4qIMfVp\nmjkgMTMzs67OAUnnV9EaEkndSLtqHQFsDdwL3BARL9W2eV2bAxIzMzPr6hyQdH612Pa3F7A/8DVg\nA+AvwI0R8Vb1zevaHJCYmZlZV+eApPOr6S5bklYDDgYOB3oCNwO3RMSMmt2kC3FAYmZmZl2dA5LO\nr27b/kpamxSYHALMBG4Ebo+IBXW5YSfkgMTMzMy6OgcknV9D8pBI2oS03mTbiDiw7jfsJByQmJmZ\nWVfngKT5JH0S2Je0dnwTYADQHZgNTASeBh6IiKcqqb/FPCS1EhGvR8RFlQQjkoZIukbSO5I+lDRR\n0mWSVq93PZJ2knSPpOmSFkh6VtIZ2aL+wmsnSlrWyuvctn5+MzMzMyuPpIMlXSFptKTZWf/rujaU\n/11ev21YC9cdI2mspLmSZkkaJWn/Fq7vLekCSeMlLZT0vqSbJW3eQpm69l1bo+RISS8CjwF7Au8D\nfwN+CVwG3AG8A+wCPCBpgqRTJHVv071qvIbkE6TI6W8RMacG9Q0DxgCDgNuBCcD2pB2+xgM7R8TM\netQj6UDgNmAhaS3MDOAAYHPg1og4rOD6bwHFHhAB55KiyO0i4l/lfPasTo+QmJmZWZfWlhESSU8D\nWwHzgLdJ/bYbIuLoMsoeQOpgzwX6A5tFxBtFrvsp8G3gLVJfsSdpmcJA4LSIuKrg+p7AQ8BOwLjs\n6w2AQ4FFwB4RMa6gTN37rq38LDYG/ghMBn4OjGstB6EkAdsCp5N+B0dFxPNl3TAiKnqRpmDtAfTO\nO9Yd2BG4EDip0rrz6rsPWAqcWnD8UmAZcFU96gFWBT4g/UI/k3e8JylCXAocWua9987uMa6Czx9m\nZmZmXVnWHyq377QbsEne18uA68ooNwiYQkoAPirr6w0rct2OWZ0TgNXyjm8ITAMWABsWlPleVuam\nguMHZMefL3KfZvZdtwbuBzYt9+depI6NSWlBdi/n+mqmbH0TeBCYJelRSRcDXwCei4gfAp+uou5c\nZLgXMCkKIk1gJDAfOEpSnzrUcwjpwbwxIp7OHYyIRcB5pFGPU8r8KCcBAfymzOvNzMzMrAIR8UhE\nvF5B0d+S+mvfbOW6U7LrLo682UARMRm4EugFfL2gzMlZme8WtPUuUqLxLSTtljveDvquBwEHRMRr\nZV6/koiYSAq49ihnuljFAUlE7AxsAZxBGs45Gvg/YLak94GNKq07s0f2fn+Re88jRXt9gR3qUM8e\npAfnviL1jSZFvztJWqWlG0taC/gSadjwxlbaaWZmZmYNJulY4MvAN6L1pQC5fmWxPuK9pI7/5/Pq\n3oQ0PeuViHiznDI0se+a3eP8iPiotevKqGdJRIyMVqZ6QZWL2iNifET8JiKOjIgNgE2Bb5FW2x9a\nTd3ACNIP9pUS51/N3ofXoZ4R2ftKZSJiKenz9QBKLnbKHA+sAvwpIua3cq2ZmZm1U9k0FOtkJG0E\nXA78MSLubuXavsAQYF5EvF/kkjb1KVsp06y+a0mSVhphkbR+luqjKjXdZSsi3siGlo4nDU9VY0D2\nPrvE+dzx1nbbqqSeWt37BNID9dtWrjMzM7N26o5n3mHTc+/lkvvGN7spVkPZIuw/kBaxn1FGkUb1\nKZvZd11O0gbZgvycA4pcNhc4SdJ3yq23mB7VFC4lIl6UdFw96u4oJO1FWtDzZLRhZ61Cr7xSKjhe\nYeDAgQwcOLDSW5iZmVkJH8z9kPNuf4Gly4IrR73Op9dfnb0/uU6zm9UpTJ8+nenTpzezCd8GdgX2\ni4hSHfmu7AlgDUljSdO++kvqma1LASD7uV0oaVtJ/xkRl1Zyo4oDEkmTgdeAR7LXmIL5ZtX2kHMP\nxoAS53PHZ9Whnlrc+xuk0ZGrW2lfi0aMGNHqNSNHjuT888+v5jZmZmZWxIV3vcTcD5cs//7s255j\nyyEDWG+jgnrnAAAgAElEQVT1FvfUsTL84he/4IILLmjKvSVtBvwI+H1EFFt3UUyj+pTN6rsW2pW0\ntmYX0iZNa5HWio9jRf//8YhYEBFPSqp4uUY1IySnkPZcPoG04v8jSc8Db5AW77zaQtlyTCAt8im1\nRmSz7L21IYRK6pkAbJOVeTr/4izRy8bAEtJnXYmkwaRfYNWL2SdMmNDqNR4dMTMzq71REz7g7uem\nAHDaHpty3ZhJzF64mDNuepobT9yBHt0bkl+60zr99NM54ogjWr2unD/OVmAL0o5Yx5WY1RPAa2lW\nFwdFxJ0RsUDSO8B6ktYuso6kVJ8S2t4PbWjftZhIOVguz15IegK4hrSA/gRSnr3Fkp4BJgHrlVt3\noYoDkoj4GylTI5I2zRq3e/ZaF9g2iz4fIu3n/FgbV+yPyt73LjwhqT+wM2nHgCfqUM9DwJHAvqTE\nMvl2I+1s8HBELC5xz+NIi9mvqXYx+/Dhra3ZNzMzs1pbvHQZP7j9BQC22WgNvr3XcLYcMoCTr3+K\ncZNm8sgrU/nCJ6pey9ulNXnK+STgdyXOfQlYG7gFmJNdm/MQ8B+kPuIfCsrtl70/mDsQEa9ns4qG\nS9qoyE5b+5GCn4fyjjWj71qOmRFxNdnsH0lbkHYH24WUi7C1LZNLqkloHxGvRcRvs922hpAyQp5O\n2g74eOAB4Lk21vkGabuzoZJOKzh9IdCPlOhmIYCkHpJGZHs3V1xP5jZScpvDJW2TOyipF2l4L4Bf\ntdD846nBdC0zMzNrjpenzOHtmalrcOGBn6RbN7Hvluvw6fXTzJdHX53WzOZZlSLi2Yj4RrEXK0Y1\nvp8dy+/D/po0enGupOULxCUNJXXIPwSuLbhdrsxPsoX0uTIHkjrzL0bEI3lta0bftRy/z/8mIl6K\niF9GxOERcUjBz6lN6rWo/RXSMFIugtqclMGyrU4l7bX8c0lfAF4m7bm8OzCelOglZ0h2fhIrb2nW\nlnqIiLmSTgRuBR6WdBMwgzQNazhwa0TcWqzBWf2bkhazP13sGjMzM2vfnns7Tckf2K8nW6y72vLj\nu2w2iGffns2jr05tVtOsBVkn/6Ds29zuAztJynWmp0XE2ZXWHxFjJP0MOAt4TtJtpGzoh5F2sDot\nS5KY72ekUZevAmMlPUjK1/dV0vT+YlPGGtZ3bcNnv6Wa8i1pyOTHLF/JSsldyij3BrAtKdLcnrQb\nwsbAZcCORZLXRPaqth4i4g7SENcjwFeA04BFpAfway00+0Q8OmJmZtahPZ8FJJ9afwB5f9Rml00H\nA/D61PlMmb2waFlrqq1JybqPJk15ClKfL3fsK2XWUzLxTER8h5SNfQqp33cU8DzwpYhYaRQi25Vq\nT+Ai0uLyM4EvAH8Bto+IJ4uUaWTfdblsxtGx5VxbZn3lbKeMyk30I2lD4L9JP9A+wFjg3IgYm3fN\nUaShp/7AqxFxftuabfkkhRMxmZmZNd6+l49m/Htz+dbnN+Xbe69YVP3RkqVsfcHfWbh4KT/56lYc\nuu0GTWxl1yCJiFDrV1otSPoqqT9/TkR8WGEdq5PW6Py2nF3MyhohkbQeMI60q1YP0vDS54F/SFq+\nX1tE/DEiTsrq/UHbm29mZmbWXAsXLeXVD+YB8Kn1P55HrleP7nx22JoA/MPrSKwTiojbgDuB0ZK+\nJWmNcstKWlfS/5DyllxS7pbK5a4huZA0X22fiHgmd0PSwvWzJPUtmI+3pEgdZmZmZu3eS1PmsHRZ\nmqGw1forp3XYZdNBPDxhKo+9No1ly4Ju3fzHe+tcIuIhSXsC3ydtfzwReJw0NW1W9uoGrJm9tiBN\nF1sbuJI0razsnWbLDUi2B3aIiAV5DZ0CfF/S74AbJI2MiOZktzEzMzOrkeffTrnj1lq1F2uv1nul\n87tuNhh4menzFzH+vblssd5qK11j1tFFxBzgHEkXAvsDe5ESfw8lrYUJUmAyEfgHaW3M6PxM7uUq\nNyB5Oz8YKWjsG5J2A34n6dyIuLitjTAzMzNrL557Jy1oLzY6AjB87f4MXrUXU+d+xD9em+qAxDq1\nLAa4NXvVRbm7bC2UtCqApEGSNso/GRGLIuJooIek82vcRjMzM7OGWb7D1pDVi56XxC6bDgKcj8Ss\nFsoNSP4HuDVLOvgU8LKktQovyqZsvQrsU7smmpmZmTXG/I+W8NrUtKC91AgJwA7Zwvbn3p6Nd8Q0\nq05ZAUlE/BP4HnAFaeHKa8DcEtfeQEr0stL+yGZmZmbt2YvvziEXX2w5pHRAssW66dzshYt5d3ZF\nO6OaWabsxIgR8XREfCkiVo2IrQrS1RdeOzoiBtWmiWZmZmaN8Vy2oH29Ab0ZvGqvktdttnZ/ume7\na7387pyGtM2sPZJ0lqSLJa2WfX9sthtv2RqSqd3MzMysI3gxCy5aGh0B6L1KdzYZ3A+Al6c4ILEu\nbQZwMXAIQERcS9qVq2wOSMzMzMwyk2ekTUU3Wat/q9d+Yt20u9bL7zkgsS5tQLYTV/7cxZIzqYpx\nQGJmZmaWeWdm6kcNWb1Pq9fmApKXPGXLurYeks7m43HFwLZU4IDEzMzMDFi0ZBnvz01/5B2yRusB\nyRZZQPLmjAXM/2hJXdtm1khZgFGuy4DNgN9I+qek0YDacj8HJGZmZmbAe7M/XL7D1vptGCGJgPHv\nFd181KyjOq7cCyP5BvAZ4KfAtyLi5225mQMSMzMzM+DtWQuWf13OCMngVXsxqH/aieslL2y3zmWE\npB9IGlxugYiYEBG3RMQzbb1Zj7YWMDMzM+uM3s7Wj6zZryd9e5bXRdpivdUY/cpU77Rlnc1HpJyD\n35W0DjALeBwYHRFv1/pmDkjMzMzMaNuC9pxPrLuqAxLrjMZExOW5byStCuwCfFPSRsA84AlSgPJa\ntTereUAi6WhgCfC3iJhd6/rNzMzM6uGdWW0PSHIL28dPmcvSZbE8WaJZB/exPCIRMRe4N3shqQ+w\nE3CJpO2BR4GHIuLqSm5WjzUk1wJ/BN6U9F+S1qrDPczMzMxqavkISRnrR3JyC9sXLl7Km9Pn16Vd\nZo0WESXziEhaBfh34HzgQGBdYCuqGOiox5St60hbfX0KOBs4A+hbh/uYmZmZ1UwlIyTDBvWjZ49u\nLFqyjJenzGXY4NYTKpp1RJKGAieRduAaBCwF/gxcFRGjqqm75gFJRByb+1rSAGDXWt/DzMzMrJaW\nLQumzE4ByfptGCHp0b0bmwzuz8tT5vDaB/Pq1TyzppAk0vStU4B9SLOr3gUuBK6OiCm1uE9dF7Vn\na0juruc9zMzMzKr1wdyPWLw0JSFpy5QtgE0G9+PlKXN4Y5oDEuscsiUXJwDfADYgzX4aBVwF3B4R\nS2t5v6oCEkn9gOFA/4h4tDZNMjMzM2ust2euyEGy/uptm2mem6b1+lQHJNZpvAn0BOYAvyRNy5pQ\nr5tVtKhd0vqS/gzMBJ4kRUy5c7tIeknS7rVpopmZmVl95daP9O/Vg9X6tO3vtZsM7gfAxKnziVyq\nd7OOrRfwBnAU8N16BiNQQUAiaV1gLGlV/d3AGNIwTs5YYC3gsFo00MzMzKze3s7LQZKmzZdvk2yE\nZP6ipbw/56Oat82sCcYABwNDgd9Juk3SxZL2zmZIrUTScZXerJIpWyNJAcdeETFK0khgx9zJiFgs\n6VFg50obZWZmZtZIy3fYauP6EYCNB63on70+dR7rDOhds3aZNclbEfEc8BxpyhaShgOfAw6X1B+Y\nBDwCPBoRc4DvAddUcrNKpmztB9zZyvZek4H1KmmQmZmZWaPlcpC0ZYetnH69erBuFoS84XUk1glE\nxOFFjr0SEb+LiOMi4lBSoLIG8BNJzwLDKr1fJQHJ2sCrrVyzGCg6nGNmZmbW3lSSgyTfsGwdyetT\nnRzRuoaImBwR10fEycC+QMlkiq2pJCCZQdr+qyXDgfcqqNvMzMysoSKioizt+YYN8k5b1nVl+Uie\nqrR8JQHJY8CXJa1T7KSkzUhRUlUZG83MzMwaYeaCxSxcnNIqVDpCkttp6w2PkFjX9bVKC1YSkFwC\n9AYekfRFoC+knCTZ93cBy4BLK22UmZmZWaPkRkegihGSbKetd2YtZOGimuaMM+sQIuLdSsu2eZet\niBgr6STgV3w8C/uc7H0JcFxEvFhpo8zMzMwaZeq8DwHo3k0M6terojo2Wav/8q8nTpvPFuutVpO2\nmXUFFSVGjIhrgC2BK4B/Aq8D/yKlk98qIm6oWQvNzMzM6mja3EUArNmvJ926tS0HSc66q/Wm9yqp\nW+V1JGZtU0keEgAi4lXgrBq2xczMzKzhps5LyQwH9a9sdASgWzex8aD+vDxljteRmLVRJZnaj5a0\nVSvXfErS0ZU3y8zMzKwxps5NAcngVSsPSCBvYfs0j5CYtUUlU7auBQ5q5ZovA7+voG4zMzOzhpq2\nfISkZ1X15Ba2e8qWWdtUtIakDN2BqEVFkoZIukbSO5I+lDRR0mWSVq93PZJ2knSPpOmSFkh6VtIZ\nkkr+3CStJunC7Nq5kmZLel7SryV1b0ubzczMrP5yAcngKqZswYoRkolT5xNRk26QtZGkgyVdIWl0\n1gdbJum6EtduKum7kh6UNFnSR5Lek3S7pN1buc8xksZmfb1ZkkZJ2r+F63tLukDSeEkLJb0v6WZJ\nm7dQpiF91/ag4jUkrRgOzKy2EknDgDHAIOB2YAKwPXAGsI+knSOi1ftUUo+kA4HbSFknbyYlhDwA\nuAzYCTisyH02B+4H1gUeAO4BVgGGAocA3wYWtOVnYGZmZvWVm7JVzRoSgI0GpoBk/qKlTJu3qOop\nYFaR84CtgHnA20DJDj9wEXAo8BLwN1JfbwRpps+XJX0rIn5ZWEjST0l9ureAq4GewOHAXZJOi4ir\nCq7vSeoX7gSMAy4nJRk/FNhf0h4RMa6gTEP6ru1FWQGJpGsKDh0kaWiRS7sDGwK7kn6x1foV6Rdx\nev4vV9KlpAX1FwOn1roeSasCvyVtYbxbRDydHf8BKeHjVyUdGhG35JXpA9wJ9AN2KvJgdYuIZW34\n7GZmZtYA0+alXbYGrVrdlK2hA/su/3ryjPkOSJrjTODtiHhd0m60nKj7XuC/I+LZ/IOSdiUFEJdI\nujUi3s87tyMpGHkV2C4i5mTHLyHtOPtTSXdHxOS8Kv+TFBDcEhGH59V1M3AHcA3wqYK21b3vWivZ\nuvElwN8iYnYldZQ7fHNs3iuArQuO5V5HAZ8jbQVc1Q5cWWS4FzCpMNIERgLzgaOyQKDW9RxCeghu\nzP1CASJiESnyFnBKQV2nAJsA5xQGI1lZByNmZmbtzKIly5i9cDEAg/v3rqqu1fv2ZECfVQCYNM0T\nIpohIh6JiNfLvPa6wmAkO/4o8DBp5GOngtOnkPrCF+eCkazMZOBKoBfw9YIyJ2dlvltwn7uAR4Et\nsuAJaGjftVauBf4IvCnpvySt1dYKyg1INs5ew0gf6PK8Y/mvDYHVImKniHijrY0psEf2fn/hiYiY\nBzxGyhK/Qx3q2YP04NxXpL7RpGlXO0laJe/4EVmZmyUNlXSypHMkHSFpzVbaaGZmZk0wff5Hy7+u\ndoQEYKNslOTN6d76t4NbnL0vKTie61cW6yPeS+onfz53QNImpOlZr0TEm+WUoXF911q5DrgeeAM4\nG5jU1grKCkgi4s3sNQm4ALg971j+6+2IqNV/gSNIP9hXSpx/NXsfXod6RmTvK5WJiKXARNJ0t2EA\nknqQ5itOBb6RlbuSNJx2PSliLIyWzczMrMly60eg+jUksGIdyZszPELSUUnaCPgCqRM/Ou94X2AI\nMC9/GleeNvUpWylT175rLUXEsRFxTET8GzCQtDamTdq84j4iLoiI0a1fWbUB2XupuWi5463ttlVJ\nPW0tsybplzwI+DEpaNsg+/540kP129Z2bDAzM7PGyu2w1U2wRt8ajJCsmUZIJk13QNIRZQvQbyBN\n1xpZsCaiEX3KRpapuYiYHRF3t7VcxbtsSVqXFD0OIc2XK9KmuKjS+juYbnnvv46Ii/PO/V5SP+AK\n0tzBh9tS8SuvlAqOVxg4cCADBw5sS7VmZmYGTJubFrQP7N+L7t1UdX25KVuTPWWrVdOnT2f69OnN\nbsZy2da41wM7AjdFxM+a3KQuo6KARNIFwDkF5cWK3CO5r6sJSHKR3IAS53PHZ9WhnraWyY9Gby9y\n/V9JAcn2pZtZ3IgRI1q9ZuTIkZx//vltrdrMzKzLmzqvNlv+5gwdlKZszVywmNkLFjOgbz2m7HcO\nv/jFL7jgggua3QxgeTByA/BV4CbSRk2FGtGnbGSZkiR9rvBYPWdItTkgkXQk8APgIdI6iT+TVtff\nD+xOmqJ0K/CbKts2gRTYlFojsln23toQQiX1TAC2yco8nX9xltxwY9IipzcAImKhpLeA9Sn+i87t\nE93ijmBFGz9hQqvXeHTEzMysMitykFQ/XQtWTNkCeHPGfLbqW9cZMh3a6aefzhFHHNHqdeX8cbYa\n2VrgP5GCkeuBY6JIZsuIWCDpHWA9SWsXWUdSqk8Jbe+H1rXvWoaHWXmgoW4JvisZITmFlGhm34hY\nIgnStmQ3ATdJ+ispB8mNVbYtt2/03oUnJPUHdiYtNnqiDvU8BBwJ7EtKLJNvN9LOBg9HxOK84w+Q\ntj7ekpT0Jl9ub+mJrbR1JcOHt7Zm38zMzCpVqyztOYNX7UWfVbqzcPFS3py+gK3Wd0BSSnuYcp7t\nOnUrKYHgtRFxXCtFHgL+g9RH/EPBuf2y9wdzB7J8KJOB4ZI2KrLT1n6kzv5Decca1XdtyXGsCEjq\nrpI08p8C7omI/G3QlkdMEXEfacuxs6tpWLZt8P3AUEmnFZy+kJSA8LqIWAgpupU0Itu7ueJ6MrcB\n04DDJW2TOyipF/Aj0i/oVwV1XZkdP0fSoIIyF2fn/lTu5zczM7P6Wx6Q1CiJoSRv/dtBZAvYbycF\nI78rIxgB+DVpxOBcScujzSxh+DeBD0kzh4qV+Ymyv+RnZQ4EdgFejIhHcscb2HctKSKujYg/5L/K\nLVuJSkZIVgHyVyAtZOX5ai+QksBU61TSXss/l/QF4GXSnsu7A+NJiV5yhmTnJ7HylmZtqYeImCvp\nRFLE/LCkm4AZwJdJQ2G3RsStBWX+la2tOR94QdKdpIdyH2DT7P6XVPZjMDMzs3pYMWWrdlnVNxrY\nl/HvzfVOW02QdfIPyr5dJ3vfSdLvs6+nRUTuj+a/Ab5IStswRdLIIlU+XBAsjJH0M1IC8Ock3Uba\nkesw0g5WpxVkaQf4GfAl0pSwsZIeBDbKvp9HGo0oVPe+a0sk/bDgUF03q6okIJkCrJv3/WRSDo58\n67FyIpk2i4g3JG1Ligb3JT00U4DLgAuLpKcPigwvVVAPEXFHljXzXOArQG/gNdID+IsS7b1I0vPA\nmaQ9mHsCr2d1XNqGYTIzMzNrgGnz0i5btUiKmDM0y0Uy2QFJM2wNHJ33fbAigTekP1znApKh2flB\npPXRxQTwyMcORHxH0nOkEZETgWXAU8AlEXHvShVELJK0J2lDqK+R+olzgL8A50fE+CJlGtJ3bcH5\nhdVT3WZVLVKRNTstF0iR4IYRsX32/ZWkZIDHkX6wu5OGjR6LiD1r2touRlKxNVVmZmZWA4uWLGP4\nean/+Mfjt2fXzQbXpN4bxr7JuX99gbVW7cU/z3VXqFqSiIjq92S2smXJIT+mRKb5mqhkDcndwJaS\ncpHmf5O2GruWFO3dSZond17R0mZmZmbtwPT5tc3SnpMbIflg7kcsWFT1hBGzhouINwtf9bxfJZna\nr42IvhExMfv+LWA70kKZ+4Grge0iorXdr8zMzMyaJrd+BGq3qB1WJEcEmDzD07as85DUT9JnJO1a\ny3orztSeLwtOCncBMDMzM2u3cjtsdROs0bd2a0jWHdCHVbqLxUuDSdMWsPk6q9WsbrNmkLQ+8HPS\njmTdSWtKemTndiENSJwaEQ9XUn+bR0gkfU7S1pXczMzMzKy9mDY3LWhfs18vuner3RKF7t3EBlmC\nxMkzvPWvdWyS1gXGAgeSlm6MIS3PyBkLrEXaaawilawhGUVaxG5mZmbWYU2dV9ss7flyGdu99a91\nAiNJAcdeEfEV4O/5J7NdZB8lJWysSCUByTRS7hEzMzOzDiu3hqSW60dyNsoWtjs5onUC+wF3RsSo\nFq6ZTEr7UZFKApKHgZ0qvaGZmZlZe7A8S3sNd9jKGbo8W7tHSKzDWxt4tZVrFpMyyFekkoDkPGCE\npIskrVLpjc3MzMyaKReQDKrjCMm7sxayaMmymtdv1kAzgA1auWY48F6lN6hkl63vAS8A3weOl/Rs\n1oDCDH4REcdX2jAzMzOzepo5fzEAa/arwxqSbIRkWcDbMxcwbHD/mt/DrEEeA74saZ2IWCnokLQZ\nKZv89ZXeoJKA5Ni8r9fJXsUE4IDEzMzM2qUZC9IuW2v0rf2Ej/XX6Es3pYDkzekOSKxDu4S0w9Yj\nks4E+kLKSQJ8DrgMWAZcWukNKglINm79EjMzM7P2KyKYtTwgqf0ISc8e3Vhv9T68PXMhk7yw3Tqw\niBgr6SRSEvS7807Nyd6XAMdFxIuV3qPNAUm9U8ebmZmZ1dv8RUtZvDTNNl+jDlO2AIYO7MfbMxd6\nYbt1eBFxjaRHgVOBHYCBwGzgCeCXETGhmvprkqndzMzMrCOZOX/R8q/rMUICsOHAvvCat/61ziEi\nXgXOqkfdleyyZWZmZtahzVyQH5DUZ9NQb/1rVh4HJGZmZtblzMgbIRnQpz4BSW7r37dmLmDpssLN\nSM06BknXSPqFpDVbuOZASddUeg8HJGZmZtblzFqQtvwd0GcVenSvT3cot/Xv4qXBu7MW1uUeZg1w\nLGntyOOShpW4ZmvgmEpv4IDEzMzMupyZddzyN2fDNfsu/3ryDE/bsg7taWAYMEbSjrWu3AGJmZmZ\ndTm5Re312mELoG/PHqyVZYH31r/Wwd0J7Af0Bh6UdGgtK68qIJHUT9JnJO1aqwaZmZmZ1dvMbMpW\nvXbYyhmarSPxwnbr6CLiAWBnYCrwJ0nfrVXdFQUkktaX9GdgJvAkMCrv3C6SXpK0e22aaGZmZlZb\nM+qYFDHfRst32vIIiXV8EfEC8FngWeDHkq6W1L3aetsckEhaFxhLSiF/NzAGUN4lY4G1gMOqbZyZ\nmZlZPcxqwBoSyA9IPEJinUNEvAfsCtwDnAD8DRhQTZ2VjJCMJAUce0XEV4C/FzRyMfAoaUjHzMzM\nrN2ZMT+bslXHNSSwYuvfSdPnE+Gtf61ziIgFpMGJK4G9gW9VU18lAcl+wJ0RMaqFayYD61XWJDMz\nM7P6mtWgKVu5NSQfLl7G1Lkf1fVeZnXyJjCr8GBELIuI04Fv8/HZUm3Wo4IyawOvtnLNYqBfBXWb\nmZmZ1V0jtv0F2HDgiq1/J01fwFqr9a7r/cxqLSI2buX85ZJuJO3AVZFKRkhmABu0cs1w4L0K6jYz\nMzOrq4WLlvLh4mVA/adsDeizCmtm95g0zQvbrXOKiPcj4s1Ky1cyQvIY8GVJ62SLWj5G0mbAvsD1\nlTbKzMzMrF5yoyNQ/ylbkBa2z5i/yLlIrEOQdA0QwPcj4v3s+3JERBxfyT0rCUguIS1ieUTSmUBf\nSDlJgM8BlwHLgEsraZCZmZlZPc2YnxeQ9KvvlC1I60ienjzLO21ZR3EsKSD5H+D97PtyBNCYgCQi\nxko6CfgVadvfnDnZ+xLguIh4sZIGmZmZmdXTrCwpIsDqfRozQgLO1m4dRm7NyDsF39dNJSMkRMQ1\nkh4FTgV2AAYCs4EngF9GxITaNdHMzMysdnJTtvr36kHPHhXliG6T/GztEYFU1YZEZnVVuBakmrUh\n5aooIAGIiFeBs2rYFjMzM7O6W77DVgOmawEMHZQCknkfLWH6/EUM6t+rIfc16yjq/2cBMzMzs3Zk\nZi4pYgMWtAMMzdv6901P27JOQtJASf8uaR9J3aupq80BiaRDJD0kqWjiQ0lDJD0o6SvVNMzMzMys\nHmY2KClizup9ezKgTxqNmTTNC9utY5F0iqSxktbMO7YNMB64DbgHeDzb4KoilYyQnACsHhHvFjsZ\nEe8AA7LrzMzMzNqVRiVFzJcbJfEIiXVAh5G29J2Rd+wSYA3g96SAZDvg5EpvUElA8ingyVauGQds\nVUHdZmZmZnU1M9tlq95JEfNtlC1sn+Stf63j2Qx4LveNpEHAbsD/RsQJEXEAqe9/RKU3qCQgWRP4\noJVrpgODKqjbzMzMrK5mzm/slC1YMULirX+tAxrIx/v+O2fvf8079iiwUaU3qCQgmUaKlFqyGTCr\ngrpXkq1JuUbSO5I+lDRR0mWSVq93PZJ2knSPpOmSFkh6VtIZklb6uUk6RtKyFl7fqOTzm5mZWW01\nY8pWboRk4rT5RETD7tvVSDpY0hWSRkuanfXBrmulTNn9vbwyx2TrKuZKmiVplKT9W7i+t6QLJI2X\ntFDS+5JulrR5C2Xq2ndtgxl8fKBhN1IS9MfzjgXQu9IbVLLt72PAlyVtHhHjC09K+gQpk/tdlTYq\nr65hwBjSD+F2YAKwPXAGsI+knSNiZj3qkXQgaaHOQuBm0i/jAFIm+p1I8+mKuR14psjx1qa5mZmZ\nWQMsHyFp4JStoYPSCMncD5cwa8Hiht67izmPtGxgHvA2ULLDD5X19yT9FPg28BZwNdATOBy4S9Jp\nEXFVwfU9gQey+sYBlwMbAIcC+0vaIyLGFZRpZN+1NS8DB0g6F1iafdZxETEn75qhwHsV1g8R0aYX\nadHKYtJIybeA4UC/7P2M7Phi4LNtrbvIve7LPvipBcf/P3t3Hh9ldfZ//PMlhD1sYUcgiGwWd6kL\nWhS1Vq1arVtpbV3rUm1rax/sivap/fUpVWtp7e6jtE+lrlWx1h3cESsiUPZdNiHseyDX749zD4xh\nwmTuzGQmyfV+vfKazL2c+0yI7blyznWduwiR2X25aAcoIUxNbQeOSjrejBCQ7QEuqXLPV6LjX67t\n546NjGIAACAASURBVE5q05xzzjmXPTsqdlufUROsz6gJ9vq8NXX23LWbd+x97ntL1tXZcxuCaDxU\n07HTcKBf0veVwLhqro0z3jshanMO0DbpeO9oDLwN6F3lnu9G94yvcvzc6Pj0FH3L+dg1g5/pedEz\ntwObo7a+VOWaZcBjcdo3s8yXbFmI4G4E2hIirlnApuj17uj4DWY2OdO2k0WR4RnAYqsSaQKjga3A\n5ZJa5qCdiwkR6UNmNjVx0Mx2ESJvATdk/qmcc845l08booR2qNscko6tm1HSPCxMWeKJ7TljZpPM\nbEENL48z3ruBsDzpTkuaITCzpcBvgObAlVXuuT66Z1SVvj5NyL04VNLwxPFCG7ua2VPRZ5hJCMRu\nNbO/JvX3FKANIYiKJdZ6MjP7I3AEcB/wb2BB9Pob4Agz+1PcDiU5NXp9PsXztxCivVbA8Tlo51TC\nL06qH+yrhOj3RElVF58KOCpaqzdK0pck9UzTP+ecc87VkUT+CNTdTu0AkujTyRPbC0yc8V5iXJnq\nnmcJY8ERiQOS+hGWZ801syU1uYe6HbvWiJn9wcyOjb7uqXJuopl1MLM/xGkbarFTu5nNMrObzeyT\nZjYgev26mc2K22YVAwk/2LnVnJ8XvQ7IQTsDo9f97jGzPcAiQv7NwSna+zphpuinwDhgsaTfSmqe\npp/OOeecy7HELu1QtzMksC+x3WdICkZG4z1JrYCewBYzW52ivYzGlGnuqcuxa97VJuM+19pFrxur\nOZ84nq7aVpx24tyzCLiJ8AvRGuhBmD5bBFwH/DlNP51zzjmXY4kZkpbFRbQoLqrTZ3vp34KT6Xiv\nrsaUdXVPwYhTZculYGavEqbEEnYAj0maDEwDviDpf8xseibtzp1bXXC8T2lpKaWlpZk065xzzjVK\n+Sj5m+AzJB9XXl5OeXl5vrvhCkCsgCRKvPkOofxYB1LPtJiZ1SbgSURy7ao5nziebr+TOO1k69mY\n2YeS/knYvfJTQEYBycCBA9NeM3r0aG6//fZMmnXOOecapXyU/E0oiwKSdVt3sXF7Be1a1n1QVEjG\njh3LHXfckc8uZDreq6sxZV7HrvmQccAQbfryD6AIWErItt+d5X4RtSuqzxFJbM6YbgohTjtzgGOi\ne6YmXyypCOhL+MwL0zw7YU302rqG1+/ryJw5aa/x2RHnnHOuZtZHVbbqOn8E9i3ZAlhSvpXDDyrI\n1TN15uabb2bkyJFpr6vJH2djymi8Z2bbJC0HekjqmiKPpLoxJWQ+Ds332LVOxZnBuJ2wz8g5ZrZf\n9n8WvRK9frrqCUltCNvWbwPezkE7LwNfBD5D2Fgm2XBCZYOJZlZBzRwXvWb8SzBgQLqcfeecc87V\n1N4lW3mYIelc0pxWzYrYtmsPi8u3NfqApACWnMcZ770MfCm658Eq95wdvb6UOGBmCyQtBQZI6pOi\n0tbZhAT2l5OOFcLYtU7FSWofAvw9x8EIZraQUO6sTNJNVU7/mDDbMM7MtgNIaippYFS7OXY7kUcJ\nm9tcJumYxMGoUtZPCL84v01uKPm6pGOS9F3CJjprgH/V6MM755xzLif2LtnKQw6JpH15JGs9sb0A\nZDzeA35HmL34vqT2SfeUAV8j5BA/UM09P5ekpHvOB04CZprZpMTxuhq7FpI4MyRbCFvR14UbCbWW\n75V0GmHzxeOBU4DZhI1eEnpG5xezf0mzTNrBzDZLuhZ4BJgoaTzhM59HmAp7xMweqfKMKZJmEBLY\nlxPW6g0jBHBbgS9GtaOdc845lyeJJVvt87BkC8KyrVkrN7HYE9tzIhrkfy562y16PVHS/0bfrzWz\n70C88Z6ZvSXpbuAW4ANJjxJ2Q7+UUMHqpmiTxGR3A58FLgImS3oJ6BO93wJcleKj1MXYtWDECUhe\nIvzFP+fMbKGkYwnR4GeAs4CVhB3if2xmVUubWfRV23Ywsyej5P3vAxcCLYD5hF/AsSm6O4aQ5H8q\n0BGoJOTYjAXuMbPFGX1455xzzmVdYslWxzzMkEBypS2fIcmRI4EvJ703Qv5E3+j9YkJhpnAy8/Ee\nZnarpA8IMyLXEsZ8/wbGmNmzKa7fJel04DbgC8A3gU3A48DtZjY7xT11MXatsVwXtJLZfuP3dB3q\nA7xD+GB3WqYNuBqT5D9e55xzLosOv/05Nu3Yzb2XHcn5R/as8+ePf2cptz0+nU5tmvPuD06v8+fX\nR5IwM6W/0uVCioJWy6imoJWZnZrqeDpxopjRwEzgDuAqSe+TuoSYmdnVcTrlnHPOOZdtu/dUsmlH\nGEflo8oW7JshWbtlJ1t27qZNc98SzhW828lxQas4/xVckfR9WfSVigEekDjnnHOuIGzYvq/AUL4C\nkrJOHy/9+4ke1W0b4VzBGAKMz2VBqzgBSd/0lzjnnHPOFZYNUf4IQIfW+ckh6VrSguZNm7BzdyWL\n127zgMTVBzkvaJVxQJKifrJzzjnnXMFbtzX/MyRNmoiy0tbMWb2ZxZ7Y7uqHnBe0irMPyV6SWks6\nStLJ2eqQc84551wuJCpsNStqQqtmRXnrR59ox3avtOXqiVFAP0k/SN5HJZvileaSDgLuBc4lZNxb\noi1JJwF/AG40s4nZ6aZzzjnnXO3s3RSxdTE5GlfVSFmnkNjue5G4eiLnBa0yDkgkdQcmA12Bp4Au\nfHwaZ3J07FJgYpxOOeecc85lW2JTxHwt10rwGRJXz1yR9H0ZOShoFbfsbxfgDDN7RdJokgISM6uQ\n9Bphl3LnnHPOuYKQSGrPd0BSFpX+Xb1pJ9t27aZVMy/96wpazgtaxfkv4GzgKTN75QDXLAU8r8Q5\n55xzBWNd0pKtfErMkAAsXruNQ3u0zWNvnDuwuihoFSepvSswL801FUDrGG0755xzzuVEoSzZ6tGu\nJS2KwxBs4dotee2Lc5mSVCKpl6SsRdJxApJ1QK801wwAVsVo2znnnHMuJ9YXyJKtROlfgIVrPI/E\nFT5JTSXdJmk+IaF9MbBe0vzoeK3WHcYJSN4AzpPULdVJSf2BzwAHWtLlnHPOOVenEgFJ+1b5XbIF\n0K9zGwAWrvEZElfYJDUDngfuJCS0LwPeiV7LouMvRtfFEicgGQO0ACZJOgtoFXW2dfT+aaASuCtu\np5xzzjnnsm1DtGSrY+v8zpAAHNw5miFZ6zMkruB9CzgFeAYYbGZlZnaCmZUBAwlj/5Oj62KJs1P7\nZEnXAb8FJiSd2hS97gauMrOZcTvlnHPOOZdNlZVWMFW2YF9AsmjNVswsr/uiOJfGSGAG8Dkzq0w+\nYWYLJF0IvA98EfhZnAfE2qndzO4HhgC/IkzZLADeA+4DDjez/4vTrnPOOedcLmzaUUGlhe87FMIM\nSaewZGvzzt2s2bIzz71x7oAOAZ6tGowkRMefBfrFfUDsBBQzmwfcEvd+55xzzrm6kij5C9ChAHJI\n+nbeV4x04ZqtdClpkcfeOHdAu4A2aa5pTaiyG0usGRLnnHPOufokUfIXCmOGpG2LYjq1aQ54pS1X\n8D4ALpLUOdVJSZ2Ai4BpcR+QcUAi6WJJL0vqUc35npJeitaTOeecc87lXSJ/pGkTUdK8MHZG35vY\n7pW2XGH7NdAZeEfS1ZIOltRSUl9JVwKTo/O/jvuAOP9FXgO0N7MVqU6a2XJJ7aLrHo/bMeecc865\nbEks2WrfqrhgEsj7dW7NO4vWeaUtV9DM7GFJRwK3AX9IcYmAn5vZw3GfEScgOYyPV9dKZQpwboy2\nnXPOOeeybkOB7NKeLJHY7jMkrtCZ2fckPQVcDRwFtAM2AlOB+83srdq0Hycg6Qh8lOaacqBTjLad\nc84557JuXQGV/E1ILNlatn47u3ZX0qypp/a6wmVmbwNv56LtOL/5a4H+aa7pT9hW3jnnnHMu7/bu\nQdI6/xW2Eg6OdmvfU2ksXefLtlzjFWeG5A3gPEmDzGx21ZOSBgPnE3ZtdM4555zLu0QOSSHNkPTq\n0JLiIlGxx1iwZiuHdCnJd5ecQ9L9gAHfM7PV0fuaMDO7Os4z4wQkvwAuBF6X9GPgX8ByoCdwFvBD\noCi6zjnnnHMu7xJlf9sXUEDStKgJvTu2YsGarV761xWSKwgByf8Aq6P3NWGEHJOMZRyQmNkUSTcC\nvwHuib6S7QFuMLPJcTrknHPOOZdtiSVbHQtoyRaEZVshIPHEdlcw+kavy6u8z5lYhbjN7I+SXgdu\nBI4D2hNyRt4Gfmtms7LXReecc8652lm3tfBmSAD6dW7DC6xmgQckrkCY2ZIDvc+F2DsDRUHHzVns\ni3POOedc1pnZvhmSAgtI+ncJie3zPtqCmRXMHinOJUj6MvC+mX1wgGsOA44ys3FxnuH15ZxzzjnX\noG3euZvdlQYUVpUtgP5dQ0CyecduPtq8M8+9cS6lB4DPpbnmPOB/4z4gawGJpFJJF0g6U1JRttp1\nzjnnnKuNDdFyLSisKlsQlmwlzP/Il225equIkNQeS8YBiaQbJE2W1DHp2DHAbOBR4J/Am5Jax+2U\nc84551y2rI+Wa0HhBSStmzelZ/uWAMxbvTnPvXEutgHA+rg3x8khuZRQZ3hd0rExQAfCVE1X4Bzg\neuCuuB1zzjnnnMuGxC7tErRtWVhLtgAO6dKG5Ru2M89nSFyBSLH3yOcklaW4tAjoDZwMPBP3eXEC\nkv7JD5TUCRgO/MnMrouOTQZG4gGJc8455/IskdDevmUxRU0KL2m8f5c2TJq7xgMSV0iuSPregCOj\nr1QMmAzcEvdhcQKSUuCjpPfDotcnko69Rs03UXHOOeecy5lEyd9CW66VkEhs9xwSV0ASe48IWAj8\nErg3xXV7gPVmVqudPeMEJOuATknvhwOVwJtJxwxoUYt+Oeecc85lRWKGpEPrwgxIDolK/67buovy\nLTspbdM8zz1yjV3y3iOS7gBeyeV+JHGqbM0Czo2qarUHLgOmmNmmpGvKgFVZ6J9zzjnnXK0kkto7\ntCq8/BGAQzqX7P3eZ0lcoTGzO8zs1Vw+I05Aci/QHfgQWEZIYr+vyjXHA9Nq17VAUk9J90taLmmH\npEWS7omCoZy2I+lESf+UVC5pm6Rpkr4hKe3PTVIzSTMkVUpamklfnXPOOZc96wt8yVa7VsV0KQmz\nIp5HUnuSzpH0vKRl0fhtgaSHJR1fzfUZj/ckfSWqOrtZ0gZJr0g65wDXt5B0h6TZkrZLWi3p75IG\nHeCerIyB64OMl2yZ2VOSrge+Gh36PzP7a+K8pFOANsBzte2cpIOBtwhLxP4BzAE+CXwDOFPSMDNL\nW2IsTjuSzieUMd4O/J2wVO1c4B7gREK1sQP5f0AvalGT2TnnnHO1t77Al2xByCP5aPNOnyGpJUn/\nA3wHWEsY860FDiFs3Pd5SZeb2d+Srs94vCfpF8C3CH+Y/wPQjLBi6GlJN5nZfVWubwa8GLU3hZCP\n0Qu4BDhH0qlmNqXKPVkZA2eTpO7AaUBPINW6QjOz/47VuJkV7BchqNkD3Fjl+F2EvJX7ctEOUEJI\n3N8OHJV0vBnwRtTWJQd43inRNV+N2l8a8/Obc84552rnzHsmWZ9RE+w3r8zLd1eqNfrJGdZn1AQb\n+ce38t2VghONh2oybuoK7AZWAKVVziVynucnHct4vAecELUzB2ibdLw3IfjZBvSucs93o3vGVzl+\nbnR8eorPkpUxcLa+gDuAnVGfEl+VVb+P236tdmqX1FrSUZJOrk071bR9MHAGsNiqRJrAaGArcLmk\nljlo52JCRPqQmU1NHDSzXcAPCBUHbqjmeSXAA8ALZvaHA35I55xzzuXchm1hyVbHAl2yBdCvi1fa\nyoI+hHSEyWZWnnzCzCYBm4HOSYfjjPduIKx+udOS8qfNbCnwG8LMwZVV7rk+umdUlT49TahMe6ik\n4Ynj2RoDZ4ukLwI/jPp6EeHn8iBhi48/EgVbwIi4z4gVkEg6SNJjhB0Z3wVeSTp3kqT/REu3auPU\n6PX5qifMbAshcm1FyFfJdjunEn5xUi07e5UQ/Z4oKVV23FigHXB1mn4555xzLsfMbO/GiO0LOCDp\nHwUkqzftZOP2ijz3pt6aB+wCPimpNPmEpE8RZkReSDocZ7yXGFemuudZwmB978BcUj/C8qy5lrpK\n1X73kL0xcLbcQMgd/4yZJbb5WGxm483seuCzhOVnbeM+IOOAJFo/Nhk4H5hAWN+WvMvQZKAL6XMs\n0hlI+CWZW835edHrgBy0MzB63e8eM9sDLCLk3xycfE7SBcCXgVvMbHmafjnnnHMux7ZX7GHX7koA\nOhZyDkkUkADM/2hzHntSf1nIqfgvwtKt/0j6vaSfSnqYEEA8R5itSMhovCepFSF/YouZrU7RhYzG\nlGnuycYYOFsOA/5pZruTjhUlvjGzxM/2O3EfEGeGZDQh4DjDzC7k45EmZlZBmNIZluLeTLSLXjdW\ncz5xPF2lgTjtZHyPpC7A74FnzOyBNH1yzjnnXB1Yv23fbEOhlv0FKG3TnE5tQsA0e5UHJHGZ2a+A\nzxMCiWsIy6Q+DywFHjSztUmXZzreq5MxZcx7cqkYSF4Ct519fUyYARwR9wFxNkY8G3jKzF45wDVL\ngaznlRS4PxECvGuy2ejcudUFx/uUlpZSWlqa9jrnnHOusVm/ddfe7wu5yhbAwG4lrJ1fzpxGEpCU\nl5dTXl6e/sIMSPov4E5CJavfEPbFGwT8DPibpCPN7LasPrThW0nY8iNhKXB4lWt6EAoKxBInIOnK\nvqmi6lQArWO0nSwR/VWNwKhyfEMO2snoHklfJqyf+3I1U3ixDRw4MO01o0eP5vbbb8/mY51zzrkG\nIVHyF6B9y8KdIQEY2LUtb8wvbzQzJGPHjuWOO+7IWntRYvjPgMfMLHn50PvRsvq5wLcl/c7MFpP5\nGDHnY8pa3JNLU4EhSe9fBr4q6XLgcUJ12YsIuS2xxAlI1hGScw5kALXfqX0OITeluvVx/aPXdFMI\ncdqZAxwT3TM1+WJJRUBfQhS4MDp8VPQ6TtK4FM84SFIlYT1gB/v4rvYH7vycOWmv8dkR55xzLrV1\n0QxJSYumNC2qVXHRnBvUPezYPnvlJswMSWnuqN9uvvlmRo4cmfa6mvxxNvJZwlhrYtUTZrZd0jvA\n5wjjtsVkON4zs22SlgM9JHVN8Ufo6saUkPk4NBtj4GyZANwnqa+ZLSIEfZcSqso+EF1TQahMFkuc\ngOQN4DxJ3cxsv6BDUn/gM8Bf97szM4klYZ9O8Yw2hByVbcDbOWjnZeCLhM/x9yq3DSdUNpgY5ctA\nSOyvbkboGkJ5tocI/5HsTNPfjxkwoK7ylZxzzrmGZ2/J3wJfrgUwqFsISDbt2M2qTTvo3q5Oqrrm\nTQ6WnCc26+tczfnE8cS0WabjvcQ9X4ruebDKPWdHry8lDpjZAklLgQGS+qSotHU2YXz4ctKxbI2B\nsyLKjX4g6f0ySUOBbwP9CMHdfWY2Pe4z4vypYAzQApgk6SzCP1ZiT5KzgKcJ9YjvitspADNbSCh3\nVibppiqnf0wIAMaZ2fbo+U0lDYxqN8duJ/IoYXObyyQdkzgoqTnwE8Ivzm+TnvGwmX011Vd0yfro\n/XVmllFA4pxzzrn41teDkr8J/buU0CSaFGksy7ay7DXCzMJXJfVIPhGNUYcBO4A3o8MZjfciv4ue\n8X1JycWNyoCvRe0/UM09P1fStFe0S/xJwMxonxQg9ti1TpnZIjO7yczOMrMbahOMQIwZEjObLOk6\nwj/QhKRTiWVIu4GrzGxmbToWuZEwI3OvpNOAWYSay6cAs/n41FDP6PxiqpTjzbAdzGyzpGuBR4CJ\nksYTlqqdR5g+e8TMHsnC53POOedcDiWS2jsWcIWthJbNiigrbc3CtVuZvXIzpw7sku8u1TePEqq/\nng7MkvQEIYXgUOCc6JpRUXngWOM9M3tL0t3ALcAHkh4l7Ox+KaHq1U3RJonJ7iYsJ7sImCzpJcIm\njhcBW4CrUnyWjMau9V2cJVuY2f2SXiP8sI4HSgkJOG8Dvzaz9IkPNXvOQknHEqLBzwBnETL97wF+\nbGZVy6FZ9FXbdjCzJ6PkqO8DFxJmheYTfgHHZvpRMrzeOeecc1mQKPvboR7MkECotLVw7VbmrKpx\nuqmLmJlJOpswU3EZIV+kFSHImAD8ysxeqnJPxuM9M7tV0gfRc64lrAz6NzDGzJ5Ncf0uSacDtwFf\nAL5J+EP+48DtZjY7xT0Zj12zRdL9MW81M4u1MbjMfKxcqCSZ//s455xz8V3+58m8Nm8tVw3ry4/O\nPTTf3Unr3hfncc+LcxnUrYR/ffNT+e5OQZCEmTXsDP8CEhViisPMrCj9ZfuLNUPinHPOOVcfJHJI\nOrYu/CVbEGZIABas2ULFnkqKC7wymGuQ+tb1A9MGJPmYtnHOOeecy4b1W8OSrfqQ1A77Km1V7DEW\nrtm6N0Bxrq6kqASWczWZIbkiZtsGeEDinHPOubzZN0NSPwKS3h1b0bK4iO0Ve5i9apMHJK5RqElA\nUufTNs4555xztbWjYg/bdu0BoH09qLIF0KSJGNCthGnLNjB71WbOz3eHnKsDaQOSfEzbOOecc87V\nVmJTRKg/MyQAg7qGgGSO70XiCoCkhTW81MysX5xneFK7c8455xqkxHItqD9lfwEGdw/LtP6zwkv/\nuoLQhNRbWLQH2kXfrwAqUlxTIx6QOOecc65BSmyKCPVnyRbAJ3qGMd6qTTtYu2Unndo0z3OPXGNm\nZmXVnZN0CPArwu7xZ8Z9RuyARFJ34DTCDump/ksxM/vvuO0755xzztVGYlPE1s2KaN401vYIeTG4\ne1skMIOZKzYxfEDnfHfJuZTMbL6kC4EZwGjgu3HaiRWQSLqDsNtk8v1i33RO4nsPSJxzzjmXF4kl\nW/Wl5G9Cm+ZN6dupNQvXbGXG8o0ekLiCZmY7JL1A2IU+VkCS8W47kr4I/BB4DbiIEHw8CIwE/ghU\nAuOBEXE65JxzzjmXDeVbQkBS2qZ+BSQAn+gRlm15HomrJ3YD3eLeHGf7zxuAD4HPmNkT0bHFZjbe\nzK4HPgtcArSN2ynnnHPOudpat3UnAKX1qMJWwpAeYRg1Y8XGPPfEuQOT1Am4AFgWt404S7YOAx4y\ns91Jx/YuzDSz5yQ9B3wHeDpux5xzzjnnaqN8a2JTxPqXFD4kSmxfUr6NTTsqaNui/iTlu4ZF0o+q\nOdUU6AWcT6i2FWu5VqKhTBUD5Unvt7Ov5FfCDOD6uJ1yzjnnnKut+r1ka99Ck/+s2MTxB5fmsTeu\nkbs9zflNwE/M7OdxHxAnIFkJdE96vxQ4vMo1PQhryZxzzjnn8mJdNENSH5dstW/VjJ7tW7J8w3Zm\nLN/oAYnLp1OrOV4JrAdmV1k5lbE4AclUYEjS+5eBr0q6HHgcOIWQ7P5GbTrmnHPOOVcb5VEOSX3a\npT3ZkJ5tWb5hOzM9sd3lkZlNyvUz4iS1TwCGSOobvf8ZsBF4gDBl8xSh8tYPstFB55xzzrlMVVba\n3n1I6uOSLdhXaWumJ7a7AiCpjaTLJd0t6c/R6+WS2tS27YxnSMzsAULwkXi/TNJQ4NtAP2AxcJ+Z\nTa9t55xzzjnn4ti4vYI9lWF7tNJ6mNQOYYYEYP5HW9i+aw8tm9WfzR1dwyLpYuB3QHvCxEOCAb+U\ndJ2ZPRq3/dg7tSczs0XATdloyznnnHOuthLLtaAeL9mKZkgqDWat2sTRvTvkuUeuMZJ0BvAQIWdk\nHDARWEXYd+RUwl6ED0naYGYvxnlGrQMSSSWEaGmjmfkiR+ecc87lXaLCFtTfJVtd2ragc0lz1mze\nyfQPN3pA4vLlR8BO4GQze6/KuQcl/Rp4NbouVkASJ4cESU0l3SZpPrCBsExrvaT50fGszLw455xz\nzsWR2IOkZXERrZrV32HJEQe1B+D9ZRvy3BPXiB0F/D1FMAKAmb0LPAwcHfcBGQckkpoBzwN3AmWE\nXRnfiV7LouMvRtc555xzztW5fZsi1u/hyFG9PSBxebeTsO3HgayIroslzgzJtwilfZ8BBptZmZmd\nYGZlwEDC7uwnR9c555xzztW5ddGSrU71dLlWwpG9QkCyaO1WNmzbleZq53LiNWBYmmuGEZZtxRIn\nIBlJ2In9c2Y2L/mEmS0ALgRmAl+M2ynnnHPOudqo73uQJBx2UDsU1TSa9qGX/3V5MQo4XNLPJLVO\nPiGptaSfE/YovC3uA+IsqjwEGGtmlalOmlmlpGeBm+N2yjnnnHOuNhJLtkrb1M+SvwltWxTTr3Mb\n5n+0hfeXbmD4gM757pJrfEYBHwDfIWyG/h6wGuhKyBtpR5gdGSUlVwTGzOzqmjwgTkCyC0i3AUpr\noCJG284555xztVa+JcyQlNbzGRIIy7bmf7SF95etz3dXXON0RdL37YERKa4ZHn0lMyBnAckHwEWS\nbjezNVVPSuoEXARMi9G2c84551ytrWsgSe0QApJH//0h7y/bgJlR5a/QzuVa31w/IE5A8mtgPPCO\npJ8ArxAy77sRkt1/AHQGvp6lPjrnnHPOZWRdA1myBfsS29dvq2DZuu30Lm2V5x65xsTMluT6GRkH\nJGb2sKQjCYkrf0hxiYCfm9nDte2cc84551ymKittX0DSAGZIBnYroXnTJuzcXcnUZes9IHENTqyN\nEc3se8CJwP3AVGBh9Ho/MMzMYmfZO+ecc87VxobtFVRa+L4hLNkqLmrCYT3bAb4fics/SSWSeklq\nm602Y29damZvA29nqyPOOeecc9mQSGgHKK3n+5AkHNmrPe8uWe8BicsLSU2BW4FrSMopkbQI+BPw\nCzPbHbf9WDMkzjnnnHOFKlHyF6C0df3PIQE4qncHAGYu38SOij157k3d2L2nkq+Oezff3Wj0JDUD\nngfuBMqAZcA70WtZdPzF6LpYMg5IJF0s6WVJPao531PSS5IujNsp55xzzrm4EvkjrZoV0bJZUZ57\nkx1Dy0JAsmtPJdMaySzJ4vJtPP+f1fnuhoNvEQpXPQMMNrMyMzvBzMqAgcDTwMnRdbHEmSG5ERDB\ndgAAIABJREFUBmhvZitSnTSz5YQNUq6J2ynnnHPOubgSS7YaQv5IQpe2LegTJbNPWbwuz72pG3NX\nb853F1wwEpgBfM7M5iWfMLMFwIXATOCLcR8QJyA5DEg3fzYFODxG284555xztVLegCpsJTu2T0cA\n3lncODZInLPKA5ICcQjwrJlVpjoZHX8W6Bf3AXECko7AR2muKQc6xWjbOeecc65Wyrc0nD1Ikn2y\nb1i29d6S9exJlBFrwDwgKRi7gDZprmkNVMR9QJyAZC3QP801/YGsLHCMclLul7Rc0g5JiyTdI6l9\nrtuRdKKkf0oql7RN0jRJ35C0389N0smS/iJpuqS1krZLWijpSUkj4nx255xzzmWuIe3SnmxoWZgh\n2bJzN7NWbspzb3KvNku2JJ0m6QlJK6Nx33JJ/5L0mRTX1ni8l3TPVyRNlrRZ0gZJr0g65wDXt5B0\nh6TZ0RhxtaS/Sxp0gHuyMgbOgg+AiyR1rqafnYCLgGlxHxAnIHkDOK+6H6CkwcD5wGtxO5XU1sHA\ne8BXCCWG7wYWAN8A3pTUIVftSDofmAScBDwOjAWKgXuAh1I8ZgQh4WcO8NfoGW9Ex16UdEdN+uqc\nc8652infGnJIGkrJ34S+nVrTKfpMDT2PZEfFHhaXb411r6SfAy8ARwNPAr8AJhBW75xS5dpMx3tI\n+gXwv0A3wibhfwGGAE9LujHF9c2AF4EfAhuBX0b9uwB4V9LQFPdkZQycJb8GOgPvSLpa0sGSWkrq\nK+lKYHJ0/texn2BmGX0BQwlTMmuBrwMDCNM0Awg/pLXR+eMybTvFs54D9gA3Vjl+F1AJ3JeLdoAS\nwrK07cBRScebEYKMPcAlVe5pVs2zuwOrop9J1ww/vznnnHMuM6ffNdH6jJpgv580P99dybrr//Ku\n9Rk1wW7467v57kpOTf9wg/UZNcH6jJpg0XiopmOna6Ox3Z+BpinOFyV9H2e8d0LU/hygbdLx3tEY\neBvQu8o9343uGV/l+LnR8ekp+pmVMXC2voCfRs/dk+KrEvhZbdrPeIbEzKYANwJtCdHjLGBT9Hp3\ndPwGM5ucadvJosjwDGCxmd1X5fRoYCtwuaSWOWjnYkIU/ZCZTU0cNLNdwA8AATckNxSd24+ZrQTe\nJMxGHXygvjrnnHOu9vYt2WpYOSQAx0bLtt5ZtD4xUGyQEvkjbZrXfA/vaCbiJ8AS4DpLsVGfmSVv\n4pLxeC96b8CdZrYp6Z6lwG+A5sCVVe65PrpnVJW+PE1YUXSopOFJnyMrY+BsMrPvAScC9wNTgYXR\n6/3AMDO7rTbtx9oY0cz+CBwB3Af8mzCF9G/CP8QRZvan2nQqcmr0+nyK528hRK6tgONz0M6phF+c\n51K09yoh+j1RUnGaZyOpS9T2TkI07Zxzzrkc2b2nknXbEkntDWvJFsAno4Bk7ZadLC7flufe5E4i\nf2RA13S51B9zBmHp0GOASTpH0n9J+rqkVOPFOOO9xLgy1T3PEoKYvbnDkvoBvYC5ZrakJveQvTFw\nVpnZ22Z2rZkda2b9o9drzeyt2rZd87Bz/07NAm6ubQcOYCDhl2RuNefnEX7xBgCvZLmdgdHrfveY\n2R5Ji4BDCTMeHwsyJB0DfJbwsz2IMB3XFrjJzBr2gk/nnHMuz8q37iIxcdClpOHNkAzuXkLrZkVs\n3bWHKYvW0bdT63x3KSfmRAHJwG5tM7ltKGHMt4vw1/sh0XsASXoVuMjM1kbHMhrvSWoF9AQ2m1mq\nHRsTe3QMSDpW7TPS3JONMXBWSWpDyHs5irDn4EZCnss/okApttgBSR1oF71urOZ84ni6SgNx2qnN\ns48FfpT0fjNwpZn9X5p+pjR3bnW/i/uUlpZSWloap3nnnHOuQflo086933cpaZHHnuRG06ImHFvW\nkUlz1/DmgrVcMrRXvrsUW3l5OeXl5SnPTZsxi4rNO2m3M6N/wy6E2YbvEDbqG0ao/NSXkNh+JvAw\n+2YjMh3v1dWYMltj4KyRdDHwu+iZSjplwAZJ15nZo3HbL+SApF4ys98Dv4/WMfYlrBv8i6RhZrZf\n5YV0Bg4cmPaa0aNHc/vtt2fatHPOOdfgfLR5BwBFTdTgyv4mnHRIJybNXcPr88sxMySlv6kAjR07\nljvuOHAR0u/+MaMmE6kIFcC5ZrYsej9T0oWEVS3DJR1X21znxkTSGYSKY5XAOGAioWBTN8LyspHA\nQ5I2mNmLcZ5RyAFJIvprV835xPF0+53EaafWz44SouYAt0hqAVwn6UUzezxNfz9mzpz0aSc+O+Kc\nc84FazZHJX9bN6OoSf0cqKcz7JCw9/TaLTuZu3oLA7uV5LlH8dx8882MHDlyv+PTP9zA18e/D8Dj\nN5zI8UcfVtMmE+OyqUnBCABmtl3Sc8BVwCcJpWozHe/V1ZgyW2PgbPkRIRf6ZDN7r8q5ByX9mpBz\n8yNCeeOMFXJAMocwJTSgmvOJzRnTrWmK084c4JjonqnJF0sqIsx87CZUGKiJZ4HrCLWvMwpIBgyo\nrtvOOeecq+qjKCDp0rbh5Y8kDOpWQmnrZpRv3cXr89fW24CkuiXnU9YvobhjTzq1ac5xRw3JpMnE\nX3GrG6ivj14T1akyGu+Z2TZJy4EekrqmyCOpbkwJmY9DszEGzpajgL+nCEYAMLN3JT1M2BwxllhV\ntupIIknn01VPREk1wwjVD97OQTsvE34R9tvNExhOqGzwhplVpHl2wkHR637l55xzzjmXPYklWw0x\nfyShSRNxQr8wkH9z/to0V9c/iZK/A7tlVGEL4CVCTsOh1ZxPRDeLotc4472Xo9dU95yd1A8AzGwB\nsBQYIKlPNfdYUruQvTFwtuwEVqa5ZkV0XSwFG5CY2UJCubMySTdVOf1jwmaM48xsO4CkppIGRrWb\nY7cTeZSwuc1lUdUsomc0J9S3NuC3yQ2l2mUzOt4P+F50zzNpP7hzzjnnYksktTfEClvJToqWbb29\nsJyKPZV57k12zV6ZKPmb2cxPtBfI00BvSd9MPifp04Sk9vXAv6LDGY/3CIndAr4vqX3SPWXA14Ad\nwAPV3PNzJSX8RLvEnwTMNLNJSZ8jztg1l14jBEEHMoywbCuWQl6yBWEDxjeAeyWdRth88XjC0qfZ\nhE1rEnpG5xez/waEmbSDmW2WdC3wCDBR0nhgHXAeYfrsETN7pMoznpf0EWHKbxnhZ9uPEEEXAb8y\ns5dwzjnnXM6s2dI4ApJEHsnWXXuYtmzD3g0T67vKSmPmipBCMaRHdSkUB/Q14EjgLknnEMZlBwPn\nE1aqXGNmmyHeeM/M3pJ0N3AL8IGkRwk7u19KqEB1UxQYJbubsCXERcBkSS8BfaL3Wwh5LVVlNHbN\nsVHAW5J+Bvy3mW1NnJDUmrBZ4xDCxomx1CogiToxAGhjZq/Vpq1UzGyhpGMJ0eBngLMIU0b3AD82\ns6rl0Ix99aZr0w5m9mS0a+b3gQuBFsB8wi/g2BTd/SFhau04wi9dEbCakDPyp7hVB5xzzjlXc4kZ\nks4NPCDp1bEVfUpbsaR8G6/PX9tgApIl67axdVfYTH1Iz8wDEjNbHs12/IgQWJwMbAKeBH5mZu9W\nuT7T8R5mdqukDwjBz7WE6lP/BsaY2bMprt8l6XTgNuALwDejPj0O3G5ms1Pck/HYNYdGAR8Qyil/\nVdJ7hDFuV+BoQpL9q8CoKhXfzMyurskDZLbf+D39TdJBwL2ETf+Kogc2jc6dBPwBuNHMJmbcuNtL\nksX593HOOecaIzNj4A/+xa49lfzuS8fwmSHd8t2lnPreE9P52+SlDC3rwCPXx/7jdEF5etoKbn5o\nKs2bNmHmHWfStKgJkjCzhlkyrR6QFHdNoJlZUU0uzHiGRFJ3Qqm0rsBThE1oTki6ZHJ07FJCnWLn\nnHPOuZzbuL2CXVE+RUOuspVw0iGd+NvkpUxduoFNOypo26I4312qtRnRcq1B3dvStKhgU50bm765\nfkCcJVujCQHHGWb2iqTRJAUkZlYhqSbJL84555xzWZMo+QsNP4cEQh5JUROxu9J4be5azjm8e767\nVGszl28CYEiPtnnuiUswsyW5fkac0PNs4Ckze+UA1ywFesTrknPOOedc5tYkBSQNPYcEoF3LYoaW\ndQDgpdlVt8Sof8ySEtpj5I+4+itOQNIVmJfmmgpCSTLnnHPOuTqR2IOkXctimjet0dL1eu+0QV0B\nmDhnDXsq63fe6YqNO1i/LWz58QmfIWlU4gQk64Beaa4ZAKyK0bZzzjnnXCyNZQ+SZCMGdwFg3dZd\nvL+sug3K64cZy8PsSNMmyngPEle/xQlI3gDOk5SydIWk/oTyZAda0uWcc845l1WJHJLGkNCecHCn\n1pSVtgLg5Xq+bGvmipA/0r9rCS2KG8cMlwviBCRjCDWaJ0k6C2gFYU+S6P3ThHrMd2Wtl84555xz\naSRySLqUtMhzT+qOJEZEy7ZemvVRnntTOzOjGRJfrtX4ZByQmNlk4DqgDJgA3Bqd2hS97wtcbWYz\ns9RH55xzzrm0EjkkjWnJFsBp0bKt2as2s3zD9jz3Jr4Ze3do94CksYlV4NnM7idsEf8r4B1gAfAe\ncB9wuJn9X9Z66JxzzjlXA4klW42hwlayoWUdadM87OTw8qz6uWxrzeadrI5ygLzCVuMTe8cZM5tn\nZreY2QlmNsDMhprZzWY2J5sddM4555yriTWbGmdA0qxpE4YP6AzAv2bWz5pC05eHhHwJBnf3GZJC\nFaVoHCXp5Gy2m7UtMCWVSrpA0pmSPBPJOeecc3Vm+649bN65G2hcOSQJZx0Wag29taCc8i0701xd\neP69ZD0AA7uW0Lp5nH27XS5JOkjSY8B64F2SildJOknSfySdErf9jAMSSTdImiypY9KxY4DZwKPA\nP4E3Jfk+JM4555yrE8mbIjamKlsJIwZ1oUVxEyqtfs6SJAKSY6ONHl3hkNQdmAycT8gXfwtQ0iWT\ngS7ApXGfEWeG5FLAzGxd0rExQAfgfwkByVDg+ridcs4555zLRCKhHRrfki2AVs2aMmJQSG7/5/SV\nee5NZir2VDJtWUhoP6aPByQFaDQh4DjDzC4EXkg+aWYVwGvAsLgPiBOQ9Ac+SLyR1AkYDvzZzK4x\ns3OBKcDIuJ1yzjnnnMtEIqG9RXETShrpkp9zDusBhGVba+vRsq1ZKzexvWIPAMf07pjmapcHZwNP\nmdmB9hhcCvSI+4A4AUkpkFzoOhENPZF07DWgT9xOOeecc85l4qNNiZK/LZCU5uqG6dRBnfcu23qu\nHi3bSizX6lzSnF4dW+a5Ny6FrsC8NNdUALHTNeIEJOuATknvhxM2Qnwz6ZgRNk90zjnnnMu5vbu0\nN8LlWgmtmjXltGiTxGc+qD/LthIByTG9OzTaYLLArQN6pblmABA7Co4TkMwCzo2qarUHLgOmmNmm\npGvKatMp55xzzrlMrNwYZki6t2/cf2E/+7DuALy9sPxjeTWFbG9A4vkjheoN4DxJ3VKdlNQf+AxJ\nlbcyFScguRfoDnwILCNM49xX5ZrjgWlxO+Wcc845l4nEDuU92jfuBRojBnWhTfOmVBr8Y+ryfHcn\nrRUbtu8NJo/xCluFagxh5dMkSWcBrWDvniRnAU8TVkvdFfcBGQckZvYUoYLWTGAOcKuZ/TVxPqpB\n3AZ4Lm6nnHPOOecysSIKSHo28hmSls2K+OzhYZbkkXc/xMzy3KMDS8yONGvahE/08A0RC5GZTQau\nI6yAmgDcGp3aFL3vC1xtZjPjPiPjMhSSPgW8Y2Z/SHXezCYSSgA755xzzuXcnkpjVfRX9h7tGndA\nAnDxsQcxfsoy5n20hWkfbuTIXu3z3aVqJQKSw3u2o3lT31e7UJnZ/ZJeA24krIQqBTYCbwO/NrM5\ntWk/Tl28V4DfRx1yzjnnnMurNZt3srsyzAR0b+RLtgCO7t2Bgzu1ZuHarTzy7rKCDkimLA7b2nn+\nSOEzs3nALbloO04OyVpge7Y74pxzzjkXRyJ/BHzJFoAkPn/MQQA8NW0FO6I9PgrNms07mbki1EQ6\noV9pnnvjqhMVscqpOAHJRODELPfDOeeccy6WRP5Iq2ZFtGtZnOfeFIbPH30QTQSbd+zm+f+sznd3\nUnp9/hog5I8c19cDkgK2UtLfJZ0tKU7skFacRn8ADJT035L8v3rnnHPO5dXKjYkKWy19H4tIt3Yt\nOLl/ZwD+NnlJnnuT2qtz1wJwXN+OtGzm+SMFbDFwMaGa1nJJYyQdls0HxMkh+S4wA/gecLWkaYQ9\nR6qWcTAzu7qW/XPOOeecO6AVG6KEdl+u9TFfPK43k+au4e2F65i9ahODuhVOFavKSuO1eWGGZPiA\nznnujTsQMxssaShwBXAp8G3gW5LeBx4E/mZma2vzjDgByRVJ33eLvlIxwAMS55xzzuXU8r0lfz2h\nPdlpg7tyUIeWfLh+Ow++uZj/d+Hh+e7SXv9ZuYm1W3YB8CkPSAqemU0Bpkj6JnAe8BXCZoi/BMZI\nehZ4wMz+Eaf9OEu2+tbw6+A4HXLOOeecy0Qih8RL/n5cURPxlRPKAHhi6nLWb92V3w4lmTQ3zI50\na9uC/l3a5Lk3rqbMrMLMHjOz84CewLcIK6fOAx6N226cjRGX1PQrbqecc84552oqEZB09yVb+7lk\naC9aFhexo6KSv7+7LN/d2evVKCD51IBOnvdTf60lbJQ+C6gAYv9Dxlmy5eq5iooKpk+fnu9uNEiH\nHXYYxcVe68E55+rKtl27Wb+tAoAevmRrP+1aFvP5Y3ry17eXMu7NxVxzUl+aFuWkUFKNbdm5e++G\niL5cq/6RNIiwZOtLQA9CIDKfkE8SS61+IyW1lnSUpJNr046rW9OnT2fWrFn57kaDM2vWLA/0nHOu\njiUS2sH3IKnOFSeWAbBi4w4mfLAyv50BXp+3lt2VRhPBSYd0ynd3XA1I6iDpRkmTCbMio4AS4M/A\nSWY2wMzujNt+rBkSSQcB9wLnAkWEBPam0bmTgD8AN5rZxLgdc7k1ePBgjj766Hx3wznnnKuVFUmb\nInZr5zMkqRzSpYTTB3flxVmr+dXL8zj3iB4UNcnfMqmnP1gBwLFlHWnfqlne+uFqRtJjwNlAM8KY\n/0XgAeAJM9txgFtrLOMZEkndgcnA+cAE4C0+vmZsMtCFUBbMOeeccy5nEnuQdC5pTvOmvpdFdb5x\nWn8AFq7ZyoQoIMiHLTt382K0UeP5R/bIWz9cRi4g7EXyfaCPmZ1pZg9lKxiBeEu2RhMCjjPM7ELg\nheSTZlYBvAYMq333nHPOOeeqt9z3IKmRww5qx2mDugAw9uX5VFZW3T6ubjw/cxU7d1dSXCTOHtI9\nL31wGTvBzAab2c/MbHkuHhAnIDkbeMrMXjnANUsJSS7OOeecczmzr+SvL9dK5+vRLMn8j7bwzxn5\nySV58v0wOzN8QGc6tPblWvWBmU3O9TPi5JB0BealuaYCaB2jbeecc43E5h0VLFu3ne0Ve9i9p5Li\npk3o3q4FXUpa5HV9u6tf9gYkPkOS1hG92nPKwM5MnLOGu5+fy5mf6EZxHVbcWrtlJ6/PDxt6n3dk\nzzp7rsuMpPsJuSLfM7PV0fuaMDOLtSl6nIBkHdArzTUDgFUx2t6PpJ7AfwNnAqXASuAfwB1mtiGX\n7Ug6EfgBcBzQkhCI3Q+MNbPKFNd+DjgFKAPaAiuAl4CfmdmCmvbV5c+QIUMYPXo0F198cb674lyD\nYmbMXLGJ1+ev5c0F5fxnxca9uzRXVdREDOpWwgkHl3LiIaWc3L9znQ6aXP3iAUlmbv30QCbNXcPC\ntVsZ99YSrj6pb509+5/TV7Kn0mjVrIjTB3eps+dK+hIwLnp7jZntN8DOZMyXdM9XgBuBQ4E9wFTg\nF2b2TDXXtwC+S8iz7gNsAiYCo81sdjX3ZGUcnKErCAHJ/wCro/c1YUCdBSRvAOdJ6mZm+wUdkvoT\ntpL/a5wOVWnrYELSfCfCD38O8EngG8CZkoaZ2fpctCPpfMKOk9uBvxMCsXOBe4AT2T9p/7Go/TcJ\nn303cALhH+YySafXxZSXq50ZM2bkuwvONSjL1m3jsfc+5Impy1lSvq1G9+ypDMHLzBWb+NPri+jU\nphmfP/ogvnhcH3qXtspxj119UllprNgYckh6+h4kNTKkZzsuPuYgHn73Q+59cS4XHNWTjnW0dOrx\n90L6wacP7UqrZnWzFZ6kXsBYYDOQckv4GGM+JP2CsEv5MkJ12WbAZcDTkm4ys/uqXN+MUJ3qRGAK\n8EvCH/gvAc6RdKqZTalyT1bGwTEkotTlVd7nTJzfhjGECluTJH0TaAVhTxLgU4R/vErgriz077eE\nf4Sbk/9hJd0F3ALcSYhMs9qOpBLgj4SgYriZTY2O/xB4BbhI0iVm9nDSM+4GxpnZ6uQHS7oN+Cnh\nl/WIGn5u55yr16Z/uJHfTVrAszNWkpw727Vtc4Yd0olj+3Tk4M6t6VPaijbNm1Jc1ISdFZWs2Lid\nZeu28e6S9by1oJzpy8NMyu9fXcifX1/EpUN78fXT+tO1rQ8+HazdupNdu8Mfr32GpOZuPXMg/5y+\nik07dnP3C3P4yecOy/kz/71kPe8vC3/Qv/Dog3L+vCT/S9hR/HHg1qon44z5JJ1ACEbmAUPNbFN0\nfAzwHvALSRPMbGnSo75NCEYeNrPLktr6O/AkYTam6j9EtsbBGTGzJQd6nwsZz4FHf+W/jrAsaQL7\n/nE3Re/7Aleb2czadCyKCs8AFleNMgmVvrYCl0s64P8CxWznYsIvwEOJX0wAM9tFmM4TcENyQ2Y2\npmowEvk5IeIeIqnDgfpaKCr2VLKkfGtWvyr2pJztTKtv377ceeedjBgxgpKSEo444gimT5/O+PHj\n6d+/Px06dODaa6+lsjK0f9VVV9G7d2/atm3LkCFDeOihhz7W3jPPPMMnPvEJ2rZty3nnnce3vvUt\nTj311I89729/+9ve9x988AFnnXUWXbp0oVOnTnz605+O9Tmcayzmrt7MVQ9M4dxfv84z00MwUtq6\nGVcOK+Ppm07i7e+ext2XHMnI43pz/MGldG/XkpIWxbQoLqJdq2IGd2/Lpz/Rje+dPZinbz6JV79z\nKjedegidS5qzu9L4v8lLGT7mFX47cQG7Y/7vims4Fq/dN+vWp9RTV2uqS0kLvnbqIQD8bfJSZizf\nmPNn/m5SWLk+qFsJJ/evm80QJX2DsJT+SqC6KdqMx3zRewPuTAQj0T1Lgd8AzaNnJrs+umdU8kEz\ne5pQnfZQScOT+p6VcXA2SPqypMPTXHOYpC/HfUas+TIzu1/Sa4So7HjCmraNwNvAr81sTtwOJUmM\nEp9P8fwtkt4g/EMdT4hgs9nOqYRfmudStPcq4Zf6REnFUZnjAzFC1A1hfWHBW7FhO8PHTMxqm5O+\nc0rs/7MYN24cTz/9NP369eOKK67gggsu4PTTT2f69OmsWbOGY489lhEjRvCFL3yBk08+mbvvvpt2\n7drxyCOPcPnll3PUUUcxaNAgFixYwOc//3nGjRvHRRddxMSJE7ngggs45phjUj531apVnHLKKdx2\n2208/vjjFBcX8+qrr9bmx+Bcg1W+ZSdjnpvDw+8u2zsjcnDn1lz/qX6cf1SP2PtD9C5txa1nDuSm\nEYfw4JuL+e2kBWzYVsH//Gs2/5qxkjEXH8GAriVZ/CSuPlm8disAHVs3o13L4jz3pn65clgZ46cs\nZUn5Nm59ZBpP3jQsZ/u4zP9oCy9Ee49cN/xgpNwXrZA0GPh/wC/N7HVJp1VzaZwxX2JsmeqeZ4Ef\nAiOAO6K+9CMsz5pTzWzDs8DJ0T2TqjyjtuPgbHgAuB344ADXnAf8mH25OhmJszFiewAzm2dmt5jZ\nCdF28UPN7OYsBSMAAwm/IHOrOZ+o9DUgB+0MjF73u8fM9gCLCMHcwWmeDWFtYAnwVnIU7Wruq1/9\nKgMGDKCoqIiRI0eyaNEifvrTn9KiRQt69erFKaecwrvvvgvAlVdeSfv27ZHEJZdcwuGHH87EiRMB\nGD9+PMcffzyXXHIJTZo0YcSIEZx//vnVPvcvf/kL/fv357/+679o2bIlTZs2ZcSIEXXxkZ2rNyor\njfHvLGXEXZMYPyUEIwd1aMm9lx3Ji7cM55KhvbIyyGlRXMR1w/sx6Tun8oVPhroq0z7cyLljX+ex\nf39Y6/Zd/bSoPAQkZZ5blLEWxUWMuegIJJi9ajP3vpiugGp8f3g1zI70bN+Szx6e+10hJBUBf2Hf\nZn4HktGYT1IroCewpZqVMRmNK9Pck41xcF0pIvQ3ljgzJCslPQU8CPyrusoDWdAueq1uHjFxvH0O\n2snKsyX1JSRSVRDWGmZs7tzqfg/3KS0tpbS0NE7zKfVo35JJ3zkla+0l2oyre/d9Gye1atWKoqIi\nOnbs+LFjmzdvxswYPXo0Dz/8MKtXh/+N2LZtG2vWrAFg+fLl9OnT52Nt9+nThw8/TD2YWbx4MQMG\nFMp/584Vng/Xb+PbD09j8qJ1ALRuVsQ3Tx/Al0/sk7O/tLZrWcz/u/Bwzj6sO6Me/YAVG3fw7Uem\n8f6yDfzws4fSrKlX42pMEjMkZZ18uVYcn+zbkWtO6ssfX1vE7yYt4PRDu3J07+yuLl+1cQdPTA25\n0Vef1PdjFfPKy8spLy/P6vMiowl5u8PMbGeaazMd89XVuDJb4+C6MgCInWAfJyBZTFhvdxHwkaS/\nEpK5p8ftREMkqTNhCq4UuNHM3onTzsCBA9NeM3r0aG6//fY4zadUXNSkXq7Ffeihh/jzn//Miy++\nyODBgwEYOnQoZiFg79mzJy+88MLH7lm6dOl+7SSUlZXx2GOP5a7DztVTZsYTU5cz+smZbN4ZVqSe\nfVg3fvTZT9CtjjanO7l/ZyZ8/WS+/tBUXp+/lr+8vYQFa7bw+8uPoaSFL91pLBZFAUnfevj/WYXi\n258eyCtz1jD/oy18Y/xUnvzaSVmtujXmuTlU7DHatyrmsk9+fNeIsWPHcscdd2TtWQALtwQQAAAg\nAElEQVSSjiOU1v1F3LGX27sXSbLPSSpLcWkR0Juw5CxlueOayDggMbPBkoYSahJfSqga8C1J7xNm\nTf5mZmvjdihJIvJrV835xPF0NZjjtFOrZ0fByCtAf+DrZvb7NH2s1pw56VfAZXN2pD7btGkTxcXF\nlJaWsnv3bsaNG8e0adM499xzAbjsssv4yU9+wqOPPsqFF17IpEmT+Mc//lFtDsmXvvQlfvrTnzJm\nzBhuuukmmjZtyquvvsppp1W3DNW5hm/Dtl18/4kZPDM97PLcoVUxP73gMM46rHuaO7OvY+tmPHjV\nJ/nF83P47cQFvLmgnEt+/zYPXjmULl6Fq8Ezs72lpH2GJL4WxUXcc8mRfP53b7Js3XZu+Ou/+cvV\nx2VltvG1eWt47L2wCuHmEf33K/V78803M3LkyLTt1OSPs7B3qdY4QnncH1U9Xc1tmY756mpcma1x\ncFxXJH1vwJHRVyoGTCZU/oolblL7FGBKVPb3POArhL1HfgmMkfQs8ICZ/SNux/5/e/cdX1V9/3H8\n9QkrEHbYhL1RRMCBi2G17m2tUietts7WLttq62htf62t1jqorXXvPeuoggtUUFABkR1BdsIeIevz\n++N7gteQkOTm3tyM9/PxOI9Lzvmecz738iV8P/d8B6EyGeX3jRsQvVbUpyme68wHRkXnzIotHFX2\nPoSB6ktKX8zMuhIWQxxIeDISdzICNPguQ1UZ+Hb++eczefJk+vfvT0ZGBueccw5jxozZdbxfv348\n+eST/PKXv2TixImMGzeOc889l0WLFpV5v65du/LWW2/x85//nP/7v//DzNh///2VkEiD9d7CHH72\n5Ces2Rx6QIwd2JGbTt8npY3/RmnGVUcPpke7Flzz3GzmrdrMqZOm8eiFo+nRXuMK6rM1m3eyoyDM\nFdNHCUm1DMtqw/+dOoyfRl0wr31hLn88Ze9qDT7fnl/Ir58JnWeG92jL+Qf33q1MorucE9YZGUBo\nIO8sI34H7jazuwmD3X9KFdt87r7dzFYA3cyscxnjSMprV0LV26KJaAfHq2TtESO8978Dt5ZRrgjY\n4O7bqnOzaq1KE8028DTwdPRU4HvAOYQk5fhqXr9kxoDd5lk1s5bAIYSZDz5IwnUmE97L0YQFcmKN\nJay98lbpGbbMLCs6ty/wQ3f/TwWxSQWWLPlmzjd27Fjy87+5uvO99967689PPPEEe3L88cdz/PHH\n7/p5woQJ3xhXUvp+w4cP362bl0hDU1zs3D5lEbe8sQB3SG+SxtXHDuHs0b1qZLacyphwYE86tGzK\n5Y/O4qsNOzjzXx/w2EVKSuqzku5aoCckiXDqyCzmr9nCXW8v4dHpy+jQsik/PXJg3P/G//b6Ar7a\nsIPGacafTxtGo7Qa+V2xE7i7nGMjgRGEKXbnExYchPjafJOBs6Nz7i91zrHR65slO9x9sZktAwaa\nWa8yZto6lpAsTY7Zl6h2cFxiYzSz64EpyVyPJJGj/3KAucA8wiDuatU8d19CmOqst5ldVurwDUAG\nYezKDgAza2xmg6J5m+O+TuSp6P2caWa7+vOYWTPgD4RKMyn2QmbWizA9XB/gAiUjtdOLL77Ihg0b\nKCoq4vnnn+eZZ56p1ONikYZq4/Z8vn//DG7+X0hGhnRtzUuXH8Y5B/WuNclIiW/v1YV7z9+f9CZp\nrNgYkpLl6yu3OrzUPdnRDFsdWjajZbOaWfW7vvvlUYM5cmhnAG6bvIjfvzRv1zjMqnjogy/5z3tL\nAbh4XD8Gd2md0DjL4+557n5RWRvwYlTs/mjfk9HPVW7zAf8ktHOvLpl9NjqnN3ApkEeYKresc/5i\nMb88o1XiDwXmunvJlL/xtl+Twt2vd/ekrntQ7X/BZjaY0GXrbKAb4cNexO4ZYzwuAaYCt0bzR88j\nzLc8DviCsGBNie7R8Wx2n463KtfB3beY2YXAk8BbZvYYsJ7w5Gcg8GRMRS7xFtAL+Ajoa2bXlvF+\n7i21aqfUsHfeeYeJEyeyc+dOevbsyV133fWNbl0i8rU5Kzbxo4c+5qsN4f+774zK4vcn7016k+TM\noJUIB/fvwD3n7c/E+2ewYuMOJtz9AU//6GCNKamHSmbY6tNBT8ESpVGacceEkfz4sVm8Mmc190xd\nysbt+dxw8t6VTvqenfUVv31+DgAH9G6/awHGWmL3PlxxtPnc/X0zu5kwZuIzM3sKaEoYW90WuKyM\n9t7NhN5DpwMfmtmbhHbj6cBWYGIZ8Vap/ZosZvYdwmKQZ7v7yjKOdyeM3bnD3Z+J6x7xZL7RiuNn\nERKR/Qh/wZuBJwhjR6bFE0w59+pOyASPJsxYtQp4BrjB3TfFlOtF6OOW7e794r1OqXMOIsxffRCQ\nTki0/gPc5qU+ODOrzKKH46uSYZpZ6dskxMyZMwEYOXJkwq/dkOlzlfrkiRnLueb5OeQXFtO0cRo3\nnLgXZx7QM9VhVdq0xTmcf+8M8guLGdS5FU/88CDatNDsW/XJRQ98xOufr+E7o7K46TvDUx1OvVJY\nVMxVT8/eNSC9R/vm/PX04RzYt/zxHgVFxdzz3lL+8tp8ioqd4VlteOgHByZk1jszw92r9Ug2+qL4\nd8CF7l56BqkqtflizjmX8ERkKFAMfAzc5O6vlFM+HfgVoQ3dk9B2ngJc5+5flHNOlduviWZmrwEd\n3b3cBo6ZfQSsdfdjyyuzx3tUtcFrZk8T+ro1JTzGepPwWOpZd8+LJwgpmxKSukWfq9QHBUXF/OGl\nz7n//dBVOKtdcyZ9bxTDssqb6KX2+t/na/jRQx9TVOyM7NmWh38wmuZNa+/THamab9/yNgvWbOUX\nRw2qbd/C1wvFxc6ktxfz9zcWUFDkmIWJLCYc0JPDB3eicbSeyJa8Aj5csp6bXpvP/DVbABjcpRWP\nXTSati0SM31wIhISiZ+ZrQReirq+lVdmEnCCu2fFc494umydQhgMdD/woLuviOfGIiJSu2zYls+l\nj8xk2uKwUNlhAzpw21kjEtaoqGlHDu3MX07bh589+Skzl23kp098wh0TRpJWM4NrJYmKi7+e8lcz\nbCVHWppx6fj+jB/UiZ8+8QlfrN7CW/PX8db8dTRKMzq1akaLpo1YmrON4pjvTs86oAe/OnqInkjW\nL+2BtRWUyQU6xHuDeBKSg9z9w3hvKLXDvHnzUh1CvTNv3rxdCzKK1DXzV2/hwgc+Ylk0CPzCw/pw\n1dGDd30LWledNiqLtVt28udXv+CVOau56fX5XHX04FSHJdW0anMeOwuLAeitRRGTami31rx4+aG8\nOmc1D3/4JR8sWU9RsbNq0zc7xYzo2ZZrjhvKqF6JXeldaoUcvp5muDwDqMaaKPEsjKhkpI4bNmxY\nqkOol4YMGaLPVuqk1+eu5srHP2FbfhFNG6Xxp1OHcdqouJ6610o/GtuX7JxtPP7Rcia9tZg+HTI4\nY78eFZ8otVb2N6b81aD2ZGvSKI0ThnfjhOHdWJa7nQVrtrB6cx6bdhQwuEsrRvZsR7sEru4utc5U\n4EQzG1zWWBczGwKcxNczmVWZ5slrgJo0aaJxDiKCu3PHlEX89fWwrlbHVs2465xRjOxZv77hNDN+\nf/LeLN+wnWmLc/nNM7PJatecg/vF3btAUqxkDZLOrZvttvq3JFfPzBb0zFQS2MD8FTgVeM/MbgBe\nBVYQZrg9Bvgt0CgqF5e4nsWb2Vgze8nM1ppZgZkVlbEVxhuUiIgk1478Ii5/dNauZGSfrDa8eNmh\n9S4ZKdG0cRqTvjeKvh0zKCx2Ln5oJovXbU11WBKnkick6q4lknzuPoMwBXFr4BbC9MObo9ebo/0X\nV6cXVZW/VjCz44DnCJnQMsIAdyUfIiJ1xIqNO7jogY+Yu3IzACfv243/O22fWr2+SCK0adGEe87b\nn1PunMqG7QVMvG8Gz11yiLqa1EEL14Zksm/HlimORKRhcPd/m9l7hMTkQMJ6KxsJK8VPcvdqDU6O\n5znndYSV2I9z99erc3MREalZM7LXc/FDH5OzNR8zuOrowfxwTN9at+p6svTukMFd5+zH2Xd/yJe5\n27n0kZk8MPGAOj94v6GZtyok00O7tkpxJCINR5R0XJ6Ma8fzG3hv4HElIyIidctj05cx4d8fkLM1\nn1bNGnPPefvzo7H9GkwyUuKAPu3546lhAoppi3O58b+adbAuyd26k7VbdgIwpGvrFEcjIokQT0Ky\nFVif6EBERCQ5CoqKue6FufzqmdkUFDl9OmTw7KWHMH5wp1SHljKnj8ri+4f2AeDeqdk88dHyFEck\nlTVv1ZZdfx6shESkRplZhpmNMLPDEnndeBKSN4GDEhmEiIgkx4Zt+Zx3z3Tum5YNhMUOn7vkEPp3\nUt/7Xx8zmEP7h5m2rnl2DjOXbUhxRFIZJd21erZvQctmmmFLpCaYWZaZPQ1sAD4CpsQcO9TMPjez\ncfFeP56E5Cqgn5ldYw3tOb+ISB0yf/UWTrpj6q6V139waB/uPX9/raAcadwojdsnjKBn+xbkFxXz\nowc/Zs3mvIpPlJQqSUgGd9H4EZGaYGZdgQ8Ja428BLwPxOYAHwKdgO/Ge494vlq4FpgLXA9MNLNP\nKHtlRnf378cbmIiIxK/0Yod/PHUYp9ejxQ4TpW2Lptx93n6ccsdU1m7ZyUUPfszjF42u9zOO1WWf\nRwmJxo+I1JhrCQnHke4+xcyuJaa3lLsXmNm7wCHx3iCehOT8mD/3jrayOKCERESkBjWUxQ4TaWDn\nVtz83X354YMf8+nyjfzmmdn87YzhDW6wf12QX1i8a/0YJSQiNeZY4AV3n7KHMsuAuMeVxJOQ9In3\nZiIikjxbdxZy1VOf8fLsVUBY7PBf5+xHlzbpKY6s9jtqry5cecRAbnljAc/MWsHQbq35wWF9Ux2W\nlLJ43VYKihyAoUpIRGpKZ2BhBWUKgLhXKq1yQuLuX8Z7MxERSY5Fa7fwwwc/ZvG6sIL1Sft2488N\nYLHDRLr88P7MW7WZV+eu5o//ncegLq04bEDHVIclMUrGj7Rs1pisds1THI1Ig7Ee6FFBmYHA6nhv\noJWgRETquJc+W8mJt09l8bptNEozrjluCH//7r5KRqooLc342xnDGdylFcUOlz0yi+ycbakOS2KU\nJCSDurQiLU1d6kRqyFTgRDPrUtZBMxsAHE3MzFtVpYRERKSOKigq5oYXP+eyR2axPb+Ijq2a8eiF\no/nBYQ1n5fVEy2jWmH+fux9tWzRh044CLnzgI7buLEx1WBIpWYNkiFZoF6lJNwHpwNtmdgzQAnat\nSXIM8CJQDPwt3htU2GXLzO4hDFD/jbuviX6uDM2yJSKSJGs353HpIzOZkR3Wzjigd3tunzCCTq01\nXqS6erRvwZ0TRnLOPdNZuHYrVz7+CXedPUrfyKeYu+96QqIB7SI1x90/NLMfApMI0/6W2By9FgIT\n3X1uvPcwd99zAbNiQkIyxN0XRD9Xhru7+gtUg5l5RX8/ItLwfLgkl0sfmUXO1p1AWF/kqmMG06SR\nHnon0n1Tl3Ldi58DcMW3BvDTIwemOKKGbe3mPA7445sAPHPJwZo5rgExM9xd3wikWNQ16xJgNJAJ\nbAI+AG539/nVuXZlBrWXzKq1otTPIiJSg4qLnbveWcJfX59PUbGT0bQRfzl9OMft0zXVodVL5x3c\nm89XbeaJj77iH28uZEiXVhwzTJ91qsxaHpY8a5RmWhRRJInM7ArgA3efHrvf3RcCVybjnhUmJKVn\n1dIsWyIiNW/dlp389IlPeHdhDgD9O7Xkn2ePon+nlimOrP4yM35/8t4sXLuVWcs28rMnP6V3hwx1\nF0qRGUvXA7B3t9a0aBrPqgUiUkl/B64DpgOYWRFwnbv/Plk31PN9EZFa7t2F6zjm1nd3JSOnjczi\n+UsPUTJSA5o1bsRdZ4+ic+tmbM8v4sIHPmL9tvxUh9UgzfgyjJfar3f7FEciUu/lAc1ifrZoSxol\nJCIitVRBUTF/fvULzvnPdHK27qRF00bcfMZw/nbGcDKa6RvimtKpdTp3nbMfTRun8dWGHVz68EwK\niio7nFISYXt+IXNXbAJgfyUkIsm2FDjKzDrH7EvqoGYlJCIitdDidVs5fdI0Jr21GIC9urXmpcsP\n5dSRWSmOrGHat0db/nTKMADeX5LLjS/PS3FEDcsnyzdSWBzaQ/v11mB2kSS7CxgJrIy6awFcZ2ZF\nFWxxz5Gur9hERGoRd+ehD5dx48ufk1cQvoU//+De/PrYwTRrrIkLU+m0UVnMW7WZu99byn3TshnU\npRVnHdAz1WE1CDOWhu5afTtk0KFlswpKi0h1uPs/zGwtcBzQDRgPLAOyk3VPJSQiIrXE2s15/PLp\nz3hr/joAOrVqxl9O34dxgzqlODIp8atjBjN/zRbeXZjDNc/NoUvrdMYP1t9Psn30ZRjQrqcjIjXD\n3R8DHoNdS4Dc6+43JOt+6rIlIlIL/Hf2Ko76+zu7kpFjh3XhtZ+MUTJSyzRulMbtE0YysHNLioqd\nSx6eySfRdLSSHIVFxczUgHaRGmNmV5jZATG7rgfeSuY9lZCIiKTQui07ufihj7nk4Zls2F5Aq2aN\nufmM4dwxYSTtMpqmOjwpQ5vmTbh/4gF0bZPOjoIiJt43g+ycbakOq976YvUWtuWHbuwa0C5SI/4O\nHB3z8++Accm8oRISEZEUcHee/2QF377lbV6ZsxqAQ/pn8spPDuPUkVmYaVHi2qxrm+bcP/EAWqc3\nZv22fM69ZzrrtuxMdVj10vRo/ZEOLZvRO7NFiqMRaRDKmvY3qSocQ2JmS+K8trt7vzjPFRGpt9Zs\nzuPqZ2fzxry1ALRs1pjfHDuEsw7ooUSkDhnYuRX/Pnc/zrlnOsvWb+f798/g0QtHa0rmBJuRHRKS\n/Xu3078PkZpRMu3vP9x9TbQv5dP+pvH1giglWzOgd7T1AJpHryX7mlXy2iIiDUZRsfPA+9kc8be3\ndyUjYwd25PUrxzDhwJ5qbNVBB/bN5O/f3Rcz+OyrTfzwwY/JKyiq+ESplPzC4l0Lgh7ULzPF0Yg0\nGDU+7a+5Vy3hMbPWwBtAIfBr4D13LzKzRsBhwJ8IycgR7r4l3sAEzMyr+vcjIrXTnBWbuPrZ2Xz6\nVVjcrXV6Y357/FBOH6XuWfXBfVOXct2LnwMhyfzXuaM0TXMCvLtwHef8ZzoA0351ON3aNk9xRJIK\nZoa76xdlDTKzM/nmtL9fUolpf919fFz3iyMhuQ04Ctjb3fPLOJ4OzAZecfcr4glKAiUkInXftp2F\n3Py/Bdw7dSnRum6ctG83rjluKB1baT2F+uTOtxbxl1fnA3D44E5MOnukkpJquvb5Odz//pfs1a01\nL19xWKrDkRRRQpJa0bS/19W2aX9PAZ4vKxkBcPc84Hng1OoEJiJSl5UMWv/W397mP++FZKR3Zgse\n/P4B3HrmCCUj9dAl4/rzsyMHAjD5i7Vc9sgsCoqKUxxV3eXuu7o2HjGkc4qjEWnQkj7tbzwj7zKB\nJhWUaRKVExFpcOas2MT1L85lRnZYO6FJI+Pisf24ZHx/0pvoG/P67PJvDaCw2Ln1zYX87/M1XPHo\nLP5x1giaNNKwyqqat2oLKzbuAODIoUpIRGqSmY0Bst19mbtfX4nyw4Hh7v5APPeL5zfkYuB0M2tT\nTkDtgNOBeGfnKn297mZ2j5mtMLM8M1tqZreYWdtkX8fMDjaz/5pZrpltN7NPzezHZrbb5xZd/2oz\ne8LMFkaDe4rNrG8871tE6p712/L5zbOzOeH293YlI4cP7sTrV47lp98epGSkgfjJEQO4bHx/AF6Z\ns5orHp3FzkINdK+qN+aFyX26tE5nr26tUxyN1BVm1t7MfmBmz0Ttse1mttHM3jWziVbOoL2qtPli\nzjnPzD40sy3RPaaY2XF7KJ9uZteb2RdmtsPM1pjZ42Y2eA/nJKQdHIcpwPmlYrnKzHLLKX8ycG+8\nN4vnCck/gX8A083sRuAdYA3QGRgLXA10AW6MN6gSUWP+faAD8BwwHzgA+DFhOrJD3H1DMq5jZicB\nTwE7gMeB9cAJwC3AwcB3S91mP+D3QDFhurSNQLIri4jUAnkFRdw/LZvbpyxiS16YZKRPhwx+d/xQ\nxg/WSusNjZnxs28PpLDY+efbi3llzmo23jODu84dRev0ijoYSIn/fR4SkiOGdtLED1IV3wEmASsJ\njeplhDbqqcDdhAX/zog9IY42H2b2V+CnwHLgX0BT4EzgRTO7zN3vLFW+KWFSqIOBGYTFB3tEsRxn\nZuPdfUapcxLSDo5TWf/o0klS27bKg9oBzOxW4HLKnpPYgNvc/cfVjA0zew04Arg89i/WzP4GXAn8\n090vSfR1zKwV4UlQK+Bgd58V7W9KqNyjgbPc/YmYc7oBfYBP3X2rmU0BxgAD3D2up0Ua1C5SuxUX\nOy98upKbXpu/q2tJRtNGXPGtAVxwSB+aNlY3nYbM3blt8iJu/t8CAIZ2bc19E/enU6v0FEdW+63e\nlMfoP70JwP0TD2DswI4pjkhSqSqD2s1sHJDh7i+X2t+JkAhkAae7+7PR/njafAcBU4GFwP7uvjna\n3xOYCbQABrv7sphzfk34sv4Jdz8zZv8JhLHXc919WKmYE9IOjkdZA9nN7Frgd+6+2+P+PR2rjLj+\nt4ySjUOAe4BZhO5Zs4D/AIcmKBnpCxxJ6L92Z6nD1wLbgHPMbI9zAMZ5ne8QstFHSyomQDSQ/xpC\n0nVx7IXcfaW7T3X3rZV9jyJSd01blMOJd7zHTx7/hBUbd9AozfjegT156xfj+eHYfkpGBDPjim8N\n4I+nDCPN4PNVmzlt0jSW5mxLdWi13rOzVgBh0dDRfdunOBqpS9z9rdLJSLR/LaGXjwHjYg5Vuc0X\n/ezAjSXJSHTOMuAOwnp8F5Q650fROVeViutF4F1gqJmNLdmfqHZwXRH3/5ju/r67X+ju+7n7gOj1\nIneflqDYSuYxfr2Me28lZKYtCJlroq8znlBpXivjeu8A24GDzUzP3kUamI+y1zPh3x8w4e4PmbMi\n/D90xJDOvPaTMdx4yjDNniW7mXBgTyadPYqmjdNYvn4Hp0+axmdfbUx1WLVWcbHz2IzwxfLJI7pp\n6mRJpILoNXYBv3jafCVty7LOeYWQxBxessPM+hG6Zy1w9y8rcw6JawfXCdX6Cs/MMsxshJklY3Lw\nQYQKsqCc4wuj14FJuM6g6HW3c9y9iDBGpDGgAesiDcQnyzdy7j3TOf2f7zNtcRjTNzyrDY9dNJq7\nz9uP/p1apjhCqc2O2qsLD048gFbpjcndls8Zd73Py5+tSnVYtdL7S3L5Mnc7AGcd0DPF0Uh9YWEB\n7/MIbcJXYw5Vqc1nZi2A7sBWd19Txq2q1K6s4JxEtIPrhHgGtWNmWcCthAE/jQgfWOPo2KGEwT2X\nuPtb1YitZBavTeUcL9lf0eCaeK6TqHtX24IF5dXDr2VmZpKZqVmWRZJh7spN3PK/BbvWQwAY0rU1\nPz1yIEcM0WBbqbwD+2by5I8O4oJ7Z7BqUx6XPjKTL1b358ojBpKWpnpU4pHp4enI8Kw27NWtzAk9\npZ7Izc0lN7e8SZsS7s/AXsBL7v6/mP1VbfPVVLuyNrRFa2wgc5UTEjPrCnxImLHgBaATcFBMkQ+j\nfd8lyYuoNASDBg2qsMy1117Lddddl/xgRBqQeas2c+sbC3l17upd+wZ0asmVRw7k6L26qAEpcRnc\npTXPX3YIFz80k4+/3MBtkxcxZ8Umbj5jX9plNE11eCmXs3Unr0f/5vR0pP677bbbuP76Cpe4qDYz\nu4IwI9bnwLlJv2H9cZ2ZXVd6p5klfB7zeJ6QXEtIOI509ynRqPpdCYm7F5jZu4RB79VRkvmV9/VI\nyf6KOuLGc51E3bva5s+fX2EZPR0RSQx3Z/rS9Ux6ezFvzV+3a3/fDhn8+IgBHL9PNxopEZFq6tQq\nnUcuPJDfPTeXxz9azpT56zjuH+9y+/dGMrJnu1SHl1JPf/wVBUVORtNGnDC8W6rDkSS7/PLLmTBh\nQoXlKvPlbHnM7DLCFLtzgCPcvXTbraptvppqV9aGtmhV/8OL+4lKPAnJscAL7j5lD2WWAdUdVzKf\n8EGU1zduQPRaUZ+meK4zHxgVnTMrtnDUB7EPYUBUQhZ/3JOBA+tF10CRWq242PnfvDX88+3FzFr2\n9e/2XpktuPzwAZy8bzcaa6VtSaBmjRvx59P3YVSvdvz2+Tms3JTHd/75PpeO789l4/s3yFnadhYW\n8cD7YbzvSSO6k9Esrl7lUocku8u5mf0EuBn4jJCM5JRRrEptPnffbmYrgG5m1rmMcSTltSuh6m3R\nRLSD4+LuNfpLKJ6bdebrgTTlKQAy4rh2rJKE59ulD5hZS8ITmO3AB0m4zmRCJTi6jOuNJcxqMNXd\nC8o4LiJ1RH5hMU98tJwjb3mbHz748a5kZO/urbljwkgm/2wcp4/KUjIiSXPG/j149pJD6Nshg6Ji\n5x9vLuSUO6cyf/WWVIdW4x6bvpwVG3eQZnDBwb1THY7UcWZ2FSEZmQmMLycZgfjafJOj17LOOTZ6\nfbNkh7svJnxZP9DMepVzjsdcFxLXDq4T4vlfdj1h6rI9GQisrqDMHkWLCb4O9I4et8W6gZDwPODu\nOwDMrLGZDYrmbY77OpGngBzgTDMbVbLTzJoBfyBUmknVeX8ikjrrt+Vzx5RFjPnLFH751GcsXhfW\nhTikfyYPff9AXrzsUI7bp6u6Z0mNGNqtNS9dcSjnR43wuSs3c8Jt7zHprcUUFTeMxXG35xdy2+RF\nAJwyIosBnVulOCKpy8zst8CfCAshHlHBaubxtPlK1jO52szaxpzTG7gUyAPuK+ecv1jMbCjRKvGH\nEhZGfLtkf5zt1zqryiu1m9lTwFGEFchXl16Z0cwGAHOBh9x9YrWCC8nFVMKYlReAeYT5lscBXwCH\nlFSyKONcSlhApm+814k55yTgSWAn8BghETuRkGw9GbvKZsw59/F1/7mjo/s9C8/VyMIAACAASURB\nVJR81fXvqqzTopXaRRJrzopN3D8tm+c/XUl+YTEAZnDM3l340dh+7JOV9InzRPZo2qIcfvHUZ6zY\nGNoY+/Zoy+9P2pthWfV7tqk7piziptfm06SRMfln4+jRvkWqQ5JapIortZ8H3EvoZnU7Zc9Sle3u\n98ecE0+b76+E1dJXEJKapoQJndoDl7n7pFLlmxKegBwEfEx4gtILOJ2QwBzu7h+VOqfK7ddEMbMx\npfe5+zvJuBfEl5AcCLxH6Ev3E8KH8nOgNTAGuAXoDYxy97nVDtCsOyETPBrIBFYBzwA3uPummHK9\nopiy3b1fvNcpdc5BwNWEypMOLCKsRn9bWZmCmRWz5wE9F7j7AxW955jrKSERqaaComJem7ua+6dl\nMyP769/bGU0bcdqoLM4/uDd9O2oNEak9tuQVcOPL83hsxnIgJM1njOrBz48aVC8X3ty0vYDD/jKZ\nzXmFnHdQL64/ae9UhyS1TBUTkmuB31VQ7G13j12EsMptvuiccwlPRIYCxYRE4yZ3f6Wc8unAr4Cz\ngJ7AZkLXrOvc/Ytyzqly+zURSrVpDfCShw9JuV88DV4zm0h4fFXWiLNCYKK7P1zN2Bo8JSQi8Vu9\nKY8nP1rOwx8uY/XmvF37e2e24LyDe3PaqCxapzfZwxVEUuudBeu47sW5LIm6FLZq1pgrvjWA8w7u\nXa8Gvf/8yU956uOvaN6kEW//chydWqWnOiSpZaqSkEhimNn5lPqSPfapUsLvF2+DN+qadQnh0VEm\n4ZHYB8Dt7l7xXLVSISUkIlVTUFTMlC/W8viM5UyZv5bY7vdjB3bk/EN6M3ZAR60hInVGQVEx90/L\n5tY3F7IlrxAISfUV3xrAicPr/uxvr85ZxY8emgnAr48ZzA/H7tbBQUQJSQMQd0IiyaeERKRysnO2\n8cRHy3ny469Yt2Xnrv2t0xtz6sgszj2ol7plSZ2Ws3Unf3t9AY/NWEbJfwu9Mltw6fj+nDKiO03q\nYGKydnMeR/39HTZsL+DAPu155MLRmkhCyqSEpOaZWelub+7uv0/a/dTgrb2UkIiUb9vOQl6bu5on\nP/qK95fkfuPYQX0zOfOAHhy1VxfSmySty6tIjft85WZufXMBr839eumDrHbNuXhcP04dkUXzpnWj\nvucXFjPxvhm8tyiHVs0a88pPDiOrnQayS9mUkNS8aAxJrNo3hkRqhhISkW8qLCrm3UU5PDdrBa/P\nXcOOgqJdxzq2asbpo7L47n496N2hussgidRu81Zt5vbJi/jvnFW7npi0ad6E74zK4uzRvWr1v4Gi\nYufHj83ipc9WAXDLd4dzyoisFEcltZkSkppX1nop7v5l0u5XUYPXzO6J89ru7t+P81xBCYkIgLvz\n2VebeHbWCl76bCU5W/N3HWucZowb1JEz9uvB+MGd6mS3FZHqWLhmC7dPWcRLn636xpolYwZ25JzR\nvRg3qGOt+nfh7vzm2dk8Oj3MIHbZ+P78/KhBKY5KajslJPVfZRKS0o9sKiupj3YaAiUk0lC5O1+s\n3sJ/Z6/i5c9WsSRn2zeOj+zZllNGdOe4fbrRPqNpiqIUqT1Wb8rj0enLeHT6MtbGjKNqn9GUY4d1\n4aR9uzOqZ7uUTuiwbWchVz392a4nI+ce1IvrT9yLmDXiRMqkhKT+q0xCUtYS95WSzEc7DYESEmlI\n3J3PV23mv7NX8d/Zq1laKgnp0yGDk/ftzskjutErs/Z2RxFJpYKiYv73+RoeeD+bD5as/8axbm3S\nOWF4N769V2f27dGuRgeQL1q7lYsf+piFa7cCcPqoLP5y2j6a8U4qRQlJ/acxJLWYEhKp79yd2Ss2\n8cqc1bwyexXZudu/cbxrm3SO2bsrJwzvyr492uqbVJEqWJa7nRc/W8nzn6xgwZqt3zjWtkUTxgzo\nyPjBHRkzoCOZLZOz4OKm7QXc8dYi7puaTX5RMY3SjF8dPZgfHNZH/56l0pSQ1H9KSGoxJSRSH+UV\nFPH+klze+HwNb8xbw5rNO79xvHvb5hw7rAvHDOvKvllt9Q2qSAJ8sXozz3+ysszE3wwGdW7FyF7t\nGNWzHSN7taN3ZotqJQzzV2/h6Zlf8fiM5WzaUQBAp1bN+MdZIxjdN7Na70UaHiUk9V91FkbsCnwL\n6A6U9dVKUucrbgiUkEh9sX5bPpO/WMsbn6/hnYXr2J5f9I3jWe2ac9ywrhwzrCvDs9rom1ORJFqa\ns40pX6xlyvy1fLhkPflFuw8VbZ/RlKFdWzOgc0v6dmxJVtvmdGvbnHYZTWjVrAnpTdIo9tBFLHdb\nPqs27mBpzjZmLtvIR9nrd3XNAkhvksZFh/XlorH9aNmscU2+VaknlJDUf3ElJGZ2PfArIPY3i/H1\nEvOGBrVXmxISqauKip1Pv9rI2/PX8c7CdXy6fOM3Vk0HGJ7VhiOHduaIoZ0Z1LmVkhCRFNi2s5Dp\nS9fz8ZcbmLlsA58s37jbFwbx6tYmnVNHhmmIu7RJT8g1pWFSQlL/VTkhMbPvAQ8Ck4E7gKeB+4DX\ngXHA94Engbvc/e0ExtrgKCGRumTVph28s2Ad7yzI4b1FObu6aZRo2jiNQ/t34IghnfnWkE50bq0G\nikhtU1hUzPw1W5i1bCML12xhwZqtLM3Zxtotebt9qVBay2aN2SerDaN6tePgfh04sE97dbmUhFBC\nUv/Fk5C8B/QE+rp7YTQt8HXufkN0/CjgZeAUd38x0QE3JEpIpDbLKyjiw6XroyRk3Te6aJTo0b45\nYweGQbOHDuhAi6bqriFSFxUUFbNmcx6bdhSwNa+QHQVFNE5Lo3Ejo22LJnRt05zW6Y31pFOSQglJ\n/RdP62AY8Ki7F8bs29U1y91fM7PXgF8ASkhE6om8giJmLtvAB0vW88HiXD5ZvnG3vuctmjbioL6Z\njBnYkTEDO1Z7YKyI1A5NGqWR1a4FWe1SHYmI1EfxJCRNgNyYn3cAbUqVmQP8KN6gRCT18gqKmLVs\nIx8syeX9Jbl8smz3BARgaNfWUQLSgVG92tGssYaOiYiISOXFk5CsArrG/LwM2KdUmW5AISJSZ2zO\nK2DWso18/OUGPlySy6zlG8kv3D0B6dcxg9F9MxndN5MD+7anUyuNBREREZH4xZOQzAL2jvl5MnCR\nmZ0DPEMY2H46MLXa0YlIUrg72bnb+fjLDWF2nS83sGDtFsoastQ3SkAOUgIiIiIiSRDPoPbzgTuB\nvdx9qZn1ICQpsT1LC4Bx7v5BogJtiDSoXRJl285C5qzYxMzoCcjMZRtYvy2/zLIDO7dkVK/2HNQv\nk9F92tNJs2GJiEgKaVB7/ZeQldrNrA/wM6AfkA3c6e6zq33hBk4JicQjr6CIeas289lXm6JtI4vW\nbS3z6UdG00bs27PtrtWZR/RoR5sWTWo+aBERkXIoIan/EpKQSHIoIZGK5BcWs2DNFmav+Dr5mL96\nC4XlLBiQ1a45+/Vqx6heIQEZ1LkVjRul1XDUIiIilaeEpP7TogAidUTu1p3MW7WFeas28/mqzcxb\ntZlFa7eWm3x0aNmM4Vlt2CerLftktWFYVhs6tGxWw1GLiIiI7FmVExIz+w5wMXC2u68s43h34AHg\nDnd/pvohijQshUXFLM3ZFiUdIQGZt2oza7fsLPecti2aMKx7G/aJSUC6tE7XGiAiIiJS68UzqP01\noKO7j9xDmY+Ate5+bDXja9DUZat+Kyp2lq3fzsI1W1i4diuL125lwdotLFyzlZ1lTLdbomf7Fgzp\n2oohXVszpGtrhnZtTVa75ko+RESkXlKXrfov3pXaX6qgzAzghDiuLVLv5BcWk527jUVrt7JwzVYW\nrt3CorVbWZKzrcx1PkqkN0ljUJfWDI2Sj6FdWzOoSytapWvQuYiIiNQf8SQk7YG1FZTJBTrEcW2R\nOsndWbN5J0tztpGdu43snG0szdnG4nVbyc7dTlE54zwAGqcZvTtkMKBTS/p3asmgLiEB6Z2ZQaM0\nfSEkIiIi9Vs8CUkOMKCCMgOAjXFcW6TWcnfWbd1Jds72kHDEJB5f5m5nR0HRHs9v2jiNfh1bMqBT\ny13Jx4DOLemVmUETzXQlIiIiDVQ8CclU4EQzG+zuX5Q+aGZDgJOAF6sbnEhN255fyFcbdrB8/faw\nlfw5et26s7DCa3Ro2Yw+HVrQp0MGfTpECUjnlmS1a6EnHiIiIiKlxDOofX9gGrAJuAF4FVgBdAeO\nAX4LtAEOdfcPExptA6NB7Ym3I7+IlZt2sHLjDpav38HyDV8nHl+t305uOauXl9Y+oym9M1vQu0MG\nfTIzwmuHDHplttAYDxERkQTSoPb6L66FEc3sQuAOoFEZh4uAS9z97mrG1uApIamanYVFrN6Ux8qN\neazatINVm6LXjXmsjP68cXtBpa7VKM3o2iadHu1a0KN98+g1PPXonZmh1cxFRERqiBKS+i/uldqj\nrlmXAAcCbQljRj4AJrn7vIRF2IApISlbUbFz97tLWLUpj5Ubv048crZW7ulGiU6tmtGjfQt6tGse\nvbYgK0o+urZJ1wrmIiIitYASkvov7oREkk8JSfn2vva1PY7naJ3emG5tm9O1TTpd2zanW5t0urZp\nTte26XRr05wubdJJb1LWAz4RERGpTZSQ1H/xDGrfjZmdCBwOGPCOuz+diOuKlOfAPu3JLyoOCUeb\n5nRr+83XjGYJqdoiIiIikmSVekJiZicAvwB+6+5vlzp2H3AOIRkBcOA5dz8tsaE2LGaWCeTk5OSQ\nmZmZ6nCkDsrNzeW2227j8ssvVx2SuKgOSXWpDkl15ebm0qFDB4AO7p6b6ngkOSrbSf5EYCTwjVmz\nzOx44FxgO/AH4CpgCXCymZ2VwDgbokwI/xBF4pGbm8v111+vOiRxUx2S6lIdkuqKqTvKaOuxyiYk\nBwDvunteqf0TCU9ELnD337n7TcBhQB7wvUQEaGbdzeweM1thZnlmttTMbjGztsm+jpkdbGb/NbNc\nM9tuZp+a2Y/NrNzPzczOM7MPzWyLmW00sylmdlxVYhURERGR+CSq7Sg1p7IJSRdgbhn7xxBm19o1\nZsTdVwMvAyOqG5yZ9QVmAucRZvC6GVgM/BiYZmbtknUdMzsJeBs4FHgGuA1oAtwCPFrOff4K3Ev4\nvP4FPAjsDbxoZpdU6k2LiIiISFwS1XaUmlXZhKQd8I05Vc2sJ9AeeK+MqaCWkphHa5OADsDl7n6a\nu//G3Y8gJAWDgRuTcR0zawX8GygExrr7he5+FbAv8D5wupmdUeqcg4CfAguBYe7+M3e/HBgFrAf+\nGn1mIiIiIpIciWo7Sg2qbEKyBcgqtW9U9DqrnHNKd++qkijDPRLIdvc7Sx2+FtgGnGNmzZNwne8Q\nKvOj7r7r/bl7PnANYQD/xaWudTGh+9qN7r455pxlhEUkmwEX7CnWuuzpp2tmYrVE3Sfe61T1vMqU\nr26Zmvrsk011KP7yqkNfq4n3ojpU/ZhqM9Wh+MtXVC7ZdShRbUepeZVNSGYDx5lZy5h9pxAa4O+V\nUb4PsKqasY2PXl8vfcDdtwJTgRbA6CRcZzzhvb1WxvXeIQziP9jMmpQ6h3LOeYWQxBxeQax1lhqT\n8ZdXQyBQHYq/vOrQ19SYjK+86tDXVIfiL5/qhITEtR2lhlU2IXmY0G3rbTO7wsxuJwxaXw1MiS1o\nZkYYd/F5NWMbREgKFpRzfGH0OjAJ1xkUve52jrsXEbqkNQb6AphZC6A7sNXd11QjVhERERGJT6La\njlLDKrt63H+AU4GjCOMoDCgAfhw10GN9izCo+41qxtYmet1UzvGS/RXNmBDPdap6TqJiFREREZH4\nqD1WR1UqIXH34mjq2rOAg4Fc4Bl3/6SM4h2AW4EXEhZlA7Z06dIKy2RmZmrBKREREalTcnNzd60z\nsnnzZhYs2P3BRmXaQVIPuHut3IC/AEXAleUcvy06/sNEXweYHu0bUc45s6Pjg6KfWwDFwKZyymdG\nx1dV4f1nEh47atOmTZs2bdq0NfQts6bajtpqfqtsl61UmE/oGlZeP78B0Wt5/QSrc535hFnEBlJq\nFjEza0QYtF9IWJUed99uZiuAbmbW2XcfR1LZWHdx91wz60Dlpk/OdXctgysiIiJ1hpllkth2TqLa\njlLDanNCMiV6/XbpA9FsX4cQZrv6IAnXmUwYtH808Hip08YSnoi85e4Fpc45Ozrn/lLnHBu9vllB\nrN8Q/eNToiEiIiL1ThLaOYlqO0oNq+wsWzXO3ZcQpm3rbWaXlTp8A5ABPODuOwDMrLGZDYrmoI77\nOpGngBzgTDMrWW8FM2sG/IHw6HBSqWv9k5CVX21mbWPO6Q1cSliX5b5KvXkRERERqZI423xSC1jU\np65WipKLqUAnwiD5eYS5o8cBXwCHuPuGqGwvwnS82e7eN97rxJxzEvAksBN4jLDa+omEx4BPuvuZ\nZcT7V+BKYAUhqWkKfJewov1l7l46iRERERGRBImnzSepV6sTEgAz607Iao8m9DNcBTwD3ODum2LK\n9SKM6ch2937xXqfUOQcBVwMHAenAIsIUyLd5OR+cmZ1LeCIylDCQ/WPgJnd/pcpvXkRERESqJJ42\nn6RWrU9IRERERESk/qq1Y0hERERERKT+U0IiIiIiIiIpo4RERERERERSRglJPWNmXczsPjNba2Y7\nzGyOmR2W6rikbjCza82suNS2MtVxSd1kZr+O6tA/Uh2L1B1mdomZfWpmm6JtmpkdW/GZIkH0u2d6\nVH/WmtkLZrZXquOS8ikhqUfMrA1hqjsHjgEGA5cDa1MZl9Q5XwCdgS7RNiy14UhdZGajgQuBT1Md\ni9Q5y4FfAiOAUYSFh58zs71TGpXUJWOA2wmzpI4HCoE3YteJk9qlNq/ULlV3FbDS3S+I2fdlqoKR\nOqvQ3delOgipu6IvRx4CLgCuS200Ute4+4uldl1jZhcTGpdzUhCS1DHufkzsz2Z2DrCJsFL7yykJ\nSvZIT0jql5OAD83sMTNbY2azzOzSVAcldU5fM1thZkvM7FEz65PqgKTO+RfwhLu/nepApG4zszQz\nO5Owwva0VMcjdVZrQptXCyLWUkpI6pe+wCXAYuDbwN+B/zOzS1IaldQlHwDnA0cBPyB02ZpmZu1S\nGZTUHWZ2IeF30TWpjkXqLjPb28y2ADuBO4FT3H1uisOSuutWYCbwfqoDkbIpIUkCMzvNzP5hZu9E\nA6qKzeyBCs7pbmb3RN9M55nZUjO7paz+jmY2wcy2RNtmMzskOpQGfOzuV7v7p+5+P/APwsrxUoek\nqg65+2vu/pS7z3H3ycBxhHp1XlLeqCRNKuqQmQ0EbgQmuHtxst6b1IwU/l8GYSzbcOAAYBLwgJkN\nTegblKRLcR0qKXMzcDBwmms18FpLK7UngZnNAvYBtgJfEQaXP+zu55ZTvi8ha+8APAfMJ/wSPpzw\nS/kQd98QUz6DMOi4xAp332lm2cDr7n5RTNmzgUnu3ipx71CSLVV1qJxrTwbmubsS2zokFXUIOBO4\nB4hNRhoRJtooAjLcvSAR70+Sr5b9HvofkO3uF1b3fUnNSXUdMrNbgDOAce6+MIFvTRLN3bUleAPG\nAv1i/lwMPLCH8q8R/rO+pNT+v0Xn3lnJ+z4MvF1q3++BOan+TLTVjTpUxnXTgZXANan+TLTV/jpE\n6Kc9tNQ2nTDAfUiqPxNttb8O7eHab+7p3tpq55bKOkToprUSGJjqz0FbxZuekCSZmY0FpgAPeRnf\nCETfBiwClrp7v1LHWgKroh87ufuOCu61H2Ha3+uBx4GRwL+BX7n7P6v7XiQ1argO3QS8CCwjfOv0\nW+BQYJi7L6/ue5HUqMk6VMa1pwCz3f2KuIKXWqGGfw/9iTAT0nKgFfA94BfAse7+enXfi6RGDdeh\nO4CzCZP9zIs5tNXdt8X/LiRZNIYk9cZHr7v9knX3rYQEowUwuqILuftHwMmEx5OzCU9HrlYyUu8l\nrA4BWcAjhEfjTwE7gNFKRuq9RNah3S5Rjbik7khkHeoCPEj4PfQGYS2So5WM1HuJrEMXAy0JT9ZW\nxmw/S0ikknBahyT1BhH+w15QzvGFwJHAQMI3C3vk7q8AryQsOqkLElaH3P2sxIYmdURCfw/FcvfD\nqxea1BGJ/D10wZ6OS72VyDqkL9zrGP2FpV6b6HVTOcdL9mt1USmP6pBUl+qQVJfqkFSX6lADpoRE\nRERERERSRglJ6pVk/G3KOV6yf2MNxCJ1k+qQVJfqkFSX6pBUl+pQA6aEJPXmA0boE1mWAdFreX0q\nRVSHpLpUh6S6VIekulSHGjAlJKlXMjDr26UPRNPcHQJsBz6oyaCkTlEdkupSHZLqUh2S6lIdasCU\nkKSYuy8hTHHX28wuK3X4BiCDsIhQleb+l4ZDdUiqS3VIqkt1SKpLdahh08KISWBmJxHWA4Ewn/pR\nwBLg3Whfjrv/IqZ8X8L82p2AFwiL+IwGxhHmYT/E3TfUSPBSK6gOSXWpDkl1qQ5JdakOSWUpIUkC\nM7sW+N0eimSXsQppd8I3AEcDmYQVSZ8BbnD38qbAk3pKdUiqS3VIqkt1SKpLdUgqSwmJiIiIiIik\njMaQiIiIiIhIyighERERERGRlFFCIiIiIiIiKaOEREREREREUkYJiYiIiIiIpIwSEhERERERSRkl\nJCIiIiIikjJKSEREREREJGWUkIiIiIiISMooIRERERERkZRRQiIiIiIiIimjhEREpIaZWS8zKzaz\ne5J8n2wzW5Kga9VIzCIi0vAoIRGRBsPM0szsQjN7y8xyzSzfzNaY2adm9m8zOyHVMSaYV7ZgJRMO\nr8o16wMz29vMisxsg5m9Z2b/jepPsZnlmdnrMfs2RfvbpDpuEZG6pHGqAxARqQlmlga8DBwFbIj+\n/BXQFNgLOAsYBLyYqhhruRXAEGBTqgOpYWcCk4Ar3b0AwMyGAnOAB9z9opKCZtYL+MDdG9pnJCJS\nLUpIRKShOIuQjMwCxrr71tiDZpYOHJiKwGoJ29NBdy8EFtRQLLXJcOBEd499MjSW8KRoSmxBd//S\nzN6tyeBEROoDddkSkYbiYEIj8v7SyQiAu+e5+9ul95vZ/mb2uJl9FXXRWWlmr5nZd0qVO9/MnjKz\nxWa2Peq+856Zfa+qgZrZgdG1VpnZTjNbZmb/NLOu5ZS/zMzmmNmOKM7bzKx1Fe53LbCE8PmcH3U7\nKtnOjcqU2aUrdr+Z9Y3izjGzzdHntFdUroOZ/Sv6/HaY2XQzG5eI958sZrYv8FapZARgTPT6Thmn\nrUtuVCIi9Y+ekIhIQ5FLeAowsLInmNmFwJ1AIfACsBDoBOwHXAw8GVP8TkI3nreBVUAmcCzwoJkN\ndPdrK3nPicBdQF50z+XAAOD7wAlmdqC7fxVT/lbgcmBldF4BcBLhaU9TYGclbjsFaAP8BPgEeC7m\n2CeViRvoA3wIfA7cC/QGTgWmmNnBwKuE7l6PAe0JT6z+G302se+nSu8/yboCD5Wx/zAg291XxO40\ns+bAmzURmIhIveLu2rRp01bvN2BfQuO8CHgAOAXouYfyQ4B8IAcYXMbxbqV+7lNGmcbAG9F9u8bs\n7wUUA/eUKj8gKjsf6FLq2HhCYvR0zL6DouvMB9rE7G8KTIuOLank51NmTJWIuWR/EfCrUseuiY7l\nAneUOnZ2dOxv8b7/ataH44BlZeyfCkzYw3n9orjvTXWd1qZNm7b6sqnLlog0CO7+CfA9YHX0+jSQ\nHXUvesbMji91yiVAI+AGd/+ijOutLPXz0jLKFAJ3EBKTb1UizEuisj9x99WlrjWF8MTgBDPLiHZP\nJHSzutFjBlK7ez7w60rcL5GygT+X2nd/9NoU+GWpY48QEox9Y/ZV9f1Xx5nAotgdZjaYkOSt2sN5\nYwif+W7d+0REJD7qsiUiDYa7P2VmzxK+bT8UGBG9ngScbGYPuPv5UfGSAe6vVubaZtYD+BVwONAT\naB57a6B7JS4zOnodZ2YHlHG8EyFJGkgYnD8i2l/WWIb3CE8tason7l56rEVJ0rbA3bfFHnD3YjNb\nA2TF7K7q+6+OccDdpfaNJTwVe38P542NXsv6zEVEJA5KSESkQXH3IkI3qjcAzMyA0wjjHs4xs2fc\n/QWgbXTKijIvFMPM+gAzCOMw3gVeI4yXKCKMpTgPaFaJ8DKj15/v6S0ALaM/l6x3sWa3Qu5FZpZT\niXsmym5T3UYxlHksUgg0ifm5qu8/LmbWn5Agln7KMQaY4e55ezj9MGCluydkwUkREVFCIiINXPSt\n/lNmtg9hzMPhhK5BG6Mi3al4utufAe2A8939wdgDZnYmcH4lwylpuLcu/UShgvKdCV2mYu/bCOhA\nGBReV1T1/cdrPGGsSuknIWMI44vKZGbdCYP3H0teaCIiDY/GkIiIBFui15L1OD6IXo+pxLn9otdn\nyjg2jsqvbl5yzzF7LPW1mdHr2DKOHUbo3lRZJd27qnJOolX1/cdrHDDb3XfNQGZmfYmemphZIzMb\nUsZ5e5ruV0RE4qSEREQaBDM708yOiLpolT7WBbiIkDiUNDYnERrpvy2rcRp9W14iO3odV6rMUYTp\naivrdkI3plvMbEAZ92xiZofG7LqPkEBdbWbtYsqlA3+qwn0hrF7vhPEvqVLV91+y/77YNVMqYRxh\n3ZVYRxNmz5oKHMA3B9uXKBnQ/lYl7yMiIpWgLlsi0lAcCPwYWG1m7wEls2L1IUwBmw485+5PA7j7\nPDO7hJCYzDKz5wnrkGQC+xO6F5XMnHUncAGh69dThMHcexNWhn+CMKNThdx9frQOx3+AuWb2KqG7\nWBNConAYsBYYGpWfZma3AZcBc6J7l6xDsp49zxZV+t7bzOxD4DAzeyi6bxHwgrvPrux1qqOq7z+G\nERKFworuYWYDCeuL9IjZtxdwLpAbfQ7HAH8tdV4acASwvqxZ10REJH5KSESkofgroXF7BDAM+DYh\nCcklLAz4sLs/GnuCu99tZrMJg6zHEhr6OcBnxMzQ5O6zo1XH/0BYDLExmF1ljQAAAUVJREFU8Clh\nrZPNwHfZvduWl7EPd3/YzD4hjEsZDxwJbCMkOU8Cj5cq/2Mzmw9cSnjKk0voOnZ1FGdlu4tBWBvk\nFkIidSahob8cKElIyox5D/srOkbpY1V9/5FhhC53L+/hPiXGEZK2hWZ2H+HzWklILp8wszuBT919\nc5SEPAu0IKy30hdwM5tGSEjvd3eNJxERqSbbfZZGERGRusHM2hCSipvcvcK1V8zsUcKCmIckPTgR\nEakUjSEREZG67DDC2iG3VLL8WGBy8sIREZGqUpctERGps9z9JUKXqgpFK7F3IXTRExGRWkJPSERE\npKHoSZiYYGqqAxERka9pDImIiIiIiKSMnpCIiIiIiEjKKCEREREREZGUUUIiIiIiIiIpo4RERERE\nRERSRgmJiIiIiIikjBISERERERFJGSUkIiIiIiKSMv8PcLjwpGXOeGQAAAAASUVORK5CYII=\n", 333 | "text/plain": [ 334 | "" 335 | ] 336 | }, 337 | "metadata": {}, 338 | "output_type": "display_data" 339 | } 340 | ], 341 | "source": [ 342 | "pairrange = np.logspace(-5.5, -2, 200)\n", 343 | "\n", 344 | "for stat in pairstats:\n", 345 | " plt.plot(pairrange, MAGIC[stat]['T'].ne(pairrange), c=statcolors[stat], label=stat)\n", 346 | "\n", 347 | "plt.xscale('log')\n", 348 | "plt.xlabel(r'Scaled time, $\\mu T$')\n", 349 | "plt.ylabel(r'Scaled inverse coalescence rate, $2\\mu/c(t)$')\n", 350 | "plt.tick_params(which='both', top='off', right='off')\n", 351 | "plt.legend(bbox_to_anchor=(.2, .3))\n", 352 | "\n", 353 | "tlim = plt.gca().get_xlim()\n", 354 | "nlim = plt.gca().get_ylim()\n", 355 | "\n", 356 | "plt.twinx()\n", 357 | "plt.ylim(n/nfactor for n in nlim)\n", 358 | "plt.ylabel(r'\"Effective population size\", $N_e(t)$')\n", 359 | "\n", 360 | "plt.twiny()\n", 361 | "plt.xscale('log')\n", 362 | "plt.xlim(t/tmrcafactor for t in tlim)\n", 363 | "plt.xlabel('Time (years ago)')" 364 | ] 365 | } 366 | ], 367 | "metadata": { 368 | "kernelspec": { 369 | "display_name": "Python 3 (ipykernel)", 370 | "language": "python", 371 | "name": "python3" 372 | }, 373 | "language_info": { 374 | "codemirror_mode": { 375 | "name": "ipython", 376 | "version": 3 377 | }, 378 | "file_extension": ".py", 379 | "mimetype": "text/x-python", 380 | "name": "python", 381 | "nbconvert_exporter": "python", 382 | "pygments_lexer": "ipython3", 383 | "version": "3.10.6" 384 | }, 385 | "widgets": { 386 | "state": {}, 387 | "version": "1.1.2" 388 | } 389 | }, 390 | "nbformat": 4, 391 | "nbformat_minor": 1 392 | } 393 | --------------------------------------------------------------------------------