def rev(cs, list_sequences, argument): print_colored("REV", "green") seq = Seq1.Seq(list_sequences[int(argument)]) response = seq.reverse() response = "REV " + str(seq) + "\n" + response print(response) cs.send(response.encode())
def comp(cs, list_sequences, argument): print_colored("COMP", "green") seq = Seq1.Seq(list_sequences[int(argument)]) response = seq.complement() response = "COMP " + str(seq) + "\n" + response print(response) cs.send(response.encode())
def open_seq(gene): try: ID = DICT_GENES[gene] PARAMS = "?content-type=application/json" connection = http.client.HTTPConnection(SERVER) connection.request("GET", ENDPOINT + ID + PARAMS) response = connection.getresponse() if response.status == 200: answer_decoded = response.read().decode() dict_response = json.loads(answer_decoded) sequence = Seq1.Seq(dict_response["seq"]) context = {"gene_name": gene, "gene_content": sequence} contents = read_template_html_file("./html/sequence.html").render( context=context) return contents else: print("ERROR!!! Cannot connect to the server") except KeyError: contents = read_template_html_file("./html/error_gene.html").render() return contents
def gene(cs, argument): GENE_FOLDER = "./Sequences/" print_colored("GENE", "green") seq = Seq1.Seq() response = seq.seq_read_fasta(GENE_FOLDER + argument + ".txt") print(response) cs.send(response.encode())
def rev(sequence): seq = Seq1.Seq(sequence) response = seq.reverse() context = {"sequence": sequence, "operation": "Rev", "result": response} contents = read_template_html_file("./html/operation.html").render( context=context) return contents
def comp(sequence): sequence = Seq.Seq(sequence) response = sequence.complement() context = {"sequence": sequence, "operation": "comp", "result": response} contents = read_template_html_file("./html/operation.html").render( context=context) return contents
def info(cs, argument): try: print_colored("INFO", "yellow") sequence = Seq.Seq(argument) response = "Sequence: " + str(sequence) + "\nTotal length: " + str( sequence.len()) # other possible solution #sol_a = "\nA: " + str(sequence.count_bases()[0]) + " (" + str(sequence.percentage()[0]) + "%)\n" #sol_c = "C: " + str(sequence.count_bases()[1]) + " (" + str(sequence.percentage()[1]) + "%)\n" #sol_g = "G: " + str(sequence.count_bases()[2]) + " (" + str(sequence.percentage()[2]) + "%)\n" #sol_t = "T: " + str(sequence.count_bases()[3]) + " (" + str(sequence.percentage()[3]) + "%)\n" #answer = response + sol_a + sol_c + sol_g + sol_t #print(answer) #cs.send(str(answer).encode()) list_letters = ["A", "C", "G", "T"] print(response) sol = " " for i in range(0, 4): sol += "\n" + list_letters[i] + ":" + str( sequence.count_bases()[i]) + " (" + str( sequence.percentage()[i]) + "%)" i += 1 print(sol) ans = response + sol cs.send(str(ans).encode()) except ZeroDivisionError: cs.send(str("Not valid sequence").encode()) print("This is not an appropriate sequence")
def gene(seq_name): PATH = "./Sequences/" s1 = Seq1.Seq() s1.seq_read_fasta(PATH + seq_name + ".txt") context = {"gene_name": seq_name, "gene_contents": s1.strbases} contents = read_template_html_file("./html/gene.html").render( context=context) return contents
def json_second_calculations(response, ID): length = len(response["seq"]) sequence = Seq.Seq(response["seq"]) basis_information = sequence.count() A = basis_information["A"] C = basis_information["C"] G = basis_information["G"] T = basis_information["T"] context = {"length": length, "basis_info": [A, C, G, T], "gene_name": ID} return context
def info(sequence): seq = Seq1.Seq(sequence) number_dict = seq.count() percentage_dict = seq.count_percentage() response = "Total length: " + str(seq.len()) + "<br>" for key in number_dict: response += (str(key) + ": " + str(number_dict[key]) + " (" + str(round(percentage_dict[key], 1)) + "%)<br>") context = {"sequence": sequence, "operation": "Info", "result": response} contents = read_template_html_file("./html/operation.html").render( context=context) return contents
def info(cs, list_sequences, argument): print_colored("INFO", "green") seq = Seq1.Seq(list_sequences[int(argument)]) print(seq) number_dict = seq.count() percentage_dict = seq.count_percentage() response = "Sequence: " + list_sequences[int( argument)] + "\nTotal length: " + str(seq.len()) + "\n" for key in number_dict: response += (str(key) + ": " + str(number_dict[key]) + " (" + str(round(percentage_dict[key], 1)) + "%)\n") print(response) cs.send(response.encode())
def second_calculations(response, ID): length = len(response["seq"]) sequence = Seq.Seq(response["seq"]) basis_information = sequence.count() A = basis_information["A"] C = basis_information["C"] G = basis_information["G"] T = basis_information["T"] context = {"length": length, "basis_info": [A, C, G, T], "gene_name": ID} contents = read_template_html_file(ROOT + "/calc.html").render(context=context) return contents
def info(sequence): sequence = Seq.Seq(sequence) response = "\nTotal length: " + str(sequence.len()) list_letters = ["A", "C", "G", "T"] sol = " " for i in range(0, 4): sol += "<br><br>" + list_letters[i] + ":" + str( sequence.count_bases()[i]) + " (" + str( sequence.percentage()[i]) + "%)" i += 1 ans = response + sol context = {"sequence": sequence, "operation": "info", "result": ans} contents = read_template_html_file("./html/operation.html").render( context=context) return contents
def info_seq(gene): try: ID = DICT_GENES[gene] PARAMS = "?content-type=application/json" connection = http.client.HTTPConnection(SERVER) connection.request("GET", ENDPOINT + ID + PARAMS) response = connection.getresponse() if response.status == 200: answer_decoded = response.read().decode() dict_response = json.loads(answer_decoded) sequence = Seq1.Seq(dict_response["seq"]) new_dict = dict_response["desc"] new_dict2 = new_dict.split(":") new_list = list(new_dict2) name = new_list[2] sequence_start = new_list[3] sequence_end = new_list[4] sequence_lenght = sequence.len() context = { "gene": gene, "gene_name": name, "starting": sequence_start, "ending": sequence_end, "lenght": sequence_lenght, "gene_id": ID } contents = read_template_html_file( "./html/information.html").render(context=context) return contents else: print("ERROR!!! Cannot connect to the server") except KeyError: contents = read_template_html_file("./html/error_gene.html").render() return contents
def calc_seq(gene): try: ID = DICT_GENES[gene] PARAMS = "?content-type=application/json" connection = http.client.HTTPConnection(SERVER) connection.request("GET", ENDPOINT + ID + PARAMS) response = connection.getresponse() if response.status == 200: answer_decoded = response.read().decode() dict_response = json.loads(answer_decoded) sequence = Seq1.Seq(dict_response["seq"]) n_bases = sequence.count() percentage = sequence.percent() sequence_lenght = sequence.len() most_base = sequence.most_freq_base() context = { "gene_name": gene, "number_bases": n_bases, "percent": percentage, "lenght": sequence_lenght, "freq_base": most_base } contents = read_template_html_file("./html/calcs.html").render( context=context) return contents else: print("ERROR!!! Cannot connect to the server") except KeyError: contents = read_template_html_file("./html/error_gene.html").render() return contents
import Seq1 print("-----| Exercise 2 |------") s1 = Seq1.Seq() s2 = Seq1.Seq('ACTGA') print('Sequence1: ', s1) print('Sequence2: ', s2)
} SERVER = "rest.ensembl.org" ENDPOINT = '/sequence/id/' PARAMETERS = '?content-type=application/json' connection = http.client.HTTPConnection(SERVER) try: user_gene = input('enter the gene that you want to analyze: ') id = DICT_GENES[user_gene] connection.request('GET', ENDPOINT + id + PARAMETERS) response = connection.getresponse() if response.status == 200: response_dict = json.loads(response.read().decode()) print(json.dumps(response_dict, indent=4, sort_keys=True)) sequence = Seq1.Seq(response_dict['seq']) s_len = sequence.len() info_dict = sequence.info_seq() A = info_dict['A'] G = info_dict['G'] C = info_dict['C'] T = info_dict['T'] print('Gene:', user_gene) print('Description:', response_dict['desc']) print('Total length:', sequence.len()) print(f"""A {A[0]} ({A[1]}) C {C[0]} ({C[1]}%) G {G[0]} ({G[1]}%) T {T[0]} ({T[1]}%)""") bases_dict = {'G': G[0], 'A': A[0], 'C': C[0], 'T': T[0]} max_value = max(bases_dict, key=bases_dict.get)
import Seq1 print("-----| Practice 1, Exercise 7 |------") def print_result(num, sequence): print("Sequence " + str(num) + ": ( Length: " + str(sequence.len()) + " ) " + str(sequence)) print("Bases:", sequence.count()) print("Rev:", sequence.reverse()) # We create the sequences list_seq = list(Seq1.test_sequences()) for i in range(0, len(list_seq)): print_result(i, list_seq[i])
PARAMS = "?content-type=application/json" conn = http.client.HTTPConnection(SERVER) try: user_gene = input("Gene to analyse: ") gene_id = GENES[user_gene] conn.request("GET", ENDPOINT + gene_id + PARAMS) res = conn.getresponse() print("Response received!", res.status, res.reason) if res.status == 200: res = json.loads(res.read().decode()) # print(json.dumps(res, indent=4, sort_keys=True)) print("Gene:", user_gene) print("Description:", res["desc"]) sequence = Seq1.Seq(res["seq"]) s_length = Seq1.Seq.len(sequence) print("Total length:", s_length) count_dict = Seq1.Seq.counts(sequence) a, c, g, t = Seq1.Seq.percentage_base(count_dict, s_length) print("A:", sequence.count_base("A"), "(" + a + ")") print("C:", sequence.count_base("C"), "(" + c + ")") print("G:", sequence.count_base("G"), "(" + g + ")") print("T:", sequence.count_base("T"), "(" + t + ")") print("Most frequent base:", Seq1.Seq.most_freq(Seq1.Seq.counts(sequence))) elif res.status == 404: print("Check if the ENDPOINT was correctly written!!") except KeyError: print("Gene not available. Try: ", list(GENES.keys()))
from Client0 import Client import Seq1 PRACTICE = 2 EXERCISE = 5 print(f"-----| Practice {PRACTICE}, Exercise {EXERCISE} |------") IP = "127.0.0.1" PORT = 12100 c = Client(IP, PORT) s = Seq1.Seq() s.read_fasta('U5') print("Sending the U5 Gene to the server...") print(s.strbases) print(c.talk(s))
def seq(gene_name): response = get_json("/sequence/id/" + DICT_GENES[gene_name]) seq = Seq1.Seq(response["seq"]) return seq
def gene(cs, argument): print_colored("GENE", "yellow") sequence = Seq.Seq() sequence.read_fasta(argument + ".txt") print(sequence) cs.send(str(sequence).encode())
SERVER = "rest.ensembl.org" ENDPOINT = "/sequence/id/" PARAMETERS = "?content-type=application/json" connection = http.client.HTTPConnection(SERVER) try: user_gene = input("Enter the Gene that you want to analyze: ") id = DICT_GENES[user_gene] # We now generate a connection object: connection.request("GET", ENDPOINT + id + PARAMETERS) response = connection.getresponse() if response.status == 200: response_dict = json.loads(response.read().decode()) #print(json.dumps(response_dict, indent=4, sort_keys=True)) sequence = Seq1.Seq( response_dict["seq"] ) # We have the sequence created (object inside the class we need to use for the following s_length = sequence.len() percentages = sequence.percentage_base(sequence.count_bases(), s_length) most_frequent_base = sequence.frequent_base(sequence.count()) print("Total length: ", s_length) for value in percentages.values(): print(value) print("Most frequent base: ", most_frequent_base) except KeyError: print( "The gene is not inside pur dictionary. Choose one of the following: ", list(DICT_GENES.keys()))
def rev(cs, argument): print_colored("REV", "yellow") sequence = Seq.Seq(argument) response = sequence.reverse() print(response) cs.send(str(response).encode())
def comp(cs, argument): print_colored("COMP", "yellow") sequence = Seq.Seq(argument) response = sequence.complement() print(response) cs.send(str(response).encode())
import Seq1 print("-----| Exercise 4 |------") s1 = Seq1.Seq() s2 = Seq1.Seq('ACTGA') s3 = Seq1.Seq('Invalid Sequence') print('Sequence ' + str(1) + ': (Length: ' + str(s1.len()) + ' ) ' + str(s1)) print('Sequence ' + str(2) + ': (Length: ' + str(s2.len()) + ' ) ' + str(s2)) print('Sequence ' + str(3) + ': (Length: ' + str(s3.len()) + ' ) ' + str(s3))
connection.request('GET', ENDPOINT + id + PARAMETERS) response = connection.getresponse() if response.status == 200: response_dict = json.loads(response.read().decode( )) # Transformamos la respuesta en un diccionario #print(json.dumps(response_dict, indent=4, sort_keys=True)) """ Se imprime este diccionario: {"desc": "chromosome:GRCh38:20:44619522:44652233:-1", "id": "ENSG00000196839", "molecule": "dna", "query": "ENSG00000196839", "seq": "TCCTTTCACTCCCAGCTCCCTGGAGTCTCTCACGTAGAATGTCCTCTCCACCCCCACCCACCCCTGATGAACTCCTGCAGGTTCTGCAGGCCACGGCTGGCCCCCCTCGAAAGTTCCTTAACTATACAATTATGGTGTGTGTTTCTGCGACGAGCGTCCGTCTATCCGGTGGAAGGCACGCCGCTCGAGGCTTGCGATGCTCCCGGGGTCCCCGCTTCTAGCTTGGGCCTGGCGCACAGCAGCGCCCAGACTGCAGGGGGACGCTTGAAAGTTGCTGGAGGAGCCGGGGGGAAGGCAGCGCCCAGCGAGGCGGCTGGAGCGCGCGCCCACAGGTGGGTCCGGTCGGGCGCCGCGGGGCCGTAGTTTTCGGGTCGGCGGGCGAGGACGCCGGGTCCAGAATTCCAGGAAATGCGCGATCCAGGCCGGCGGGCGGGGCGGGGGCTCCGGCGAGAGGGCGGGCCCCGGGAACGGCGGCGGGCGGGGCGGGAGGCGGGGCCCGGCCCGTTAAGAAGAGCGTGGCCGGCCGCGGCCACCGCTGGCCCCAGGGAAAGCCGAGCGGCCACCGAGCCGGCAGAGACCCACCGAGCGGCGGCGGAGGGAGCAGCGCCGGGGCGCACGAGGGCACCATGGCCCAGACGCCCGCCTTCGACAAGCCCAAAGTGAGCGCGCGCGGGGGCTCCGGGGACGGGGGTCCGGCGCCTGGGCGGCCCGAGGGGCTTAGCGGGGCCCAGCCCGGGGCGTCCAAACCCTGGGAACGAACGGGGGCTCCTGCAGGCGAGTTCTTCCTTCGGCTTAGGCCGTGGCTTGCTTGCGGGCTAATCAGGGACAATGGGGCAGAGAAGGTCCAGAACCCGGAGGCCTCCAGAGTCTGCTTCTGCCCCTGACTTGACCCCTCTGGGTCTCAGTTTCGCTGTCTGTCAAGTGGGCATCCTAGCACCGCTGAGCGCTGTGTGGGCCTGGGCAGGGACTTGAGGTCTCTGAAGCTCAGCTGTATGATCAGGCCCGATGTCTACGCCGGATAGGCACCTAGTGCTGTGCCCGGCGCCTACTGAGTGCTCAGTGAATGGAAGCAGCTTTGTACGCCAGCGTTATGGTGGTGAGCGCCAAGGAGCTCAGGTTTGTGGATGCGCCCCGGGGAAGAACCGTGAGCCCTGCCAGAAAGGGGAGGGAGGGGAGCAGAGCACCCCCCTTCCCCCGCGCGGGAAGAACAGGAGCTAGGTAGGCCCTGGGTTTGGGGCCCTAGCAGGGTTCACTCGAGGCCAAGCCATGGCCACTGGCCCCAGGGGAGAATCCCCTTGTTTCTCCGCCCACCAGCTGTGGCGTCTTGGGACTGTTGGGGTCAGGGAGGGTCTGGACCCCCTTGGCCTGTCGCAGAGTCCGAGAGGAGGGGCCCAGGAGTCTGCCAAGCAGGGTGAGTCAGCCAGTAGGGTGTGAGAGTGGTTGGGGAAGGAGTCAGCTGCAGTCAGCCTCAACTTACCCTTCTAAGAAATAGGTGTGAGTGGCCCAGGAGGTTGGCTCACGCCTGTAATCCCAGCACTTTGTGAGGCTGAGGCGGGAGGATCATTTGAGTCCAGGAGTTTGAGACTAGCCTGGACAACAAAACTAGACCCCGTCTCTCCAAAAAATAAAAAAAGTTAGGGGAAGTGTGTGTGGTGGTGCACTCCCGTAGTCCCAGCTACTCAGGAGGCTGAGGCGGGAGGATCGCTTGAGCCCAGGAGGTTGAGGCTGCAGTGAGGTGTGATGGTGCCACTGCACTTCAGCCTGGGAGACAGAGCGAGACCCTGTCTCAAAAAAAAGAGAAGAAAAAGAAAAGAAAAGAAATAGGTGTGAATGATGATGACAGCTATCACAAAAGTGCCGGTGAGAATCCAGTGAGTGTGCATGTGTCAGTGAGGGAGACAGGCTGTGGAGAGCCCACCTACCTTCTGAGGAGGGTGAGGCCTGGCCCCCACTACTGATGCCCCCAGCCCAGGGAAAATGCTCAGCTACTCCCCGTCAGAAGCTGGAAGCACTGAGGTGCTGTACAAGCCCTCCTACCCCCACCCCTGCCTCCTTCACGTCTTACTGGAGCTGGGGCCCATGATTGGCGCCTCCCCTTTGCAGTCTTTTTATTAAATGCTCTGGGCTCCCTCTGCCCTTGGGCTGGGGACCCACTGTACCCTGATGTGAATCCTATGGCAATAGCAAAGCTCTTTGATTGGCGGGGTGCAGTGGCTCACGCCTATAATCCCAGCACTTTGGGAGGCAAAGGTGGGTGGATCATGAGGCCAGGAGTTCGAGACCAGCCTGGCCAACATGGCAAAACCCCATTTCTACTAAAAATATAAAAAATTAGCTGGGCATGGTGGCGGGCGCCTGTAGTCCCAGCTACGCAGAAGGCTGAGGCAGGAGAATGGCATAAACCCAGGAGGTGGAGCTTGCAGTGAGCCGAGATCTCGCCATTGCACTCCAGCCTGGGTGACAGAGTGAGACGCTGTCTCAAAAAAAAAAAAAAAAAAAAAAAGGCTCCTTGATTGCGAACATGTTGGGAGTTATGGAGAGAACAGCAGGGCCCACTTCTAGAGCACTTGTTGCAGACACCCATTGGATCCTTGCAGTTCTTCTGTAACAGCCCATCAAGGGAGGGGCTCATATTATTATCCCCATTTTTTGGCCTTGCTCAGTCCTCCCATCTGATTCAAGCTGGCAGATCATTTTCCCTATTGGGACCTCAGTGTCCACACCTGGAGGATGGAACATCAGCTGCTTATGTGGGTGTCCCGTGTCCTGAGTCCCAAGGCCACAAGGTGATGCTTGAGAGTGAAGGTAGAATGTTACCTGCCATGTGTTTGAGGCGTGACAAATCTTGTATGATTGTGAGGAGGAACTTGTGTGAGCTGGCAGGAGAAGTGGGAAGGAGTGTGAATCTCAGAGCCACTGTGACCAGAGCCAGCTCCCTGCCCTCTTGTGGGAGGGACAGATGACAGTTATAATTATTAGCATTACTAGCTGCAGCTAATGGAGTGTTGATGTTTCTGTGCCAGGCACCGTTCTAAACACATTATCTGCATTTTTTATTTAATCCAGGCACAGAGAGGTTAACTAGGCCCAAGATCACACAGCTAGGAAATGTCCAATCTGGGGTTTGAGTCCAAGGGAGGCTGGCTTCGAAATCCCATGCCTCTAACCATCTTTCCTAAACTACCTCTGCAGAAGCCTTTGGGGATAGAGGTGCCAGTGCCCCAGGTGCAAACCTCCTGAGACAGGAGCCTTTGCTGTGTCCTTCAGCTTCTCATACCTGCCACCAGCTGAGGCCTGGGACCTGGTCAGCTAGAAGAAAGCAGAGCAGGGCAGCGCTTTTCAAACTGCACTCAAGTGGCCTGACTTTTAATGTTCACACTGTGATTCTGTGTGGGTCGGGTTGGGGCCTGCGATGCTGCACTGCTGACCAGCTCCCAGGAAATGCTAATGTCAACGATCCAGGAACACACTTTGCTTAGCAAGGCCCTAGGCAGCTGCCTTCTGTTGTGCGGGACCCCTATTGACTCCAATGGATATAGCACCAGGTTCAAGAGGCTACCTTCTTTGGAAGAGGTAGCAAACAAGATACGGGGTTTTACTGGGGGCTTAGACACAGGGAAGAGAGTCCAGTGGCGGCAGACTGAGCAGAAGAACCGCAACCACTTGCAAATCATGCAGTTTATGTAGCATTTTCATTTAACACCTTCTCCCAACCATCTCCACCTAGTAACCTTCATTTAACCCAAAACAAAGGGCCTCGGTCCCTATACCCCTGTATGGTCAGTGTCCCGTGGGAATGGGGTGGGGCTCAGATGTTCCTCATAGATAACGACTGGATCTCCAGGTTGGCCACTCTTGGATTCCTTCGCTCAGAACTCTGAACACCCATTCAAGTGTGCCTGCCATGCAGGGTCATCGTCAGGGGATGCCCAAGTCAAGTTTGCCCTGTCGGGTGTGCCTCCCATACCCCCACCTGGTTTGACTTAGCACCTGCTGGGCACTGGAAGAAGTGGAAAGGGGGGTTGCAGGGGTGGCCCTTATCAGCCTATGTTCACAGGTGGCACCAGGCACTCAGGCATTCTGCATCCTGGAGGCCAGTGCTGATCACATGCCTGTTACAATAATCATAACAATAGCTGTCCTTGAAGTAGTCCTGGGTACCAGGTGCCTTCAGTGACTTTTTCTTTTTTGCCAGAATCTCACTCTGTCGCCCAAGCTGGAGTGCAGTGGCAAGATTTTGGGTCCCTGCAACCTCTGCCTCCTGGGTTCATGCGATCCTCCTGCCTCAGCCTCCCAAGTAGCTGGGACTACAGGCGTGTGCCGCAGTCTCACTCTGTTGCCCAGGCTGGAGTGCAGTGGTGTGATCCTGGCTCACTACAACCTCCACCTCCCGAGTTCAAGCCATTCTTCTGCCTCAGCCTCCGGAGTAGCTGGGATTACAGGCGTCCACCACCACGCCCGGCTAATTTTTGTATTTTTAGTAGAGACAGGGTTTCACCACGTTAGCCAGCTGGTCTCGAACTCCTGATCTCAGGTGATCCTCCCACCTTGGCTTCCCAAAGCGCTGGGATTACAGGTGTGAGCCACTGTGCCCGGCTAGTAACTTTTATCTCACGGAATCCTCTGGACGACTTGACAAGGCATGGGTCTTCATCCCCATTTACAGATGAAGAAACTGAAGCTTAGGGAGTGGAGGGACTTGCCAGGGCTACACAAAATCTGAGAGCCTTGAAGCTGTAGACTGGCAAGTGAACAGGTACAGGCTGGGACAGCAGTTTCTTTCTTTTTTTCTTTTTTTAGACAGAGTTTCGCTCTTGTTGCCCAGGCTGGAGTGCAATGGCACGACCTCGGCTCACTGCAACCTTCGCCTCCCAGGTTCAAGTGATTCTTCTGCCTCAGCCTCCCAAGTAGCTGGAATTACAGGCATGCACCACCATGCCCGGCTAATTTTTTGTATTTTTAGTAGAGACGGGGTTTCTCCTTGTTGGCCAGGCTGGTCTCGAACTCCCGACTTCAGGTGATCCGCCCACCTCAGCCTCCCAAAGTGCCGGGATTACAGGCATGAGCCACCGCACCCGGCCAAGGGACAGCAGTTTCTAAACTGTCCCTCTCTGATGCAGAGGGGAATTGGGGCTAAATCAGCAATGTGCCTTTTCTGTCTCATATTTGAATGTCTACTCTGCACGAGGCGCTGTCCTGCTTTGCATACAGTGACTCATTTAATGTTTATGTCAGCCCTCTGAGGAAGGTCCTGTCCTATTATTAACTTCACTTATTATGAGGAAACTGAGACTCAGAGAGGGGAGGGAACTTGCCAAAGTCACACAGCTGGCAAGCAGCAGAGCTAGACTTGAACCCAGATCTGCCTGCACTCAAGTAGAAGCTGTTCATTGCTTTGCTCATTTGCCAATTCCACTTTATGCAAAAAAGAGGGGGCAGTGTGGGGGGAAGAGTTAGAATCAGGGTGGCAGGGTGGGCCAGTGCATTAGCCCTGGGCTTCAGATGTACTGGGGTTGAATTCCTGCCTGCCGCTTAGCAGCTAGGGTACCTCAGGTAGACAACTCCTGAAACTCAGCTTCCCCCTCTGTAAAATGGGGTGACAAAACCAAGATCTTGGGGTTCTTGGGGAAACTGACATGCTGATTGGTTTTTGTACAGTGCCTGGCTGGTAACAGCAGGCCCTCAGGGGTGCGTTTCCTTCCTGGGGACTGGAGTGGGGGTTGCAGTAGACTCTGGGAGGCCTCTCCAGCTGCAGAATCTCCCTCCTCCCTCCTCCTTTTTGTCTTCCTGACACAAAACCCACCAGCTGCACTTCTTTGGGCTTGCAGTGGCTTTCAGTTACCAGAGCCACCTGTTAAAACAAAAATGTGCCTAGGAAGAGCCTGCCTTACCCATTTTGACTCACATGGCAGTTGGTGGTGGAGGGGAACAAAGGAGACTGAGTTTCATCGAAGCCTTTTGCTTCGGAGGAGGAAGGGAGGATCAGAGAGAGGAAGTGGTCTGTGTTCACACAGGGAGGCAGGGGAGGCCAGGCAGCTTCCCAATCCTGCATTCAACCTCAGGGTGGGCTTGACCTGGGTGGCTGGGGGCCCTGTGATCCAGGAGAGACTTGTCCACCTGCTCAGGTGTCTTGAAGGGGTCCCTGTGGTACCCCCTGGGGCGGGGCAAGGTAGTAGGACCATGGTCTGGCTGGGGAGGTGGAGAGGAGCAGGCTGTGGGCGCAGAGTGAGGTTGGAATCTGTATTTACCCAAGGTGTTGGGGGTAGGCTTGCCCTCAGCCCTTAATGTTCTCAGGCCCCTGAGCAGTTGTGGGGGATAACCTCTGCACTCCTAGTGACCAGGGAGCTAGAACAGCAAGGAATTTGAACTTGGACACCAGCTGGGGTCAGGCTCTCTGGGTCTGAGTCCTGATTTCCCACTTTCCAGCTAGAGGAGCTTGAATGAGTCATTTAACTTCACGGTGCCTCAGTTTCCCCTCTCTAAAATGAGAATTATACCCATACCCACCTCTCAAACACCAAGTGCAGGCCTGGCTCAGAGCAGGTGCTGCAGCAATAGCTGCCATTGGTCAGCATCATCATCATGGTTGGTAATGGTCCTACTTTGACTTTTGAGACAGAGTCTCACTCTGTCGCCCAGGCTGGAGTGCAGTGGTGCAATCTCGGCTCACTACAACCTCTGCCTCCCGGGTTCAAGTGATTCTTCTGCCTCAGTCTCCCAAGTAGTTGGGATTACAGGTGTGCGCCACCATGCCTGGCTAATTTTTGTGTTTTTAGTAGAGACAGGGTTTCACCATGTTGGCCATAACAATGGCTGTCCTTGAAGTAGTCCTGGGTACCAGGTGACTTCAGTGACTTTTTTTTTTTTTTTTTTTTTGAGCTGGAGTCTTCCTCTGTCACCCAAGCTGGAGTGCAGTGGCACGATTTTGGCTCACTGCAACCTCTGCCTCCTGGGTTCATGCGATCCTCCTGCCTCAGCCTCCCAAGTAGCTGGGACTTGGGATACACTTGCCCCCGCTGGTCCTCCCTTCCACCTCTGTGAAGAGGAGGTCTCAAACTCCTGGCCTCAAGTGATCCACCCACCTCAGCCTCCCAAAGTGCTGGGATTTCAAGAGTGAGCCACCGCACCTGGCCCCTGTTTAGATGTTAGCATCAGTGACCCAGCACCTTGCTATGTGGCATGCAGGGAGCGTGCTGCTAGACCTCCGGGTTTAGAGTCAAATAGCTTCCTGGCTGTGGTATGCATTAGACTTTCTAACTCAAGGTCCTCCCACTCTCTGAGCCTCAGTCTTGTTGCCTTTAAAACGAGTTTAAGTGTGCTGAGTCCCTATGCTGTGGCTCCACAGGAATTTCCCCAGGTGGAAGACACATCTTGCCTTCTGTGAAACCTCTCAGCAGCAGAGCTGTCAGGCCCCGTCAGCAGGAGACACTGTGGGGACTGCTCAGTCCCTTCCACTGTGTACCTCGGAGCTGGCGGAGCCTAGATGAGGCTGAGCATAGAGGGCTTCCTGGAGGAAGTGGAGCTGAAACAGTTTCTCAGCCCAGGGCTGCTCTGTCTCCTGGCCTCACACTAAAAGTCAGTTGAGAGGCCATAGTGGCATAAGTCACTGACCCTGGCACTGCCCAGCTCATCACCAAAAGCAGGGCTAGGGAGGGAGGGGACATTCGATTGGCAGTGGGCACCTGTGGCTCATCTGGGTTCTGGCCACGGTGCTCAGGTTCTGTGAGCTGACCAGGCAGCCCTGGCTCCTCTGCCCCCGTGTGGGTTCTGCCAGGTCCCATGGGGGCAGGTCAGCCCCTTCCTTGTTGCAGGGAGAGCACCCAGCATTGCTGACATGGGACAGGGAAACGAGGAAATAACGGTGTGGTCATTGAACACAGAGAGCACTAGGTGCTGTGCGAGGTGCTGAGGACACGACATGATGACACAGACAAGGTCCCCCCTCTCAGCAAACGGCTCATGAGGGAGACAGACATGTTACATACATGAACCCAAAAAGTCAGACGAAAACAAAACAGAGCGATGTGTTTGGGAGGCAAACCCAACTGCCGGAGGCGAGCAGGGCGTCTACCTCCAAGGTAAACCCAGTCAGATTAGTTGTCCCCAAGGCTCACCAGGGAGAACTAATCTGACTAGGTTTGCCTTGGAGGTAGACGGCCCTGCTCGCCCTCCAGCAGTTGGGAACGTGGAAACATGAGTCAGATCTGGGAGTATCTGTCCCAGGAGTCCAAGACCTGGGTCCTCATGGTAGCTCTGCCACCGACACACTGAGTGACCTTGGGTAAGTGAACCCACCGCCCTGGACCTCTCTGGCACGCATCTCTTGAGAGCAGGGACTTAGTGCATTTCCCGAGGGCCTCCACGGTGCCTGGCACATAGTGGGGCTTAGTAAATATTTGTTGGTAACTGAGGATGCTTCCTGTTCACATCAGCGCTGGGAGGATTTCCTGCTGTTCAGACAAATGCTGGGCTGGCTGTGAGTCAGCCTTGCAGAGAGCAAAGGCAGTGGGAAGGGGCGTGAGATTCCCCTCTGGAGAGGTCAGGAGGCCAGGCACTGTCTCGACATGAGTGCCAGGGAGGGGGTGTGGCCTGTGGGCAGGGCTTGGGCTGAGGCAGAGGGACTTGAGTTCCACCCTAGCTCTACCACCATCAATTTTGTGTAACTCTGGACAGGCCACTGAACTTCTCCGGGCTTAGCCTGGCAAGTCCATTTCCCCATCTGTAACATGGGCCGATATGTACATTGCCTAGGGATTAAATGAGATAAAGGGTCTGAAAACAGTAGGTAGCTGCTTTATCATTATTATTATTTCTGTATTATTGATGTCTGAGGCTAGGCCCACAGAGGCAGTACAGTAGAGTGGTTAGGAGCTCAAGAATCAGACTAGGGTTCAAATTCTGACTCCATCACTGACTGTTTTGGGGTACTTCTTTGAACCTCAGTTTCTTCATCAGTAAAATGGGAGTGAAGTCTCTACCTTGCTGGTTGTAAGGATGAAATAAGATAATGCATATAGATGGTCTAGCACATAGTAGATACTCAAAAGTTTGAGGCCACTGCTGACCCTTTTCCCTGAAAGGAGACAGGAGAGCGGGGTCGCCACCCCATTGTCATTGTCATCTGGAATAGGCTGACAGACTTCCCATGGTGTGTTGCAGTTTTCTAGAAAATTCAGTAGGAGGCCTGCCTGAGCTTGAGCCACCTGTGGAGGTGGCTTCCTGCCTCTGCTCCACACCTGAAACGCGTCTGGGCCTCTTCTCAGGCAGCCGTGAGAAGGGATGAGTGCTACTGGTCATGGTGGGCAGCTGGCTCTGCTTTCCCCCTTCCCAGAGGCGCTCCTGCCTCCTGCCCAGCTCCCTGAACCCCTAGCTTCTGCACCCCGGCACTGTCTGGCTTCTGCCCCGCTGAGCACCCACTGTCTCTGACGCTGCCTTGAGTACTTCCCGCATGTTATTCAAATCCCAATCAGATCTTCCCTCCCGCAGTAGCTGGTCTTCTGTTCTGGCTTCCTGCCATCCTGTCCTCCACACAGCAGCCGGGAAAGGTTTTTTTAAAGGGGACTCTCCGATTTAACACACTTGGGTGGAAAACCCTTTGCTTCGGCCTCTGCAATCTCCCTGCCCCCTCTCCACTTTGCCCTGGCCTCATTTCTCACCACTAACCTCACTCTGCACTCTGGCCAACTCCCCGCCTGCTTCCTGATTCAGACACTAAGCACACGCAGCTCCCCTGCCTGGAGCCATTCTCCCTCTCCTTCTTTCTTCTCCCTGGCGAACTCCCCCTTTAAGTGATCTTTTCCCAACACACTTTCTAAATTGCCCCCACCCCAGTGTGATTTTTCTTTATCTCATAGCACTTGGTCTGCTTCTTATCACAGTTTGCAAGGCTGAGTTCAGAAAGGTGTGTTTGCTCATTCTGAGGCAGGAGAGGCTACCTTGTGCTGCTGTGGTAACAAACAGCCCCCAGGTCTGAGGGGTCTGCAGAGACCCAGGTTGACCTCATACTGCTTGTCCCTCCAGGGCCTCCAGTGAGGTTTCGGCTCCTTGGATCACTCAGGGCCCCAGGCAGATGGGAAGATTCCACTCTGAACATTGCCAATTGTTGTGCCAGAGTAAAGCAGAGCTGGGAGGTGGGCTCTTGAATTGGCATTTAAATACTTTTGCCAGGCAGGGTAAGGCAGCTCACGCCTGTAATCATAACACTTTGGGAGGCCTAGGTGGGTGGATCACCTGAGGTCAGGAGTTCAAAACCAGCCTGGCCAACATGGTGAAACCCTGTCTCTACTAAAAGTACAAAAATTAGCCGGGCATGGTGGTGGGCGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCACGAGAATCCCTTGAACCTGGGAGGCAGAGGCTGCAATGAGCTGAGATCTTGCCACTGCACTCCAGCCTGGGCAACAGAGCCAGACTCCATCTCAAAAAAAAAAAAACAACAACAACAAATAAATAAATGAATAAATACTTTAGCCAGAAGTAGCCATGCAGACCTCCCCCCACCAGTCCCACCCACAAGCGGACGTGACTACCGCCCCCATTCACTGCCTGATCCTCCTGTTCTCAGGGGCTCCAAGGCCAGGCCTGGTTTGACCTTCTGACTTTCTGACTTCCTCCTACCTTCCCAGTAACCTCATGCAACTCCTTTCACTCAGCCTCAATCATCCCCATGGGTGTTTAAACTTGCCCAAGACATGCCCCTTTGAAAAAGCCTGCCATTCTCTTGACCCACATGCACGTCCTGCCCCCTCCAAGGCTGCTAGTTCCTTTAGGGGCAAAATTGTGAAAGAGTAGTCTAAACCTTCTTCCTCTTCTTACCTCCACTTCTTTCTTACCTTATTCCCATGTGGATTCTACCCTCACTCAGGCCTCTAGAACGGTTCCTCTACGGCAGTGGTTCCCAATCTTGACTACGTGTTTTTTTAAAAAAAGTCCTCCACCTGGGCCTGCCACCAAGGATTTTTCTTTAATTGACCTCAGATGGGGTTGAGGCCTTGGGAACTGGCCAGAACTTCCCGTGCTCCTAACTTGCAGCCGGGGTTAAGAACTACTCCTCTGAAGCCCCCAGTGCCTGCGCTTTTAGCCCGACGGACAAGTTTCTGCCCTTCCATCCTGTGACCTCCAGCAGGGCCTGACCATGTGAGTTTTCTGTGGCTGCCGTGACAAGTTGCCACACCCTGCATGGCTTCAACCAACAGAAACGTGTGCCCTGGCAGTTCTGGGGGCCAGAAGTCCAACATCAAGATATCATCAGAGCCACATGCCCACTGAAGGCTCTCGGGGGAATCCATTCCTTGCCTCTTCTGGTTGCTGGTGGCTCTAGGCATTCCTTGGCTTGTGGCTGCATCATTCCAGTCTCTGCCTCTGAGGTCACGTTGCTGCTTCCTCTTGTGTGTGTTTCTCTTAAAACTCTCTGCTTCTGTCTTATAAGGATACATGTGATTGCATCTAGGGCCCAACCAGATAATCCAGGATAAACTCTTCCTGTCAAGACATTTAATAATCACACTTTGCCATATAAGGTAATTTTTTTTTTTTTTTTGAGGTGGAGTTTTGCACTTTCACCCAGGCTGGAGTAAAGTGATTTAATCTCGGCTCACTGGAATCTCTGCCCCCAGGTTCAAGCAATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTATAGGTACCTGCCACCATGCCCAGCTAACTTTTGTATTTTTAGTAGACATGGGGTTTCACCATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAGGTGATCCACCCGCCATAAGTTAATATTTTTTTTTTGAGAGGGAGTATTGCTCTGTTGCCCAGGCTGGAGTGCTAGTGGCTCAATCTCGGCTCACTGCAACCTCCGCCTCCCAGGTTCAAATGATTCTCCTACCTCAGTCTCCTGAGTAGCTGGGACTACAGGTGCATGCCACCATGCCTGGCTGATTTTTGTATTTTTAATAGAGAGGGGATTTCACCATGTTGGCCAGGCTGGTGTTGAACTCCTAACCTCAAGTGATCCACCCACCTCAGCCTCCCAAAGTGTTGGGATTACAGGCATGAACCACCACGCCCGACCCATATAAGGTAATATTTACAGGTTCTGGGGATTAGGATTAGCATGTAGACAGCTTTGTGGGGGCCACCATTCAGCCCACTATGCTAACCCTGTGAACCGTTGCTCGCTTCTCCTTGACATCTGACGGCCTGGCCTTCTGCATACCACACACCCTCCCACCTCTCTGGCCACAGTTCTGTAGGCTCAGCCTCCTCCGTAAGGCCATTAAGTGCTTGTGCTGGTCAAAGTTTCATCCTAGGCCTTTTCCTTACCTCCCTTGATATTTTCTCCCTAGGTGAGCTCCTTCAAGCCCACAGCTTCTGTGCTTACCCACACTCCTACCTACATTCCCAGCTTGGGCTTCTCAGGCCAGCTCTAGACTCTTGTATCCCACTGGGTTCTTCCACTTACCTTTGGATATCTCAAAGGCATCTCCAGTTGGCTGGGCACGATGGTTCACACCTGTAACCCCAGCACTTTGGGAGGCCGAGGTGGGCAGATCACTTGAGGTCAGGAGTTCAAGACCAGCCTGGCCAATATGGTGAAACCCCATCTCTACTAAAAATACAAAAATTAGCTGGGCATGGTGGTGGGTGCCTGTAGTCCCAACTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGGAGGTGGAGGTTTCCGTGAGCTGAGCTGGAGCCACTGCACTCCAGCCTGGGCAACAGAGTGAAACTCCGTCTTAAAAAAACAAAAAACAAAAGGTGTCTCTAGTGTAACATAACTAAAACCAAACCAATCATGCCTCCCTCCCCCGCATCCTCCCTCCTGGAGGGAGCTCCAGGACTTGGTCTTCTCTTCCAGAGTTCTCTGTCTCAAACTGCGGGAATTGCTCCCCACCCAGGCCTAACCTGAAGTGTGAGCCTTGGCATCTCTTTCTATCCACCTGTTTTTCCTCTATGCACCTCACAACCCTGGTCCAAGCCACCGTCATCTTTCAAATGGCTGCAGTAGCCTCTAACTGGCCTTGGAGGAGCCATCCTCTTTCTCTAACCAGCTGCCAACCCTGCAATGGCCTCTGTGTGCTTTCCAGATAAAGCCTGACTCCTCGTGGCCCGCACAGCCCTGCCTGGGTGGTCCTATCCTGCAGCCTCTCCAGTACCATGAACCCTCCCTTCTCTGAACCTCTATTTAATCCATTTCATATACCCCGTTTTCTCCTGCCATAGGGCCTTGCACATGCTGTTCCTTCTGCCTGGAATTTTCTTCCTGCCTCCCTCCGCACCCCTGCCTTGTGTTGTGGGTTCCTCGCTATCCTCTAGCTTTTCGCTCAGGCTCATTGTTGGCCCTCTAGATGTATTCACTTCTCTTGTTTGTTACCCTCTGTCATAGGACTGTGTTCGTACTTCCCAAGGAGTCGTCTTGGTTTGTGACTGTACATTTTCCCATGTGACATTTGCTTAATGCCTCTCCCACTCTGGGGCCTGTACAAGCCCCAGGAACAGGACTTGGACCCTCCTGTTTAACTCTACAATCTAGCATCCAGCAGGAGCGCAGGCCTTCGTTGACTTTTATTTTATTCTTATTTTTTATTTTTGAGATGCAGTTTCGCTCTTGTCGCCCAGGCTGGAGTGCAGTGGCGTAATCTCGGCTCACTGCAGCCTCTGCCTCCCAGGTTCAGGTGATTCTCCTGTCTCAGCCTCCCAAGTAGCTGGGATTACAGGTGTGCGCCACCACGCCTGGCTAATTTTTTGCATTTTTAGTAGAGATGGGGTTTCACCATGTTGGCCAGGCTGGTCTCAAACTCCTGGCCTCAGGTGATCCACCCACCTCGGCCTCCCAAAGTGGCTGGATTACAGGCGTGAGCCCCCATGCCCAGCCTTCATTGACTTTTAGTTGACAACTATTTAGCATTTGCTATGTGCCAAGAACTCCCTGCCTACTAATGCAGTTAACCCTCATGAAGCCTAGAAGGAAGGACTGCCATTCTCCCCACTTAACAGATGAGGATGCCGAGGCACAGGAAGTGAAGTGACTTTCTCAGGGTCAAGCAGGGAGTGAGTGGAGGAGCCGAGATTCCAGCTCTAACCGCATGATGCTCTATACAGTGTGACTCCGGCTCTCTGGCTGGGCCCTCTCCATAGCCCTGTGAGGGTTAAGGATAGAAAACAGAGGCTCAGAGAGTTGAGGTCCCTTGCCTGAGGTCACACAGCTGGTTGGCCGTTCCCTGGGCTATAAGCTTCAGTATTCCCAATGCTGAGCATATTTTGAGAACCCGAGAAACAGACGTTTGGCTGGGTGGGAACTGAACTCATTTTGTCAGGGAATTCAACAACTAAGTTGGCCCTGAGACTGGGTGTGAAGACCGCTCTGTCCCCTGCCAGCTGGATGACCTCAGGAGAGATCTGATGACTCTGAGGTCCTGCTGATAGGACCTCTGGTGTCTCTGTTCCCTGCTGGCCTCCCCTGGGCCTGGGTTGGGTTTCCTCTGCAGGAGGCAGCTCATGTATGTGCTCCTAGACGCCCTTGGGCCAGCAGCTCCTTGGCTGTTCCTCCCTGAGCCAGGGCAGCCAACTTTCTTATCCAGCTCTCCATGCTCCCCACCCCAGCATGAGATGTCAGCTGAGAGTTTTCTGGATCTCCCCTAGCTAGGGGGAAAGCTTCCATCATTTGGAACAGGAACAGCAGGAACAGCAAAGTCCCTTTCCCCACCATCTCCCACTGCCTGCTGTGCTTCTCCTAACAGCTCATGGTAAACACCCTGACTGAGCGGCAGGGGCTGTTTCCTTTGGGCTATCCATGTCCACCTACACTGCCCTTTTTAATCCTTACAATTTTTCTTGGACACGGGGGCATAATATTCCATTGTTTTTCAGTTGAGGAAACTGAGGCTCAGAGAGGTCAAGTGTCTTGTCTGAGGTCACACAGCAGAACTGGGAGTCAAGCCAGATGGGCTGCCTCCAAGGATCCTACTCTTAAACTCTAGAGTACTAGAAAGATCTTCCGTTGCCTAATATTGATTCCTGATAGGCTATGCTTGAGTAGCATCTGCTTTTGAAAATGGAGCCTGGGTCGGTTGCGGTGGCACATACCTGTAATCCCAGCACTTTGGGAGGCTGAGGTGGGTGGACACCTGAGGTCAGGAGTTCGAGACTAGCCTGAGCAACATGGTGAAACCCTGTCTCTACTAAAAATACAAAAATTAACTGGGCGTGGTGGCACCTGCCTATAGTCCCAGCTACTCCGGAGGCTGAGGCACAAGAATTGCTTGAACCCAGGAGGTGGAGGTTGCAGTGAGAGGAGATCATGTCACTGCACTCCAGCCTGGGAGACAGAGCGAGACTCCATCCGTCTCAAAAAAAAGAAAACGAAAATGGATCCTGAATTTTGAAATATGCTGTGACTCTTCCCTAGTTTGGGACATCTGGGTCAATCCCTTTTGTTAAAGTAGTTTATTTAGTTGGCTGAGAGCGGGAGCTGCCTACGTGACCTGGAGCACAAGCTTTGGAATTGGGCTTGGGTTAGAATTCCGCCTCTGCCACTCACCAGCTGCGATTAAGAACAAAGATACTGGGTTGGGCTCCTGCCTCTATTACTTGCAATCTGTGTGGCCTTGGATGAGATATTTAACACCTCCGAACCTCAGTGTCCTCAATTGTGAAAGAGATCGAGATAACAGCTGAACCCACATCCCAGGAGCGGATTAAATGAGATAGTGCAGTACAGAGTTTACCGAAGTATATGGGGTCAGCAGCCAGCCAGTAAAATGGTGGCTAATGGTTATCATGATTAATGTTAACATTAAGCTCTGAAAGGTCCTTCGTGAACTCATAGGTATTTGTTCTCTCTCTCCCTTTCTCTCTCTCTTCCCCCTGCCCCCTTGCAGGTGGAACTGCATGTCCACCTAGACGGATCCATCAAGCCTGAAACCATCTTATACTATGGCAGGTAAGTCCATACAGAAGAGCCCTCTCTCCCTGGGATTTGAGTGGGGTCCCCAGCTCCACCCAGAGGCCCCTGGGGAATTCCAGGGTCACTGTTCCTTCCTGTCTCCCTGTGGGAATCAAGCCAGCTCCAGGCCAGAAGTGGGACTGTGAGGACATGGAGGCCTCAGCACTGAGCTGGAGACCCGCAGACCAACTCCTGAGCTTTCTGGGCCTCTGAGTCTTGTCCTCCTGGTGTCAGGTGAGCCAGGCCTGAGCCTGCTCTCCCCACCCACCCACATACGTGCATGAAGGTAGTTCCCAGGGCTGAATCCGTCTTTTTTTTTTTCTTTTGAGATAGAGTCTTGCTCTGTCGCCCAGGCTGGAGTGCAGTGGCATGATCTCGGCTCACTGCAACCTCCACCTCCTGGGTTCAAGTGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTACAAGCACATGCCACCACATCCAGCTAATTTTTGTATTTTTAGCGGAGATGGGGTTTCACATGTTGGCCAGGCTGGTCTCGAACTCCTGACCTCAAGTGATCCACCCAGCTTGGCCTCCCACAGTGCTGGGATTACAGGCATGAGCCACTGTGCCTGGCTCCTGTCTTTTGACTTAACTGAGAGCCTATATATAGCAGGTGATGTGCTCACATGAGATGCCAGTACAATTTCTTGAGCATCTCCTAGAGCTGGGCTGGGCTTTATCAGCTCATTGAATTCCTCCACGCTTGGAAGAGGAGGATACGCTCTCTGCATTTTACTGAGGAGGGAATGGGCTCAGCCAAGACAGTTGTCCACGGTCACACAAATTAATAGCAGATCAAGAGTTGAACCCAAGGCTGTCTGACCCCTAAGGCTTTACTACATCATCAGGGTCATAACCTGCTAGGAGTCACGGAAAAGTGGCTCCCCAACTCTGGGCCTAAATCTCTGCATCTTCCAAGTGAGAACACACTTCCTGCCTCAGCTCTCAGAGATGCTAGGGGGCCAGAGGGTCCCCCTGTTCCCCAGCGAGGAAGGTTCTTCCCTTCCTACCCAGACCTCAAGGGCTCACAGCAGCTCCTCTCTTAGGACCAGCTTTTAAGGGCAGGGACTTTAAAGGCCAGTGGATCTGGATTCAAATTTGGACATATTATCTCCTGTCTGCGAACTTGGTCTCTATCAACTGAGGCTAAGAACAGGCCCTCCCTAGAGAGATGACCTAGGAGCTAGGGGCTCCTTGTCCACCCAGCCCTGCCCCCGCAGACCTGTGTTCCTCGGATGTTTGCACAACACTCATTTTGTTTGGAGCTGAAAGAACTCAGCCTCTCTGTCACAGTCTTGAAATTCAGCTCGGGACCCAAATTTGAACATTTCTGCTCCATAAGCCAGAATCCTGTTATTCAGAGGCCTGCCCTCATGGAGAGAATGAGGGATCCCGGGGGGTTGCCCCCAACTCTCGGGAGCATCTCCACCAACTCCCTGAGAGATTTCTGGTAAGTCCACTATTCTCCATCTTTTCGCACTTCCAGGGACCTTCTTCTGCCCCAGGAAGCTGCCATTGATTTAATTCCTATTTAACTGCAAGGCATAAGCACAGTAGCACCTCCTGTGTGCCAAACACTCCTTTAAGTGCGTTACCCGGGTTAAGTTATTGAAGCCTCACAACAATTTGTAAGATAGGAACTCTATTGCCGTCATTTACAGATGAGGAGACTGAGCCGTGGTAGGTGGAGTAAGGTGCCCAGTAAGCACAGGGCGGAGGTTTGAACCCAGATAGTCTGCCCCCGAGTCCATGGCCCTGGCCATTACCCCCTGTCAGTTAGAGGTTTTGGTAAGTGACGCCCGTAAAATGCTTAGTTCAGGGCCTAGCACACATTAATGTGCTCCATAAATGTCACTTAATGATAATATTCTTATTAATTGGAGCTTATATCTCTAAGTGGGGTGAAACCTCTTGGCTTATCTCTGCCTGGCCTTTGCCCATGTCAAGCCGCCAACTTGCCACAAGGCCCCTAATGAGGTCGTTCAGTGGGGCACCAAGATGAGATCGAACCCAGGCACTCATTAAGGGGTCACGGAGGGCTCATCAGCTGCAGCCAGGGGCTGGGAGCGCCGGGTGGGGCTAAGAGAAAGGGGAAAGGAGCCGCCGGGAGGGGCACTGGTCTGATCGTCCATTCCTCACACCACCTCTGGGCCTTGGAGATGGCGTGCGGCAGGTGCCAGCTGGAGCTTGGCCTGAAGTCAGCAGGCAGGGGACTGGGGAGTTTGTCACACTCAGATATGGGTGTCTGTAAATGCACACAAATATGGGCTAAGAATGGAAGGAGGAGGGGAGCCCCTGGCCTGAGCCCTGCTAGGCCCAATTCAGTGGCCCTTTTTCCAGCTCTGGGACTCAGGCCTGCCTCATTAACTGTCCTCACCCATTTCTCCTTCCTCCAGTTCCCAGGATTCTGGCCTTTTCAGGGGCCTCTCCAACCTCTTTCTCAGTCTTGTTTATAACCCTGTCAACTATTTCTACAGAGATTCTGAAACTGGCTGCTCTTTCCTCCGATCACTGCCCTGGTCTGGGCCACCACTGCCCCTCCCTGGTGCTGTGGCCTCCTGATTGGTCTCAGCCATCTACTCTGGCCTTCCTCTCTACGGGCCCTGCAGTGCTGTAGTTGGAGCAAGAGCCTTAACCCATGGTCTTCCCAGCTCATTCCCCAGCTTCCCCATCTCACTCAGAGTCAAAGCCAAAGTCCACACATGGGCCTTAAAGTTCTGCAAAGCCTGCATTGCCTCTCTGACCTCTCTAAGGCTCCTTGCTTAGTCCACACTGGATGTTTTTCAAACATGCCAGACCTAGGAAACAGAGAGTCTGGGTTACTTGCCCAAGGTCACACAGCCTTTAAGTCACAGAGCTGGGATTCAAACCCAGACCACTGGGCTTCAGAGTCTGCTCTTTCTCATGACACACAAAGTTTCATTTCTTCCTCTGTGCACCCCTACATGGAAAATATTATGTTTTACTGACAAGGGCACCAAGGGCCTTAGAGGGGAGCGCTCCTGCCTGGGATGATGTGGTAAATAGGGGTGGGAGATGGACTTGACCTGCAACCCCTGAGCTCATCCTCCCTCCCTCCCTGGGCTCCTGATGGTGGGCTTCTTGTGACTGTGTTGCCCACCAAGGCCGGAAGAGGACCAGACAGTGCCCCAGCACAGCAGCTGTGGCTGACCAGGGAGTAGGGATCATCTAAGAACAGAGCGTGCATGGTGGCTCACGCCTGTAATCCCAGCACTTTGGGAGGCCAAGGCGGGTGGATCACCTGAGGTCAGGAGTTCAAGACCAGCGTGGCCAACATGGGGAAACCCCGTGTCTACTAAACATATAAAAAATTAGCCAGGCATGGTGGTGGGCATCTATAATCCCAGCTACTTGAGAGGCTGAGGCAGGAGAATCACTTGAACCAGGGAGGTGAAGGTTGCAGTGAGTCGAGGTCGTGCCATTGCACTCCAGCCTGGGCAACAAGAGCAAGACTCCGTCTCAAAAAAACAAAACAAAAGAAAAAACAGAGGGTGGCCCTATGAGGAGCCTTCGCTTGTGTGGGTGGCCAGGGACAGCAAGAGGTGCCAGGGCCCTAGGAACAGCTCTTTCCTGCTTCAACTTTGGGCTCCAGATGGGCGCTTTCCAGCTCAGTCTGAGCAGCTTCGGGAAGCTGTGTCCCATGGGAGACACTGGGAGTCCCCTGTGCTCTTTGTCTCCTGTCGGGCCCCCACATTAGCTCTCTGGCCTCAGCTCTGGCTTCCCTCCAATTTGTTTCCCACGCAGCAGCCAGAGGAGCTTTCAAAAAGGTAAATTATTTCATGCTAGTCCCCTGCTTGAAATCCTACAGTGCCTTCCCAGTGCTTTCAGCCAAAGCCCCAGTCCCTTCCTAAGCCCAGCCTGGCCCTGCCTCCCTGGTGCATCATCTGCACAAATGCCTGCTCTCTGACCTCCAGCCACCCTGCACTTCCAATGCCCGCGGCTTCCTGCCTGCAGCTTTAGTACAGACCCCTCCCCTGCCCAGAACTGCCCCCACCCCAAGGCTTCTGCTGAAATGTCACCTCCTCAGAGAGGCCTTCCCTGGCTGCTCTGTCTAAACTCTGTGTTGAGAAGTTCCTTCTTGATGGTTGTTGAGGAGGGAGGCTGGAGAAGAAGAATCGAAGAGGAGAAATAGAAAGCAAAATAATTTGTTCTAGGGGACGGGCTGGTGCTGGGCACGGGGAGGCGCCCGTCTCTGGTGTGGGCAGCTGGGTAGATGGAGGAGCCGTATTTGGAAATGTGGAACCCAGGAAGGGAGTGATCTAGAGGGAGGGGAAAGGTGGCGCGAGATGCCTGCCTCTCAACAGGTAGCCAGACACATGGGTCTGTCTTGGTCACTGCTATCTGCCCAGTGCCCAGCACATCACAGGCCCTCAGTGGTGGTGTATGGGCATAGAGAATTAGAAGCTGTGGACCTCTGGATCCGGAGCTGAAAACCACCAAAGGAGATGAGTTGGCCTGGCCAGGTGTGTAAAAGGCAGAGTCTGAGAGAGAACGACCAGAGGGCAGAGCCCCCGCAGGTGGAGTTCTGGGGGCTGGAGGGAGACCATTAGGAGAATCGCACATGGCTGGCGCAGCAGGTCCCAGGCAAATGTGGCCACTGGGTTTGGCAATATGGGAGCCAGAGCCCTAGTGTCATCTCCCTGCCTTCTACCCAGCAGTTCCCAGAGTGATATCCCCAACAGTGTTTGACAACTGGTACAGGCTCTTCAGCGGCCACAGTTACTGGGCAAGGCCTTGTGAGGGTGACTTTGGGGCAGCTGGCCAGCAGTGGGAGGGGAAGCAGTCTCAGGGGTACCTGAGGCACTGAGCTCCGACCTCCAGGTGCCAATGCCGCACCAGGGCACCGTTCCCCTGCAGGCTCTTACAGGGATTAGGGGCTGGTAAGGAGCAGTGATTAGGGGCTGACTAGCAGGCTGGTGGGCACCAGCATGACCCCTTGGTGGTACCCTCTGGGCACTCATGGGGACTTGGGCTAACAGATGGGGAAGGGAGCACATTCAGGGGGCTTAGGAAACATATTTATGTAGGGAAGCATTTTAATATTTTAGTAACAGAAGCTATTAAAGGACTTACAAACTTACTTACATACACTAAAACACTATTTGGTCAAACTTCTGTTTCTTTGGCACTTTCCTCCTTTATTCTTTTTTATTTTTTTGAGACAGGGTCTTGCTCTGTCACCCAAGCTGGAGTGCAGTGGTGCAATCTTGGCCCGCAGTAGCCTTGACTTCCAGGCTCAGGTGGTCCTCCCACCTTAGCCTCCCAAGTAGCTGGGACTACAGGTGCACGCCACCACGCCTGGTGAATTTTTGTTTTGAAGGGGTTTCACTGTGTTGCCCAGGCTGGTTTCAAACTCCTGGGCTTAAGTGATCCGCCAGCCTTGGCTTCCCAAAGTACTGTGATTACAGGTATGAGCCACTGCACCCGGCCTCCTATTTTTCTGCTTCTGCTTTGTGGATAATTGGATGCTTGGACCTCCTGATTTAATCTTCTAATTTCCTTAACTGTTTACTCCTATTTTTCATCATCTTGTCTTTTTGTTCTACTTTGTGGAGGATTTCTTCACTTTTAGCTTCCAGTTCTTTTCTTACATCGTGACAGTTGCTGCCGCATTCTCTTGTAAATTTCCGAGGGCTCGTTCTTGGGTTCTGAATGTTCCCTCCTTTCAAGGATCTTCTCATCTCTTTGAGGATATTCATGTCTTTTTTGTTTTGGTTCTTAGGTTTTCATCTGTTCTCTGTGCTGTTTCCTCGGAGTGCTTTTGTCTATTCTGTTGTTTTGTCCCTCATGTTAGAAGCATTTCTTTTTTTTTTCTTTTTTTTTTTGTGATACAGAGTCTTGCTCTGTCACCAGGCTGGAGTGCAGTAGCATGATCTCGGCTCACCACAGCCTCTGACTCCCTGGTTCAAGTGATTCTCCTGCCTCAGCCTCCTGAGTAGCTGGGATTACAGGCACACACCACCACACCCAACTAATTTTTGTATTTTTGGTAGAGACGGGGTTTCACCATGTTGGCCAGGATAGTCTCAATCTCCTGACCTCATGATCCTCGCACCTTGGCCTGGGAGGCCAAAGTGCTGGGATTACAGGCGTGAGCCACCATGCCCAGCCTAGAAGCATTTCTTAATGTCTGGTGTTCTCTGGCTGTTGTATCTTAAAAAAAAAAGGGGGGGGAAACTGAGGCTCGAGGTGACCTTGTGAGCTGGAGCAGAGCCGGGATGGGATGAGGAGGCAGGAGCGTGTGCAGAAGAGAGGGAGCCCCCCTGAGCTCGCACCCTGCTTCCCGTGGCTGGGAGGGGAGGCCGAGATGCTTGGGGAGAAATGGAGGCTCCAAGCCAGAGGGGCTGTTTCCAGCACGCTCTTACTGAGCGCTGCTGTAGTCCAGCTTGGTGTGGCGGCTGTGGGCAGGGAGGGGAGAGAGGTCTGAGCTGGCTGGCGGCCCACTGGGCCCCTCCCCTGAGCCTCCACCGGCCCTCTCCCAGTGCGCTGGGCTGGGCAAGCCTCTGATGTGCCAGCCAGATGGAGGGTGAAGTCCTGATGCCTGCCCCTACCCTGGGAATTGTGATGCTGCAGTTACTGCCCCTGATAACCCCTGACTGGGCATAGGACCAGCTGGCTGAGCCAGCTCCTGGGGCTGAGGAGGAAGCCATGAACTTGACCTGGCACTTTCCTTGTCTCCAAGCATCAGTCAACCAAGGATATGGAGGGGGTGTGTGCATGTGTGCACACATACACACACACACACACACACACTTCAACCTGTTTATCCCCCTTGAGATTTGCTGACTTGTGCATTGGGGGTAGAAGGTGCTGGAAAAATTCCGGTCCTGGTTCTCAGTTTCCCCATCTGTCCAGTGGGAGCAGCTGGACTGAGAGACGCCCATGTCTCCTGCTGTGGTCCTGCAAGGAGGCTGGCGCTCCTGAGTCTGCTCCATCCTGGCCTGTCAGGCCTGCCTGGATCCTGCCCCGGGTTGGTCCACCACTCACTGTTTTGTTTCCAGGAGGAGAGGGATCGCCCTCCCAGCTAACACAGCAGAGGGGCTGCTGAACGTCATTGGCATGGACAAGCCGCTCACCCTTCCAGACTTCCTGGCCAAGTTTGACTACTACATGCCTGCTATCGCGTGAGTTGCCCCCAACCCACAGGTCCTAGGGCAGCATTGATCCCTATGACTAGGACCAGGCCTGTCCCTCAGCCTGTGGGGGCCAGAGAAGTTGCTCTGAAACCACAGCTGTCTTTCTCACCATTGTGTACACTTAGTGAGTCTCTCCAGTGCCTTTAGGCCTCAGTTTTCCCTTCTGAGATGTGGGTGTGATGGACTGAAATTGCTTCAAGTTCTACAGAGAAATGGCAGAATATGGGAGCTAAGAACACAGGGTCAGAGGCAGTGCAGGGCTTGAACCCGGGCCATCTATCTCCTAGTTCAGGGCTTCGTGTTGTGAGGGGAGGAGAGGCCTGAATATAGGGTGGGGGCGGGGAGATGTGGGGAAGATTCTCCAAAAGGCTTTTTCTTTTTCTTGTCTTGAGTCGCCAGGGAACAGCACTAGGTACCGAAAAGGCCCAGAAGGGGTATGGGCGAGTACTAGAGAGAAATTTCCATGACTGCTTTATTTATTTATTTATTTATTTATTTATTTATTTATTGAGACAGAGTCTCACTCTGTTGCCCAGGCTGAAGTGCAGTGGTGCGATCTCAGCTCACTGCAACCTCCACCTCCCAGTTTAAGGGATTCTCCTGCTTTAGCCTCCCAAGTAGCTGGGATCACAGGCACCCACCATCACACCCAACTAATGGTTTTGTATTTTTAGTAGAGATGGGGTTTTACTATGTTTGCCAGGCTGGTCTCGAATTCCTGACCTCAGGTGATCTGCCCGCCTCGGCCTCCCAAAATGCTGGGATTACAGGCGTGAGCCACTGCGCCTGGCCTCCATCCTCATCCTGAAGATGCAAGAACTTCTGGTGACCCCTTCTCCTGAGAGTGGCCTGATCTCCCCTGGGCAGGGCACTTTCTTCCCACGCTGGGCTCTCCCAGCACTTGTGTGCCTTCCCTCACACATTCTAGTAACCACTTCATTTTCACTCTTCATGGTGGGAACTTCCAGCTAAGCACAGTCCACCGTTACGTGATCAACACAGTGGCCCTGGCAGGCCAATTTGTGCCTTGCTTCTGGAACAAACATGCAGTAATAACAACGAAAATGTTTTGAGCATTTGTCCGCTCTGCTCCAAGCACTGACCCGGGTGGGGTTTATGAAGTTTGACTCATTTGTCCCCGCAATAACTCCTTGACCTAGGTGTCAGAGGGTGACTAACCAGGGGTCACACAGCAGATAAGTGTGGGCACAAGGATCCAAGTCCATGACTGTATCCCACGTGTCTCCCACATCCAGGCATCCCTCTGGACTTGTCCAGCTGTGTCCTTTTCTCTCATTTCTCTTCCCTGCCAGCCTTAACTCCATCACCAACAAATATTGGGCTACTCTGTCCTAGGCATGGTCCTCAGCTGAGAGGTCGCAGCCATCCCAAGACAGAGGGGTCCTTGCCACATGGAGACTGCATTCTAGTAGGGAATACAGCAAACTGGCTGATAAGCCATATGACACACAATGTTGAGTAGTGATAAGGACCTGGGAGAAAAAGAAAGCCCAGGAGAATGGTGGAGGGGCCGTTTTAAGATAAGGCGGTCTGGGCCAGGTACAGTGGCTCACGCCTGTATCCCCAGCACTTTGGGAGGCTGAGGTGGGCGGATCATGAGGTCAGGAGATCGAGACCATCCTGGCTAACACAGCGAAACGCTGTCTCTACTAAAAATACAAAAAATTAGCCGGGCGTGGTGGCATGCGCCTGTAATCCCAGCTACTTGGGAGGCTGAGGCAGACGAATCACTTGAACCCAGGAGGCAGAGGCTGCAGTGAGCTGAGATGGCGCCACTGCACTCCAGCCTGGGCGACAGAGCAAGATTCTGTCTCAAAAAAAAAAAAAAAAGATAAGGTGGTCAGGGAAGGCCTCTCTGAGGAGGTGAAGCTTCAGCTGGCTCTAAACCAGGGGAGCGGGAGAGACGCAGTGTAGGACAGTATCGGGGAAGAGCAGGCCTGTGTCTTCTCCGGTGGCCTCAGGGAATGAGGGAGAAGGAAGGTGCTGGGGAGGCTGGCAAGGCCTGGAGGATGCAGGCCTTGTGGGCAGGACCTGGGAGTTGCGATGTCACTCTCCGTGGCAGGAAGCTACTGGGGCTTCGAGGGGAGAAGTGATATGCTTTGATTTACCTTCTTAAAAGATTGCCCCAACTGCTGGGTGGAGAACAGGATGACAGGGGCAAGCATGGAGACAGGGAGGCCAGTTAGAGATGGCGTGATTCAGGCCAGGATGGAGGGGTGAGAACTGGTATGCAGTTCCAAAGTAGAGCTGATAGGACTTGCCCAGTGTCTGGGATCTTATCCAGTGGATGCCCAGAGCTTGGGTCTGGGGGATGAAGTGGGTTTAATCTGCCAAGGGTTGGGGATGTCATTTGCTCCTGGAGCTCCCAAGGGACTTGGGGAAGGTTGTTCCCAACCCCTTTCTTCCCTTCCCAGGGGCTGCCGGGAGGCTATCAAAAGGATCGCCTATGAGTTTGTAGAGATGAAGGCCAAAGAGGGCGTGGTGTATGTGGAGGTGCGGTACAGTCCGCACCTGCTGGCCAACTCCAAAGTGGAGCCAATCCCCTGGAACCAGGCTGAGTGAGTGATGGGCCTGGAAGGGGCCATGCTGAGGGTGTGGCTGGGAGGCTCAGCTCTGAGACTGGAAGGGCGAACTGCTGGGAATCCCTGACCCAAGCAAGACCTTGTTCTTGCCCCCAGTCTGGTCCATGGCCTCAGAAAGATGGGTTTAACTCTGTCACAAGAGACGTGGTTCCCATCCTCCCTTTGCCGTTATGTTCTTACCTTGGGCACAAGTGTTTGGCTGTGTCTTGCTCTGGCCACAGGCCTGCTGTCCAGGAATGTTAACCTGCTTAGCCACCCAGGATTTCTGAGGGGTCTCCCTTGTCACTGATGCTGATCAGATCTCTAAAGGCCCTAAAGGTCCTGCTCTAACTTCATAACTGAAGTGAGTCTGGCCCATTTCTAGCCCCCTGCCTGGGCCCCCATGGATCTCTAAGTGGTATCACAAAACCACCCTGCCCCATTTTCTGAGCCATGATTCTGATACATATAGAATGTGAACATCATGGCAGGCCCAAGCTTAGCAATGCTGTCCATCTGGGGGTGGGGAGGGCCATGTTGACACCCCACACCTCCCACTAAGATCTAGGAGCACCCAGCTGCTTTAAGAGCTAGAGGGACATGCTAGGGCCTGGGGGCATCTCTGCCAGTCTTTCCTCTGAGGCAGTGGGTCAGTGGGGGAGGAGGGTCCTCCCCAAAGCCTCCTCTTCCTCCTCTGTCCCAGTCCCAGAGCTGCCCTTTAGGCCTTCCTTTTGCCTCAGGCCCATCCCTACTCCTCTCCTCACACAGAGGGGACCTCACCCCAGACGAGGTGGTGGCCCTAGTGGGCCAGGGCCTGCAGGAGGGGGAGCGAGACTTCGGGGTCAAGGCCCGGTCCATCCTGTGCTGCATGCGCCACCAGCCCAGTGAGTAGGATCACCGCCCTGCCCAGGGCCGCCCGTCTCACCCTGGCCCTGACCTCCTGGCCTAGCAGTGGGGCTGTACCTGATCTCCCCTGTGCCCCACAGCCCCATGGTGTCCCCTTGAGCCCACTGGCATGAACTTGGGGCTTCATGAAACAACTGGAGACCTCCTAGGCAGGCTCAGAACTTCTGGAGATGTTCTCCCCAGGGACACCATGCCTTTATAGCCACCCTGCAGGAAGCTCAACACCAAATAGGAACGTAACTATTGAAAAAAAAATCTAGGCTAGATTCTGATCAGCCCATAGTCCTCCCTCGAGACCCAGTGGACCAGGCCCCATCCTGTCTGGGCCTGAATAGGTCTGATTTCCAAGATTTCTGAGGGGTCTCCCTTGTCACTGACGCAGATCAGATCTCTAGAGTTTGTGCCTCATGGTGCACAGCCTCACTGTGTGATATTGGGCAGGTCACACTGCTGCTCTGGTTATGCACCAAGACACCTCAGTTGTGCACTGTCACAAGGAGATGATCACACTTACTTCATTCCTCTACCCTCAGGATTAGTAAGAACCAAAGAGCTACCTGCACGCATTTCCTCTAATCCTCGCAGCAGCCTGCAAAGCAGAACTACCATTGCTTAGTCCCATTTGACAGATGAGGAAACTGAGGTGGAGTGAGGTGCAGCCTCTTGCAAGGCACAAACCCTGGATTTGTATCCGGGGACATCTAGTTCCAAAGCCTGTGTTCATTCATTCTTTCTTAAACACTTCAGAATAACTTTATTGGTTAAGAGTACCTAATACATTAGCGAGATACTTCCCAATACTAGTGTGAGTTCTATTTTAGATGACGTGTTAAACGGTCCTCCGTTTCCTCATCTGCGCATGGGAATAAGCCTACCATGAGTGTTGTTGGAAACACCAGGTGAGAGAAGGGTCCGTGTCATTTACTGAGCTCAGGCCCCGTCCTTGGTGCTTTACACACATGGCCTCGGCAAAGCCTGGCCGTGACCCTGTGCAATAGCTGGCAGGGTTCTTTCTGAAAAGGGCGGAAACTGAGGCCATAAGCAGAGCAGTTTTCCGCAGGCCATGTGGTTAGGACATAGCAGTTAGGATTTGAAGACACTGAGCCCTGTTTTGTGCTGGCCTCCCATGGGGGGTTTGGGTGGGACAGCAGGCAGGTAGGCTGGGAGGTCTCTCCATGGTGCTGGTGACAGAGCCTGGGTGGGCATCTCGCCCACAGACTGGTCCCCCAAGGTGGTGGAGCTGTGTAAGAAGTACCAGCAGCAGACCGTGGTAGCCATTGACCTGGCTGGAGATGAGACCATCCCAGGAAGCAGCCTCTTGCCTGGACATGTCCAGGCCTACCAGGTGGGTCCTGTGAGAAGGAATGGAGAGGCTGGCCCTGGGTGAGCTTGTCTCCCACCCATAGTTGGGAGAAATCACAAGAACCAGGGACCATGGTGTCTCCTGAGTTCTGAAGTGTGTCTTTGTTGGGTCTTAAGGCTTGGAACTGGAATCCCCCTGGGCCAGGCGTGGTGGTTCATGCCTGTGATCCCAGCACTTTGGGAGGCGAGGCAGGAGGATTGCTTGAGCCTAGGAGTTTGAGACCAGCCAGGGCAACATAGTGAGATCCATCTCTGCAAATACAAAAAAAAGTAGTCAGGCATGGTGGTGCATGCCTGTAGTCCCAGCTACTTGGGAGGCTGAGGTGGGAGAATTGCTTGAGTCCAGGAAGTCAAAGCTGCAGTGAGCTGTGATAATGCGACTGCACTCCAGCCTGGGTGACAGAGGGAGACCCTGTCTCAAAAAAAAAAAAAAGGAAGAAAGAAGAAAGAGAAAAGAAAGAGAAAGAAAGAGAGGAAGGAAGGAAAAAGAGGAAGGGAGGGAGGGAGGAAGGAAGGAAAGAAGGAAGGAAGGGAGAGAGAAAGAAAAGCCTCCACTTGGTGTTGGGAGTCCTGTGCTGAGCCTGCTTCTGGCTGTGATTTGCTGTGTGAACCTGGGCAACACTGTGTCTTCTCTGGGCCTCTGTTTCTTCTATTGGGATGACTGAGTTGGAGCCGACATCTCAAAAGTCGCTTCCAGCGTGATGATGAATGGGCCTCCTGTGGAGGGTGCAGCATGGTGGAGAAGTCAGGGCTCTGGAGTCCCACTGCCCGGGCTCAGAGCTTGGTTCCACACTTCCTGTCTGACCTTGGTCACATTACTTGAATCTCCTGAGCTTCAGTCCTTCATCATAAAATGGGTGGGATAATAGTTGTGAATATTAGATAATGTATACAAGTCACTTCATATACTACCTGACACATGGTAACTGGCTAATGAGTGACAGCTACCACTTAGATAAGGACTTGGAGGGTAAAAGACCAGGTTTCCCCATGCTGTTGAAGCAGGCAGCATGACTAGGATGGTTCAATCTCCACAGCATGGTCAAGGCAGGGCCTGCCGGGGCCCTCCCGCTAGGGCACCCATGACCTGGCTCTCCCCCTTCCAGGAGGCTGTGAAGAGCGGCATTCACCGTACTGTCCACGCCGGGGAGGTGGGCTCGGCCGAAGTAGTAAAAGAGGTGAGGGCCTGGGCTGGCCATGGGGTCCCTCCTCACTGCCTCCTCCCATACTTGGCTCTATTCTGCTTCTCTACAGGCTGTGGACATACTCAAGACAGAGCGGCTGGGACACGGCTACCACACCCTGGAAGACCAGGCCCTTTATAACAGGCTGCGGCAGGAAAACATGCACTTCGAGGTAAGCGGGCCAGGGAGTGGGGAGGAACCATCCCCGGCTGTCCCAACTTCCTGTATAGAGAGGCAGAAAGCAGGGCGGGTCCCAGGAACTCGAGGGGTGGCCCCAGGCCCAGACATGGGGGGAGGAATCAGCATGGCCTGGGGCCATCCCTGCCAGCCACACACCTGCTCTTCCAGATCTGCCCCTGGTCCAGCTACCTCACTGGTGCCTGGAAGCCGGACACGGAGCATGCAGTCATTCGGTGAGCTCTGTTCCCCTGGGCCTGTTCAATTTTGTTCCAGGAAGGCCAAAGAGGGAAGAAACTTTAGGGATTGGGCATCAGCCCATGCCGCGTCTTTTAGATATGAAATCTCTTCGACACCCTGGGAAGCAGGCATTGCCGTCCTCATCTTACAAATGAGGAATCCGAGGCCCAGATGTGCTGTGGCTTGACTGGGATTACCCAGCTGCTAACCAGCAGAGCTGGGGCCCTACAGCTCATCAGCTGGAGCAGAACGCTCCATTACTCTGAGGGAAGCTTCCACACTTCCAATTCTCCCAACTCTGCCCCCTGGGCATCGCATAGGAAGCAGGAGTCCCTCTGGCCAGCATGTTCTCTCTTCCTGACACCTGGCCCTTGGGACCCCTGGGCATTCCCCTGAGCGCCATCTTGAAGCTTTCCACCGGAGGGTCTGTTCCACCCTGCCTGGCTCCCATCCTGGAGTCTAACCAGGGTCAAGGCCCTCCTTCCGTCCTGTCGCCAAGCCACAGGAGCAGTATCAGGCCTTAGGAAAAAGCCGCCTTCCCCAAGACAAGGACAGCAAGAACTCAGGGTGACCATGGTCAGGCCAGCACTTATCCATCTGCCAGGCATATGAGAAGGGGAGGGGCTTCGGCTCTGATGTTCTGATGACAAGGGGGTCTTGGGGCTTGCCTTAGGGACACGTGGCACCTGTGGAGGTTCTTGGAGGCATGTGGGTATACCATGGGCTGGAAAAAGATCCAGGAGTCATCTGCACAGATATGGTGGCTGAAGGAGAAGCAGTGGCCCCAGGAGGTGGTGGAGCAAGAAGGGCCTAGGATAGAACCCAGAAGGACAATGGTATTTAAGGGACCAGCAAAAGAGACAAGTAGGAGGAAAGTCAAAAGTGTGGTGTCACAGAAATCCAGGGAAAAGGTTTCAAGAAACAGTCAACAGTGTGAAATTCTGCTATGCAAGTCGATTATGGTCAGAGCTAGGAAAGATCCATTAGATACAACAAGATGGTGGTCAGGGATCGTGCCAAGAACAGCTTCCATGGTATGTTGGAGTAGCCAGCTCCCAGTGGGACTGAGGAACAAGCAGGGTAGGGTGCAGAGGGGAAGGCTGGAGAGGGTGGCAGCCGGAGGGGGATGTTGCTTTCTTGGCTCCCACCCCCACGCCCCCACCGGCTGCCATTCTGCCTGGTTCCCATGTCTGGCCCCTCTGCTGCCTTTGCCCAGCTCTGGTCTTCAGGATGGGCTGGATTCTGGACTTTCTGGTTACATAGACTTGAACAAGTCACCTAAGTTCTGAATTTATTTCCCCCTCTGCACAAGGATCAGATCTTTCAGATCTGTTTGAGGCTGCTGTGAGGATCAAAGGCGGGTGAACGTCAATGTGTTCTGACTATTTATGTAAGAGTAAAAGGAGGCTGATTCTCTCCTCCTCCCTCTTCTGCAGGCTCAAAAATGACCAGGCTAACTACTCGCTCAACACAGATGACCCGCTCATCTTCAAGTCCACCCTGGACACTGATTACCAGATGACCAAACGGGACATGGGCTTTACTGAAGAGGAGTTTAAAAGGCTGGTGAGTGGGTGTGAGCCATACTGGCCTTGACTCGGGTTTGGGAGTATGGTATCTACAGGTCCAGTCCGGGGCCTGGAATCTTTGGAGAGAGGGAGTGAGTCTGCCTCAACAGTCCAAGACAAGCCCAACCTAGACACTTTCCACAGAGAAGACATCTTTGTGTTGACGTCCTGACCTAGGACCAGGTTTTTGATCCTTTGCTTGGGTTGAGTGCCTTTAAAGAATCCAGTGAAAGCTGTCAACCCTCTCCCCAGAAAGGTGTGTGCAGCAGCTATGAAGTCTTGCACACTCTCTTCAGGTTGTTCTTAAATCCCAGGCTGAATAAGTCCATTCCTGCACGTGTCTGCGAGGTGTCTCTGGCCCCCTACATGCCACCCTGTCTCTCAAAGGTTTCTCCAACTTCCTTCTCACAGCCCTTTTTCATGTAATGACAAATTAAGAACACGACCTCATGGTCTCTACTCTGGCACTTGCTGCCGTGTGACAGTGGACAAATCCTTCCCCCTCTAAGCGTATCTGCCCATGTTGAGTGAAGAGGATGGACTATCACTACATTGCTAAGAGCTGCCTTCTTTGTTCTCTGGTTCCATGTTGTCTGCCATTCTGGCCTTTCCAGAACATCAATGCGGCCAAATCTAGTTTCCTCCCAGAAGATGAAAAGAGGGAGCTTCTCGACCTGCTCTATAAAGCCTATGGGATGCCACCTTCAGCCTCTGCAGGTAGGTTCCTGTCTGGGCTTCTGGGCAGTTGCCCTGTCCTGGCCCCAGTGTGGCTTTCTGTGGGACTTCTAGCAAGATGCCCTTCCATTCTTGGGCAGCGCCATGAATGTGTGATGACTCCCTGGTTTCTGGGCCCTGGCTGGGAGCAGCGTCTCATTAGATCGGTTTGTTTTCTATAAAAGTTCTTGAGAGGCTGTTCTAAGGGGAGACTTTCTGAAGCCCAGTCCCAAAGGTCTGGGCAGTTGGGGACACCTCCATGGCTGCCCAAAGCCAAGGGCAGGGAGAGGGGCCCAGGCCTGTTCTGCTCCTTTCTTCCTATGTGGTCTTGGCAAGGCATCTTCTTGCCATCATAGGAAGGAGTTCCTTTCTGGTTCTGGTGTTCTATGATTTTTACAACATCCTGGGTACTACAAGTTGCCTGATCTTTTTGCTTCTCTGAACCAACGAGCAGGGCAGAACCTCTGAAGACGCCACTCCTCCAAGCCTTCACCCTGTGGAGTCACCCCAACTCTGTGGGGCTGAGCAACATTTTTACATTTATTCCTTCCAAGAAGACCATGATCTCAATAGTCAGTTACTGATGCTCCTGAACCCTATGTGTCCATTTCTGCACACACGTATACCTCGGCATGGCCGCGTCACTTCTCTGATTATGTGCCCTGGCCAGGGACCAGCGCCCTTGCACATGGGCATGGTTGAATCTGAAACCCTCCTTCTGTGGCAACTTGTACTGAAAATCTGGTGCTCAATAAAGAAGCCCATGGCTGGTGGCATGCA", "version": 13}""" sequence = Seq1.Seq( response_dict['seq']) # Creamos object con la secuencia s_length = sequence.len() percentages = sequence.percentage_base(sequence.count_bases(), s_length) most_frequent_base = sequence.frequent_base(sequence.count()) print_colored('GENE:', key, 'yellow') print_colored('Total length', s_length, 'yellow') for key, value in percentages.items(): print_colored(key + ': ', value, 'blue') print_colored('Most frequent base: ', most_frequent_base, 'yellow') except KeyError: print( 'The gene is not inside our dictionary. Choose one of the following: ', list(DICT_GENES.keys()))
import Seq1 def print_result(i, sequence): print('Sequence ' + str(i) + ': (Length ' + str(sequence.len()) + ') ' + str(sequence)) print('Bases:', sequence.count()) print('-----| Practice 1, Exercise 6 |------') # for future knowledge list_sequences = list(Seq1.test_sequence()) for i in range(0, len(list_sequences)): print_result(i, list_sequences[i]) # from P1.Seq1 import Seq, test_sequence
"RNU6_269P": "ENSG00000212379", "MIR633": "ENSG00000207552", "TTTY4C": "ENSG00000228296", "RBMY2YP": "ENSG00000227633", "FGFR3": "ENSG00000068078", "KDR": "ENSMUSG00000062960", "ANK2": "ENSG00000145362" } SERVER = "rest.ensembl.org" ENDPOINT = "/sequence/id/" PARAMETERS = "?content-type=application/json" connection = http.client.HTTPConnection(SERVER) try: user_gene = input("Enter the gene you want to analyze: ") id = DICT_GENES[user_gene] connection.request("GET", ENDPOINT + id + PARAMETERS) response = connection.getresponse() if response.status == 200: response_dict =json.loads(response.read().decode()) #print(json.dumps(response_dict, indent=4, sort_keys=True)) sequence = Seq1.Seq(response_dict["seq"]) s_length = sequence.len() a, c, g,t =sequence.percentage_base(sequence.count_base(),s_length) most_frequent_base = sequence.frequent_base(sequence.count()) print("Total length:", s_length) print("Most frequent base:", most_frequent_base) except KeyError: print("The gene is not inside our dictionary. Choose one of the following:", list(DICT_GENES.keys()))
def do_GET(self): termcolor.cprint(self.requestline, 'green') termcolor.cprint(self.path, 'blue') o = urlparse(self.path) path_name = o.path arguments = parse_qs(o.query) print("Resource requested: ", path_name) print("Parameters: ", arguments) context = {} content_type = 'text/html' try: if path_name == '/': context['list'] = gene_dict.keys() contents = su.read_template_html_file( './html/index.html').render(context=context) elif path_name == '/listSpecies': ENDPOINT = '/info/species' l_species = [] try: limit = arguments['limit'][0] except ValueError: contents = su.read_template_html_file( './html/error.html').render(context=context) if limit.isdigit(): for specie in ( su.get_dict(ENDPOINT)['species'][0:int(limit)]): l_species.append(specie['name']) context = { "num_species": limit, "total_species": l_species, "length": len(su.get_dict(ENDPOINT)['species']) } contents = su.read_template_html_file( './html/species.html').render(context=context) else: contents = su.read_template_html_file( './html/error.html').render(context=context) # if 'json' in arguments: # contents = json.dumps(context) # content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) elif path_name == '/karyotype': ENDPOINT = "/info/assembly/" specie = arguments['specie'][0].replace(' ', '_') dict_response = su.get_dict(ENDPOINT + specie) k_list = [] for i in dict_response['karyotype']: k_list.append(i) context = {'karyotype': k_list} contents = su.read_template_html_file( './html/karyotype.html').render(context=context) # if 'json' in arguments: # contents = json.dumps(context) #content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) elif path_name == '/chromosome': ENDPOINT = "/info/assembly/" specie = arguments['specie'][0].replace(' ', '_') dict_response = su.get_dict(ENDPOINT + specie) chromosomes = arguments['chromosome'][0] for dictionary in dict_response['top_level_region']: if dictionary['name'] == chromosomes: context = { "chromosome": chromosomes, "length": dictionary['length'] } contents = su.read_template_html_file( './html/chromosome.html').render(context=context) break else: pass # if 'json' in arguments: # contents = json.dumps(context) # content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) elif path_name == "/geneSeq": ENDPOINT = "/sequence/id/" gene = arguments['gene'][0] ID = gene_dict[arguments['gene'][0]] dict_response = su.get_dict(ENDPOINT + ID) context = {'gene_name': gene, 'seq': dict_response['seq']} contents = su.read_template_html_file( './html/geneSeq.html').render(context=context) # if 'json' in arguments: # contents = json.dumps(context) # content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) elif path_name == "/geneInfo": ENDPOINT = "/sequence/id/" gene = arguments['gene'][0] ID = gene_dict[gene] dict_response = su.get_dict(ENDPOINT + ID) info = dict_response['desc'] length = str(int(info.split(":")[4]) - int(info.split(":")[3])) context = { 'gene_name': gene, 'length': length, 'start': info.split(":")[3], 'end': info.split(":")[4], 'name': info.split(":")[2] } contents = su.read_template_html_file( './html/geneInfo.html').render(context=context) # if 'json' in arguments: # contents = json.dumps(context) # content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) elif path_name == "/geneCalc": ENDPOINT = "/sequence/id/" gene = arguments['gene'][0] ID = gene_dict[gene] dict_response = su.get_dict(ENDPOINT + ID) sequence = Seq1.Seq(dict_response["seq"]) s_length = sequence.len() percentages = sequence.percentages(sequence.count_bases(), s_length) context = { "gene_name": gene, "length": s_length, "percentages": percentages.items() } contents = su.read_template_html_file( './html/geneCalc.html').render(context=context) # if 'json' in arguments: # contents = json.dumps(context) # content_type = "application/json" # else: # contents = su.read_template_html_file('./html/error.html').render(context=context) else: contents = su.read_template_html_file( "html/error.html").render() except (KeyError, IndexError, ValueError): contents = su.read_template_html_file('./html/error.html').render() self.send_response(200) self.send_header('Content-Type', content_type) self.send_header('Content-Length', len(contents.encode())) self.end_headers() self.wfile.write(contents.encode()) return