From c7511812f01d21e1d2af528f19a7794e2ad13f24 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Tue, 19 Feb 2019 15:17:00 +0100 Subject: [PATCH 1/5] Structure of the improvements OK : test file, test folder, report generator --- pymisp/tools/reportlab_generator.py | 170 ++++++++++++++++++++++++++++ tests/test_reportlab.py | 0 2 files changed, 170 insertions(+) create mode 100644 pymisp/tools/reportlab_generator.py create mode 100644 tests/test_reportlab.py diff --git a/pymisp/tools/reportlab_generator.py b/pymisp/tools/reportlab_generator.py new file mode 100644 index 0000000..1e78352 --- /dev/null +++ b/pymisp/tools/reportlab_generator.py @@ -0,0 +1,170 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +# Standard imports +from io import BytesIO +import base64 +import logging + +logger = logging.getLogger('pymisp') + +# Potentially not installed imports +try: + from reportlab.platypus import SimpleDocTemplate + from reportlab.platypus import Paragraph + from reportlab.platypus import PageBreak + + from reportlab.lib.styles import getSampleStyleSheet + + from reportlab.lib.units import mm, inch + + from reportlab.pdfgen import canvas + + HAS_REPORTLAB = True +except ImportError: + HAS_REPORTLAB = False + print("ReportLab cannot be imported. Please verify that ReportLab is installed on the system.") + +''' +"INTERNAL" METHODS. Not meant to be used outside of this class. +''' + +def collect_parts(misp_event): + # List of elements/content we want to add + flowables = [] + # Get the list of available styles + sample_style_sheet = getSampleStyleSheet() + + # Create stuff + paragraph_1 = Paragraph("A title", sample_style_sheet['Heading1']) + paragraph_2 = Paragraph("Some normal body text",sample_style_sheet['BodyText']) + paragraph_3 = Paragraph("Dingbat paragraph", sample_style_sheet['BodyText']) # Apply custom style + Paragraph("A bold word.
An italic word.", sample_style_sheet['BodyText']) # HTML markup is working too + + # Add all parts to final PDF + flowables.append(paragraph_1) + flowables.append(paragraph_2) + flowables.append(PageBreak()) + flowables.append(paragraph_2) + flowables.append(paragraph_3) + + return flowables + +def add_page_number(canvas, doc): + canvas.saveState() + canvas.setFont('Times-Roman', 10) + page_number_text = "%d" % (doc.page) + canvas.drawCentredString( + 0.75 * inch, + 0.75 * inch, + page_number_text + ) + canvas.restoreState() + +def export_flowables_to_pdf(document, pdf_buffer, flowables): + # my_doc.build(flowables) # Basic building of the final document + + document.build( + flowables, + onFirstPage=add_page_number, # Pagination for first page + onLaterPages=add_page_number, # Pagination for all other page + ) + + +''' +"EXTERNAL" exposed METHODS. Meant to be used outside of this class. +''' + +PAGESIZE = (140 * mm, 216 * mm) # width, height +BASE_MARGIN = 5 * mm + +def convert_event_in_pdf_buffer(misp_event, debug_file=False): + + # Create the document + pdf_buffer = BytesIO() + # curr_document = SimpleDocTemplate('myfile.pdf') + curr_document = SimpleDocTemplate(pdf_buffer, + pagesize=PAGESIZE, + topMargin=BASE_MARGIN, + leftMargin=BASE_MARGIN, + rightMargin=BASE_MARGIN, + bottomMargin=BASE_MARGIN) + + # Apply standard template + # TODO + + # Set the layout + # TODO + + # Collect already accessible event's parts to be shown + flowables = collect_parts(misp_event) + + # Export + export_flowables_to_pdf(curr_document, pdf_buffer, flowables) + pdf_value = pdf_buffer.getvalue() + + #TODO : Not sure what to give back ? Buffer ? Buffer.value() ? Base64(buffer.value()) ? ... + #pdf_buffer.close() + #return pdf_value + + return pdf_buffer + + +def get_values_from_buffer(pdf_buffer): + return pdf_buffer.value() + +def get_base64_from_buffer(pdf_buffer): + return base64.b64encode(pdf_buffer.value()) + + +if __name__ == "__main__": + pdf_buffer = convert_event_in_pdf_buffer(None) + + pdf_buffer.seek(0) + + with open('test.pdf', 'wb') as f: + f.write(pdf_buffer.read()) + + # get_values_from_buffer(pdf_buffer) + # get_base64_from_buffer(pdf_buffer) + + + + + + + + + + + + + +''' In the future ? +try: + from pymispgalaxies import Clusters + has_pymispgalaxies = True +except ImportError: + has_pymispgalaxies = False + +try: + from pytaxonomies import Taxonomies + has_pymispgalaxies = True +except ImportError: + has_pymispgalaxies = False +''' +''' +class ReportLabObject(): + + def __init__(self, parameters, strict=True, standalone=True, **kwargs): + super(ReportLabObject, self).__init__('reportlab', strict=strict, standalone=standalone, **kwargs) + self._parameters = parameters + self.generate_attributes() + + def generate_attributes(self): + first = self._sanitize_timestamp(self._parameters.pop('first-seen', None)) + self._parameters['first-seen'] = first + last = self._sanitize_timestamp(self._parameters.pop('last-seen', None)) + self._parameters['last-seen'] = last + return super(ReportLabObject, self).generate_attributes() +''' diff --git a/tests/test_reportlab.py b/tests/test_reportlab.py new file mode 100644 index 0000000..e69de29 From 01b2ad9199ba85ea2d78aaa9accad9c7aa71e13d Mon Sep 17 00:00:00 2001 From: Falconieri Date: Tue, 19 Feb 2019 16:00:57 +0100 Subject: [PATCH 2/5] update with table basics --- pymisp/tools/reportlab_generator.py | 43 +++++++++++++++++++++++------ 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/pymisp/tools/reportlab_generator.py b/pymisp/tools/reportlab_generator.py index 1e78352..82f4121 100644 --- a/pymisp/tools/reportlab_generator.py +++ b/pymisp/tools/reportlab_generator.py @@ -20,6 +20,10 @@ try: from reportlab.pdfgen import canvas + from reportlab.lib import colors + from reportlab.lib.pagesizes import letter, inch + from reportlab.platypus import SimpleDocTemplate, Table, TableStyle + HAS_REPORTLAB = True except ImportError: HAS_REPORTLAB = False @@ -29,6 +33,25 @@ except ImportError: "INTERNAL" METHODS. Not meant to be used outside of this class. ''' +def create_flowable_table_from_event(misp_event): + + data = [['00', '01', '02', '03', '04'], + ['10', '11', '12', '13', '14'], + ['20', '21', '22', '23', '24'], + ['30', '31', '32', '33', '34']] + + t = Table(data, 5 * [0.4 * inch], 4 * [0.4 * inch]) + + t.setStyle(TableStyle([('TEXTCOLOR', (0, 0), (0, -1), colors.blue), + ('ALIGN', (0, 0), (-1, -1), 'CENTER'), + ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), + ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), + ('BOX', (0, 0), (-1, -1), 0.25, colors.black), + ])) + + return t + + def collect_parts(misp_event): # List of elements/content we want to add flowables = [] @@ -40,10 +63,12 @@ def collect_parts(misp_event): paragraph_2 = Paragraph("Some normal body text",sample_style_sheet['BodyText']) paragraph_3 = Paragraph("Dingbat paragraph", sample_style_sheet['BodyText']) # Apply custom style Paragraph("A bold word.
An italic word.", sample_style_sheet['BodyText']) # HTML markup is working too + table = create_flowable_table_from_event(misp_event) # Add all parts to final PDF flowables.append(paragraph_1) flowables.append(paragraph_2) + flowables.append(table) flowables.append(PageBreak()) flowables.append(paragraph_2) flowables.append(paragraph_3) @@ -70,7 +95,6 @@ def export_flowables_to_pdf(document, pdf_buffer, flowables): onLaterPages=add_page_number, # Pagination for all other page ) - ''' "EXTERNAL" exposed METHODS. Meant to be used outside of this class. ''' @@ -78,11 +102,12 @@ def export_flowables_to_pdf(document, pdf_buffer, flowables): PAGESIZE = (140 * mm, 216 * mm) # width, height BASE_MARGIN = 5 * mm -def convert_event_in_pdf_buffer(misp_event, debug_file=False): +def convert_event_in_pdf_buffer(misp_event): - # Create the document + # Create a document buffer pdf_buffer = BytesIO() - # curr_document = SimpleDocTemplate('myfile.pdf') + + # DEBUG / TO DELETE : curr_document = SimpleDocTemplate('myfile.pdf') curr_document = SimpleDocTemplate(pdf_buffer, pagesize=PAGESIZE, topMargin=BASE_MARGIN, @@ -116,14 +141,16 @@ def get_values_from_buffer(pdf_buffer): def get_base64_from_buffer(pdf_buffer): return base64.b64encode(pdf_buffer.value()) +def register_to_file(pdf_buffer, file_name): + pdf_buffer.seek(0) + + with open(file_name, 'wb') as f: + f.write(pdf_buffer.read()) if __name__ == "__main__": pdf_buffer = convert_event_in_pdf_buffer(None) - pdf_buffer.seek(0) - - with open('test.pdf', 'wb') as f: - f.write(pdf_buffer.read()) + register_to_file(pdf_buffer, 'test.pdf') # get_values_from_buffer(pdf_buffer) # get_base64_from_buffer(pdf_buffer) From 0fc780994f2abf8f4adcbdeb836bb289e2bfdb97 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Wed, 20 Feb 2019 16:15:56 +0100 Subject: [PATCH 3/5] general improvement : deisgn, exhaustiviness of mispEvent values displayed, good pratice concerning paragraphe/table made --- pymisp/tools/reportlab_generator.py | 316 +++++++++++++++++++++++----- tests/test_reportlab.py | 41 ++++ 2 files changed, 305 insertions(+), 52 deletions(-) diff --git a/pymisp/tools/reportlab_generator.py b/pymisp/tools/reportlab_generator.py index 82f4121..a2aadba 100644 --- a/pymisp/tools/reportlab_generator.py +++ b/pymisp/tools/reportlab_generator.py @@ -5,6 +5,7 @@ from io import BytesIO import base64 import logging +import pymisp logger = logging.getLogger('pymisp') @@ -22,98 +23,317 @@ try: from reportlab.lib import colors from reportlab.lib.pagesizes import letter, inch + from reportlab.lib.enums import TA_RIGHT, TA_CENTER, TA_JUSTIFY, TA_LEFT from reportlab.platypus import SimpleDocTemplate, Table, TableStyle + from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle HAS_REPORTLAB = True except ImportError: HAS_REPORTLAB = False print("ReportLab cannot be imported. Please verify that ReportLab is installed on the system.") +''' +"UTILITIES" METHODS. Not meant to be used except for development purposes +''' +import pprint + + +def get_sample_fonts(): + # Create a dummy canvas + c = canvas.Canvas("hello.pdf") + + # Print list of usable fonts + pprint.pprint(c.getAvailableFonts()) + + +def get_sample_styles(): + # Get styles, as for example sample_style_sheet['Heading1'], sample_style_sheet['BodyText'] ... + sample_style_sheet = getSampleStyleSheet() + + # if you want to see all the sample styles, this prints them + sample_style_sheet.list() + + ''' "INTERNAL" METHODS. Not meant to be used outside of this class. ''' - -def create_flowable_table_from_event(misp_event): - - data = [['00', '01', '02', '03', '04'], - ['10', '11', '12', '13', '14'], - ['20', '21', '22', '23', '24'], - ['30', '31', '32', '33', '34']] - - t = Table(data, 5 * [0.4 * inch], 4 * [0.4 * inch]) - - t.setStyle(TableStyle([('TEXTCOLOR', (0, 0), (0, -1), colors.blue), - ('ALIGN', (0, 0), (-1, -1), 'CENTER'), - ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), - ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), - ('BOX', (0, 0), (-1, -1), 0.25, colors.black), - ])) - - return t +EVEN_COLOR = colors.whitesmoke +ODD_COLOR = colors.lightgrey -def collect_parts(misp_event): +def alternate_colors_style_generator(data): + # Modified from : https://gist.github.com/chadcooper/5798392 + + data_len = len(data) + color_list = [] + + # For each line, generate a tuple giving to a line a color + for each in range(data_len): + if each % 2 == 0: + bg_color = EVEN_COLOR + else: + bg_color = ODD_COLOR + color_list.append(('BACKGROUND', (0, each), (-1, each), bg_color)) + + return color_list + + +LINE_COLOR = colors.lightslategray +LINE_THICKNESS = 0.75 + +def lines_style_generator(data): + data_len = len(data) + lines_list = [] + + # For each line, generate a tuple giving to a line a color + for each in range(data_len): + lines_list.append(('LINEABOVE', (0, each), (-1, each), LINE_THICKNESS, LINE_COLOR)) + + # Last line + lines_list.append(('LINEBELOW', (0, len(data)-1), (-1, len(data)-1), LINE_THICKNESS, LINE_COLOR)) + + return lines_list + +# FIRST_COL_FONT_COLOR = colors.darkslateblue # Test purposes +FIRST_COL_FONT_COLOR = colors.HexColor("#333333") # Same as GUI +FIRST_COL_FONT = 'Helvetica-Bold' +FIRST_COL_ALIGNEMENT = TA_CENTER + +SECOND_COL_FONT_COLOR = colors.black +SECOND_COL_FONT = 'Helvetica' +SECOND_COL_ALIGNEMENT = TA_LEFT + +TEXT_FONT_SIZE = 8 +LEADING_SPACE = 7 +EXPORT_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' +COL_WIDTHS = ['30%', '75%'] # colWidths='*' # Not documented but does exist +ROW_HEIGHT = 5 * mm # 4.5 * mm (a bit too short to allow vertical align TODO : Fix it) + +def get_published_value(misp_event): + ''' + :param misp_event: A misp event with or without "published"/"publish_timestamp" attributes + :return: a string to print in the pdf, regarding the values of "published"/"publish_timestamp" + # More information on how to play with paragraph into reportlab cells : https://stackoverflow.com/questions/11810008/reportlab-add-two-paragraphs-into-one-table-cell + ''' + + item = ["Published", 'published', "None", "publish_timestamp"] + _, col2_style = get_table_styles() + RED_COLOR = '#ff0000' + GREEN_COLOR = '#008000' + YES_ANSWER = " Yes (" + NO_ANSWER = "No" + + # Formatting similar to MISP Event web view + if hasattr(misp_event, item[1]): + if getattr(misp_event, item[1]): # == True + if hasattr(misp_event, item[3]): + # Published and have published date + return Paragraph(YES_ANSWER + getattr(misp_event, item[3]).strftime(EXPORT_DATE_FORMAT) + ")", + col2_style) + else: + # Published without published date + return YES_ANSWER + "no date)" + else: + # Not published + return NO_ANSWER + else: + # Does not have a published attribute + return item[2] + + +def create_flowable_table_from_event(misp_event: pymisp.MISPEvent): + # == Run on >1000 OSINT Events == + # 'Tag': 1065, OK + # 'Attribute': 1050, NOT OK + # 'Object': 175, NOT OK + # 'info': 1065, OK + # 'threat_level_id': 1065, OK (added) TODO : improve design + # 'analysis': 1065, OK (added) TODO : improve design + Ask where the enum is ! + # 'published': 1065, OK (added) + # 'date': 1065, OK (added) + # 'timestamp': 1065, OK (added) + # 'publish_timestamp': 1065, OK (added) + # 'Orgc': 1065, OK + # 'uuid': 1065 OK (added) + + # To reduce code size, and automate it a bit, triplet (Displayed Name, object_attribute_name, + # to_display_if_not_present) are store in the following list + list_attr_automated = [["Event ID", 'id', "None"], + ["UUID", 'uuid', "None"], # OK + ["Creator org", 'org', "None"], + ["Date", 'date', "None"], + ["Owner org", 'owner', "None"], + ["Email", 'email', "None"], + ["Tags", 'TODO', "None"], + ["Threat level", 'threat_level_id', "None"], + ["Analysis", 'analysis', "None"], + ["Distribution", 'distribution', "None"], + ["Info", 'info', "None"], # OK + ["# Attributes", 'attribute_count', "None"], + ["First recorded change", 'TODO', "None"], + ["Last change", 'TODO', "None"], + ["Modification map", 'TODO', "None"], + ["Sightings", 'TODO', "None"] + ] + + list_attr_manual = [["Event date", 'timestamp', "None"], # OK + ["Published", 'published', "None"], # OK + ["Sightings", 'TODO', "None"] + ] + + data = [] + col1_style, col2_style = get_table_styles() + + # Automated adding of standard (python) attributes of the misp event + # Note that PEP 0363 may change the syntax in future release : https://www.python.org/dev/peps/pep-0363/ + for item in list_attr_automated: + if hasattr(misp_event, item[1]): + # The attribute exist, we fetch it and create the row + data.append([Paragraph(item[0], col1_style), Paragraph(str(getattr(misp_event, item[1])), col2_style)]) + else: + # The attribute does not exist ,we print a default text on the row + data.append([Paragraph(item[0], col1_style), Paragraph(item[2], col2_style)]) + + # Manual addition of specific attributes + item = list_attr_manual[0] # Timestamp + if hasattr(misp_event, item[1]): + data.append([Paragraph(item[0], col1_style), Paragraph(str(getattr(misp_event, item[1]).strftime(EXPORT_DATE_FORMAT)), col2_style)]) + else : + data.append([Paragraph(item[0], col1_style), Paragraph(item[2], col2_style)]) + + # Published (Factorized, because too long) + item = list_attr_manual[1] + data.append([Paragraph(item[0], col1_style), get_published_value(misp_event)]) + + # Create styles and set parameters + alternate_colors_style = alternate_colors_style_generator(data) + lines_style = lines_style_generator(data) + + # Create the table + curr_table = Table(data, COL_WIDTHS, + rowHeights=(ROW_HEIGHT)) # colWidths='*' does a 100% and share the space automatically + + # Make the table nicer + curr_table.setStyle(TableStyle([('TEXTCOLOR', (0, 0), (0, -1), FIRST_COL_FONT_COLOR), + ('TEXTCOLOR', (1, 0), (-1, -1), SECOND_COL_FONT_COLOR), + ('FONT', (0, 0), (0, -1), FIRST_COL_FONT), + ('FONT', (1, 0), (-1, -1), SECOND_COL_FONT), + ('FONTSIZE', (0, 0), (-1, -1), TEXT_FONT_SIZE), + ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), + ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), + # ('BOX', (0, 0), (-1, -1), 0.25, colors.black) # Box for all + ] + alternate_colors_style + lines_style)) + + return curr_table + + +def create_style(): + sample_style_sheet = getSampleStyleSheet() + + custom_body_style = sample_style_sheet['BodyText'] + custom_body_style.fontName = 'Helvetica' + custom_body_style.fontSize = 9 + + # custom_body_style.listAttrs() # Print list of attributes that can be changed + # styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) + + return custom_body_style + + +def get_table_styles(): + sample_style_sheet = getSampleStyleSheet() + + custom_body_style_col_1 = ParagraphStyle(name='Column_1', + parent=sample_style_sheet['Normal'], + fontName=FIRST_COL_FONT, + textColor=FIRST_COL_FONT_COLOR, + fontSize=TEXT_FONT_SIZE, + leading=LEADING_SPACE, + alignment=FIRST_COL_ALIGNEMENT) + + custom_body_style_col_2 = ParagraphStyle(name='Column_2', + parent=sample_style_sheet['Normal'], + fontName=SECOND_COL_FONT, + textColor=SECOND_COL_FONT_COLOR, + fontSize=TEXT_FONT_SIZE, + leading=LEADING_SPACE, + alignment=SECOND_COL_ALIGNEMENT) + + return custom_body_style_col_1, custom_body_style_col_2 + + +def collect_parts(misp_event: pymisp.MISPEvent): # List of elements/content we want to add flowables = [] # Get the list of available styles sample_style_sheet = getSampleStyleSheet() + # Create own style + custom_style = create_style() + # Create stuff - paragraph_1 = Paragraph("A title", sample_style_sheet['Heading1']) - paragraph_2 = Paragraph("Some normal body text",sample_style_sheet['BodyText']) - paragraph_3 = Paragraph("Dingbat paragraph", sample_style_sheet['BodyText']) # Apply custom style - Paragraph("A bold word.
An italic word.", sample_style_sheet['BodyText']) # HTML markup is working too + paragraph_1 = Paragraph(misp_event.info, sample_style_sheet['Heading1']) + paragraph_2 = Paragraph(str(misp_event.to_json()), custom_style) + paragraph_3 = Paragraph("Dingbat paragraph", + sample_style_sheet['BodyText']) # Apply custom style + paragraph_4 = Paragraph("A bold word.
An italic word.", + sample_style_sheet['BodyText']) # HTML markup is working too table = create_flowable_table_from_event(misp_event) # Add all parts to final PDF flowables.append(paragraph_1) - flowables.append(paragraph_2) flowables.append(table) flowables.append(PageBreak()) + flowables.append(PageBreak()) flowables.append(paragraph_2) flowables.append(paragraph_3) return flowables + def add_page_number(canvas, doc): canvas.saveState() canvas.setFont('Times-Roman', 10) page_number_text = "%d" % (doc.page) + canvas.drawCentredString( 0.75 * inch, 0.75 * inch, page_number_text ) + canvas.restoreState() + def export_flowables_to_pdf(document, pdf_buffer, flowables): # my_doc.build(flowables) # Basic building of the final document document.build( flowables, - onFirstPage=add_page_number, # Pagination for first page - onLaterPages=add_page_number, # Pagination for all other page + onFirstPage=add_page_number, # Pagination for first page + onLaterPages=add_page_number, # Pagination for all other page ) + ''' "EXTERNAL" exposed METHODS. Meant to be used outside of this class. ''' -PAGESIZE = (140 * mm, 216 * mm) # width, height -BASE_MARGIN = 5 * mm +PAGESIZE = (140 * mm, 216 * mm) # width, height +BASE_MARGIN = 5 * mm # Create a list here to specify each row separately -def convert_event_in_pdf_buffer(misp_event): +def convert_event_in_pdf_buffer(misp_event: pymisp.MISPEvent): # Create a document buffer pdf_buffer = BytesIO() # DEBUG / TO DELETE : curr_document = SimpleDocTemplate('myfile.pdf') curr_document = SimpleDocTemplate(pdf_buffer, - pagesize=PAGESIZE, - topMargin=BASE_MARGIN, - leftMargin=BASE_MARGIN, - rightMargin=BASE_MARGIN, - bottomMargin=BASE_MARGIN) + pagesize=PAGESIZE, + topMargin=BASE_MARGIN, + leftMargin=BASE_MARGIN, + rightMargin=BASE_MARGIN, + bottomMargin=BASE_MARGIN) # Apply standard template # TODO @@ -128,9 +348,9 @@ def convert_event_in_pdf_buffer(misp_event): export_flowables_to_pdf(curr_document, pdf_buffer, flowables) pdf_value = pdf_buffer.getvalue() - #TODO : Not sure what to give back ? Buffer ? Buffer.value() ? Base64(buffer.value()) ? ... - #pdf_buffer.close() - #return pdf_value + # TODO : Not sure what to give back ? Buffer ? Buffer.value() ? Base64(buffer.value()) ? ... + # pdf_buffer.close() + # return pdf_value return pdf_buffer @@ -138,35 +358,27 @@ def convert_event_in_pdf_buffer(misp_event): def get_values_from_buffer(pdf_buffer): return pdf_buffer.value() + def get_base64_from_buffer(pdf_buffer): return base64.b64encode(pdf_buffer.value()) + def register_to_file(pdf_buffer, file_name): pdf_buffer.seek(0) with open(file_name, 'wb') as f: f.write(pdf_buffer.read()) -if __name__ == "__main__": - pdf_buffer = convert_event_in_pdf_buffer(None) - register_to_file(pdf_buffer, 'test.pdf') +if __name__ == "__main__": + # pdf_buffer = convert_event_in_pdf_buffer(None) + + # register_to_file(pdf_buffer, 'test.pdf') + get_sample_fonts() # get_values_from_buffer(pdf_buffer) # get_base64_from_buffer(pdf_buffer) - - - - - - - - - - - - ''' In the future ? try: from pymispgalaxies import Clusters diff --git a/tests/test_reportlab.py b/tests/test_reportlab.py index e69de29..13def0e 100644 --- a/tests/test_reportlab.py +++ b/tests/test_reportlab.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import unittest +import json +import sys +from io import BytesIO + +from pymisp import MISPEvent, MISPSighting, MISPTag, reportlab_generator + +class TestMISPEvent(unittest.TestCase): + + def setUp(self): + self.maxDiff = None + self.mispevent = MISPEvent() + self.test_folder = "reportlab_testfiles/" + self.storage_folder = "reportlab_testoutputs/" + + def init_event(self): + self.mispevent.info = 'This is a test' + self.mispevent.distribution = 1 + self.mispevent.threat_level_id = 1 + self.mispevent.analysis = 1 + self.mispevent.set_date("2017-12-31") # test the set date method + + def test_basic_event(self): + self.init_event() + reportlab_generator.register_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), self.storage_folder + "basic_event.pdf") + + def test_event(self): + self.init_event() + self.mispevent.load_file(self.test_folder + 'to_delete1.json') + reportlab_generator.register_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), + self.storage_folder + "basic_event.pdf") + + # TODO : To modify below this line + def test_loadfile(self): + self.mispevent.load_file('tests/mispevent_testfiles/event.json') + with open('tests/mispevent_testfiles/event.json', 'r') as f: + ref_json = json.load(f) + self.assertEqual(self.mispevent.to_json(), json.dumps(ref_json, sort_keys=True, indent=2)) From 57eccfe7dcd660b1cf028bd9eb4d4a00fb947d4c Mon Sep 17 00:00:00 2001 From: Falconieri Date: Fri, 22 Feb 2019 10:18:44 +0100 Subject: [PATCH 4/5] add: exportpdf tool working --- pymisp/__init__.py | 1 + pymisp/mispevent.py | 2 +- pymisp/tools/reportlab_generator.py | 595 ++++++++++--- setup.py | 2 +- tests/reportlab_testfiles/to_delete1.json | 804 ++++++++++++++++++ tests/reportlab_testfiles/to_delete2.json | 1 + tests/reportlab_testfiles/to_delete3.json | 1 + tests/reportlab_testoutputs/basic_event.pdf | 391 +++++++++ .../reportlab_testoutputs/to_delete1.json.pdf | 391 +++++++++ .../reportlab_testoutputs/to_delete2.json.pdf | 506 +++++++++++ .../reportlab_testoutputs/to_delete3.json.pdf | 277 ++++++ tests/test_reportlab.py | 36 +- 12 files changed, 2858 insertions(+), 149 deletions(-) create mode 100644 tests/reportlab_testfiles/to_delete1.json create mode 100644 tests/reportlab_testfiles/to_delete2.json create mode 100644 tests/reportlab_testfiles/to_delete3.json create mode 100644 tests/reportlab_testoutputs/basic_event.pdf create mode 100644 tests/reportlab_testoutputs/to_delete1.json.pdf create mode 100644 tests/reportlab_testoutputs/to_delete2.json.pdf create mode 100644 tests/reportlab_testoutputs/to_delete3.json.pdf diff --git a/pymisp/__init__.py b/pymisp/__init__.py index 73062e7..b4b7264 100644 --- a/pymisp/__init__.py +++ b/pymisp/__init__.py @@ -42,6 +42,7 @@ try: from .tools import openioc # noqa from .tools import load_warninglists # noqa from .tools import ext_lookups # noqa + from .tools import reportlab_generator # noqa if sys.version_info >= (3, 6): from .aping import ExpandedPyMISP # noqa logger.debug('pymisp loaded properly') diff --git a/pymisp/mispevent.py b/pymisp/mispevent.py index a1cfa8b..9a46625 100644 --- a/pymisp/mispevent.py +++ b/pymisp/mispevent.py @@ -459,7 +459,7 @@ class MISPEvent(AbstractMISP): if OLD_PY3 and isinstance(json_event, bytes): json_event = json_event.decode() json_event = json.loads(json_event) - if json_event.get('response'): + if json_event.get('response'): # hasattr(json_event, 'response') and ... is a Bugfix ? event = json_event.get('response')[0] else: event = json_event diff --git a/pymisp/tools/reportlab_generator.py b/pymisp/tools/reportlab_generator.py index a2aadba..7009576 100644 --- a/pymisp/tools/reportlab_generator.py +++ b/pymisp/tools/reportlab_generator.py @@ -2,43 +2,145 @@ # -*- coding: utf-8 -*- # Standard imports -from io import BytesIO import base64 import logging +import pprint +from io import BytesIO import pymisp logger = logging.getLogger('pymisp') # Potentially not installed imports try: - from reportlab.platypus import SimpleDocTemplate - from reportlab.platypus import Paragraph - from reportlab.platypus import PageBreak + from reportlab.pdfgen import canvas + from reportlab.pdfbase.pdfmetrics import stringWidth + from reportlab.lib import colors - from reportlab.lib.styles import getSampleStyleSheet + from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak, Spacer, Table, TableStyle, Flowable + from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.units import mm, inch - - from reportlab.pdfgen import canvas - - from reportlab.lib import colors - from reportlab.lib.pagesizes import letter, inch from reportlab.lib.enums import TA_RIGHT, TA_CENTER, TA_JUSTIFY, TA_LEFT - from reportlab.platypus import SimpleDocTemplate, Table, TableStyle - from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle + from reportlab.lib.pagesizes import letter, inch HAS_REPORTLAB = True except ImportError: HAS_REPORTLAB = False print("ReportLab cannot be imported. Please verify that ReportLab is installed on the system.") + +######################################################################## +class Flowable_Tag(Flowable): + """ + Custom flowable to handle tags + Modified from : http://two.pairlist.net/pipermail/reportlab-users/2005-February/003695.html + and : http://www.blog.pythonlibrary.org/2014/03/10/reportlab-how-to-create-custom-flowables/ + """ + + # ---------------------------------------------------------------------- + def __init__(self, x=0, y=0, width=40, height=15, text="", color="#ffffff", custom_style=None): + Flowable.__init__(self) + self.x = x + self.y = y + self.width = width + self.height = height + self.text = text + self.colour = color + if custom_style is not None: + self.custom_style = custom_style + else: + self.custom_style = getSampleStyleSheet()["Normal"] + + # ---------------------------------------------------------------------- + + def coord(self, x, y, unit=1): + """ + http://stackoverflow.com/questions/4726011/wrap-text-in-a-table-reportlab + Helper class to help position flowables in Canvas objects + """ + x, y = x * unit, self.height - y * unit + return x, y + + # ---------------------------------------------------------------------- + def __repr__(self): + return "Tag(w=" + str(self.width) + ")" + + # ---------------------------------------------------------------------- + def choose_good_text_color(self): + # See : http://trendct.org/2016/01/22/how-to-choose-a-label-color-to-contrast-with-background/ + r, g, b = colors.HexColor(self.colour).rgb() + + brightness = r * 299 + g * 587 + b * 114 / 1000 + + if brightness < 500: # Standard treeshold for human vision : 123 instead of 500 + return "#ffffff" # Black + else: + return "#000000" # White + + # ---------------------------------------------------------------------- + def draw(self): + """ + Draw the shape, text, etc to show a Tag + Honestely, constant are totally ad-hoc. Feels free to change it, but be sure to test the visual result of it. + """ + RADIUS = 1 * mm + LEFT_INTERNAL_PADDING = 2 + ELONGATION = LEFT_INTERNAL_PADDING * 2 + + p = Paragraph("" + self.text + "", + style=self.custom_style) + string_width = stringWidth(self.text, self.custom_style.fontName, self.custom_style.fontSize) + + self.width = string_width + ELONGATION + self.height = self.custom_style.fontSize + + self.canv.setFillColor(colors.HexColor(self.colour)) + self.canv.roundRect(self.x, self.y + LEFT_INTERNAL_PADDING, self.width, self.height + 2, RADIUS, fill=1) + + p.wrapOn(self.canv, self.width, self.height) + p.drawOn(self.canv, *self.coord(self.x, self.y + 0.5 * LEFT_INTERNAL_PADDING, mm)) + + +# == Row colors of the table (alternating) == +EVEN_COLOR = colors.whitesmoke +ODD_COLOR = colors.lightgrey + +# == Lines parameters of the table == +LINE_COLOR = colors.lightslategray +LINE_THICKNESS = 0.75 + +# == Columns colors, aligment, fonts, space, size, width, heights == +# FIRST_COL_FONT_COLOR = colors.darkslateblue # Test purposes +FIRST_COL_FONT_COLOR = colors.HexColor("#333333") # Same as GUI +FIRST_COL_FONT = 'Helvetica-Bold' +FIRST_COL_ALIGNEMENT = TA_CENTER + +SECOND_COL_FONT_COLOR = colors.black +SECOND_COL_FONT = 'Helvetica' +SECOND_COL_ALIGNEMENT = TA_LEFT + +TEXT_FONT_SIZE = 8 +LEADING_SPACE = 7 +EXPORT_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' +COL_WIDTHS = ['30%', '75%'] # colWidths='*' # Not documented but does exist +ROW_HEIGHT = 5 * mm # 4.5 * mm (a bit too short to allow vertical align TODO : Fix it) +ROW_HEIGHT_FOR_TAGS = 4 * mm # 4.5 * mm (a bit too short to allow vertical align TODO : Fix it) + +# == Whole document margins and size == +PAGESIZE = (140 * mm, 216 * mm) # width, height +BASE_MARGIN = 5 * mm # Create a list here to specify each row separately + ''' "UTILITIES" METHODS. Not meant to be used except for development purposes ''' -import pprint def get_sample_fonts(): + ''' + Get fonts available on the current system, usable in pdf generation + :return: None. Print on std output the list of available fonts + ''' + # Create a dummy canvas c = canvas.Canvas("hello.pdf") @@ -47,6 +149,11 @@ def get_sample_fonts(): def get_sample_styles(): + ''' + Get styles available in reportLab (Paragraph, Heading1, ...) + :return: None. Print on std output the list of available styles + ''' + # Get styles, as for example sample_style_sheet['Heading1'], sample_style_sheet['BodyText'] ... sample_style_sheet = getSampleStyleSheet() @@ -57,12 +164,16 @@ def get_sample_styles(): ''' "INTERNAL" METHODS. Not meant to be used outside of this class. ''' -EVEN_COLOR = colors.whitesmoke -ODD_COLOR = colors.lightgrey def alternate_colors_style_generator(data): - # Modified from : https://gist.github.com/chadcooper/5798392 + ''' + Create a style, applicable on a table that will be built with parameter's data, with alternated + background color for each line. + Modified from : https://gist.github.com/chadcooper/5798392 + :param data: list of list of items (2D table) to be displayed in the pdf + :return: A list of 'BACKGROUND' properties, usable in a TableStyle, with alternated colours + ''' data_len = len(data) color_list = [] @@ -78,10 +189,13 @@ def alternate_colors_style_generator(data): return color_list -LINE_COLOR = colors.lightslategray -LINE_THICKNESS = 0.75 - def lines_style_generator(data): + ''' + Create a style, applicable on a table that will be built with parameter's data, + that draw colored lines above and below each line of the table + :param data: list of list of items (2D table) to be displayed in the pdf + :return: A list of 'LINE****' properties, usable in a TableStyle, that are drawing lines + ''' data_len = len(data) lines_list = [] @@ -90,34 +204,43 @@ def lines_style_generator(data): lines_list.append(('LINEABOVE', (0, each), (-1, each), LINE_THICKNESS, LINE_COLOR)) # Last line - lines_list.append(('LINEBELOW', (0, len(data)-1), (-1, len(data)-1), LINE_THICKNESS, LINE_COLOR)) + lines_list.append(('LINEBELOW', (0, len(data) - 1), (-1, len(data) - 1), LINE_THICKNESS, LINE_COLOR)) return lines_list -# FIRST_COL_FONT_COLOR = colors.darkslateblue # Test purposes -FIRST_COL_FONT_COLOR = colors.HexColor("#333333") # Same as GUI -FIRST_COL_FONT = 'Helvetica-Bold' -FIRST_COL_ALIGNEMENT = TA_CENTER -SECOND_COL_FONT_COLOR = colors.black -SECOND_COL_FONT = 'Helvetica' -SECOND_COL_ALIGNEMENT = TA_LEFT - -TEXT_FONT_SIZE = 8 -LEADING_SPACE = 7 -EXPORT_DATE_FORMAT = '%Y-%m-%d %H:%M:%S' -COL_WIDTHS = ['30%', '75%'] # colWidths='*' # Not documented but does exist -ROW_HEIGHT = 5 * mm # 4.5 * mm (a bit too short to allow vertical align TODO : Fix it) - -def get_published_value(misp_event): +def general_style_generator(): ''' + Create the general style (alignement, padding ...) of the table, copying the MISP'event's web_view. + :return: a list of properties, usable in a TableStyle + ''' + lines_list = [] + + lines_list.append(('VALIGN', (0, 0), (-1, -1), 'MIDDLE')) + lines_list.append(('LEFTPADDING', (0, 0), (-1, -1), 0)) + lines_list.append(('RIGHTPADDING', (0, 0), (-1, -1), 0)) + + # VERTICAL_PADDING = 2 + # lines_list.append(('TOPPADDING', (0, 0), (-1, -1), VERTICAL_PADDING)) + # lines_list.append(('BOTTOMPADDING', (0, 0), (-1, -1), VERTICAL_PADDING)) + + return lines_list + + +def get_published_value(misp_event, item, col2_style): + ''' + Returns a flowable paragraph to add to the pdf given the misp_event published/published_time + More information on how to play with paragraph into reportlab cells : + https://stackoverflow.com/questions/11810008/reportlab-add-two-paragraphs-into-one-table-cell :param misp_event: A misp event with or without "published"/"publish_timestamp" attributes - :return: a string to print in the pdf, regarding the values of "published"/"publish_timestamp" - # More information on how to play with paragraph into reportlab cells : https://stackoverflow.com/questions/11810008/reportlab-add-two-paragraphs-into-one-table-cell + :param item: a list of name, in order : + ["Name to be print in the pdf", "json property access name", + " Name to be display if no values found in the misp_event", json property access name (for timestamp")] + e.g. item = ["Published", 'published', "None", "publish_timestamp"] + :param col2_style: style to be applied on the returned paragraph + :return: a Paragraph to add in the pdf, regarding the values of "published"/"publish_timestamp" ''' - item = ["Published", 'published', "None", "publish_timestamp"] - _, col2_style = get_table_styles() RED_COLOR = '#ff0000' GREEN_COLOR = '#008000' YES_ANSWER = " Yes (" @@ -141,44 +264,143 @@ def get_published_value(misp_event): return item[2] +def get_timestamp_value(misp_event, item, col2_style): + ''' + Returns a flowable paragraph to add to the pdf given the misp_event timestamp + :param misp_event: A misp event with or without "timestamp" attributes + :param item: a list of name, in order : + ["Name to be print in the pdf", "json property access name", + " Name to be display if no values found in the misp_event"] + :param col2_style: style to be applied on the returned paragraph + :return: a Paragraph to add in the pdf, regarding the values of "timestamp" + ''' + if hasattr(misp_event, item[1]): + return Paragraph(str(getattr(misp_event, item[1]).strftime(EXPORT_DATE_FORMAT)), col2_style) + else: + return Paragraph(item[2], col2_style) + + +def get_creator_organisation_value(misp_event, item, col2_style): + ''' + Returns a flowable paragraph to add to the pdf given the misp_event creator organisation + :param misp_event: A misp event with or without "timestamp" attributes + :param item: a list of name, in order : + ["Name to be print in the pdf", "json property access name", + " Name to be display if no values found in the misp_event", "json property access name (second level)"] + :param col2_style: style to be applied on the returned paragraph + :return: a Paragraph to add in the pdf, regarding the values of "creator organisation" + ''' + if hasattr(misp_event, item[1]): + return Paragraph(str(getattr(getattr(misp_event, item[1]), item[3])), col2_style) + else: + return Paragraph(item[2], col2_style) + + +def get_attributes_number_value(misp_event, item, col2_style): + ''' + Returns a flowable paragraph to add to the pdf given the misp_event attributes + :param misp_event: A misp event with or without "attributes" attributes + :param item: a list of name, in order : + ["Name to be print in the pdf", "json property access name", + " Name to be display if no values found in the misp_event"] + :param col2_style: style to be applied on the returned paragraph + :return: a Paragraph to add in the pdf, regarding the values of "attributes" + ''' + if hasattr(misp_event, item[1]): + return Paragraph(str(len(getattr(misp_event, item[1]))), col2_style) + else: + return Paragraph(item[2], col2_style) + + +def get_tag_value(misp_event, item, col2_style): + ''' + Returns a flowable paragraph to add to the pdf given the misp_event tags + :param misp_event: A misp event with or without "tags" attributes + :param item: a list of name, in order : + ["Name to be print in the pdf", "json property access name", + " Name to be display if no values found in the misp_event"] + :param col2_style: style to be applied on the returned paragraph + :return: a Paragraph to add in the pdf, regarding the values of "tags" + ''' + if hasattr(misp_event, item[1]): + table_event_tags = create_flowable_table_from_tags(misp_event) + return table_event_tags + else: + return Paragraph(item[2], col2_style) + + +def create_flowable_table_from_data(data): + ''' + Given a list of flowables items (2D/list of list), creates a Table with styles. + :param data: list of list of items (flowables is better) + :return: a Table - with styles - to add to the pdf + ''' + # Create the table + curr_table = Table(data, COL_WIDTHS) + + # Aside notes : + # colWidths='*' does a 100% and share the space automatically + # rowHeights=ROW_HEIGHT if you want a fixed height. /!\ Problems with paragraphs that are spreading everywhere + + # Create styles and set parameters + alternate_colors_style = alternate_colors_style_generator(data) + lines_style = lines_style_generator(data) + general_style = general_style_generator() + + # Make the table nicer + curr_table.setStyle(TableStyle(general_style + alternate_colors_style + lines_style)) + + return curr_table + + +def create_tags_table_from_data(data): + ''' + Given a list of flowables tags (2D/list of list), creates a Table with styles adapted to tags. + :param data: list of list of tags (flowables) + :return: a Table - with styles - to add to another table + ''' + + # Create the table + curr_table = Table(data, COL_WIDTHS, rowHeights=ROW_HEIGHT_FOR_TAGS) + + # Create styles and set parameters + general_style = general_style_generator() + + # Make the table nicer + curr_table.setStyle(TableStyle(general_style)) + + return curr_table + + def create_flowable_table_from_event(misp_event: pymisp.MISPEvent): - # == Run on >1000 OSINT Events == - # 'Tag': 1065, OK - # 'Attribute': 1050, NOT OK - # 'Object': 175, NOT OK - # 'info': 1065, OK - # 'threat_level_id': 1065, OK (added) TODO : improve design - # 'analysis': 1065, OK (added) TODO : improve design + Ask where the enum is ! - # 'published': 1065, OK (added) - # 'date': 1065, OK (added) - # 'timestamp': 1065, OK (added) - # 'publish_timestamp': 1065, OK (added) - # 'Orgc': 1065, OK - # 'uuid': 1065 OK (added) + ''' + Returns Table presenting a MISP event + :param misp_event: A misp event (complete or not) + :return: a table that can be added to a pdf + ''' # To reduce code size, and automate it a bit, triplet (Displayed Name, object_attribute_name, # to_display_if_not_present) are store in the following list - list_attr_automated = [["Event ID", 'id', "None"], - ["UUID", 'uuid', "None"], # OK - ["Creator org", 'org', "None"], - ["Date", 'date', "None"], - ["Owner org", 'owner', "None"], - ["Email", 'email', "None"], - ["Tags", 'TODO', "None"], - ["Threat level", 'threat_level_id', "None"], - ["Analysis", 'analysis', "None"], - ["Distribution", 'distribution', "None"], - ["Info", 'info', "None"], # OK - ["# Attributes", 'attribute_count', "None"], - ["First recorded change", 'TODO', "None"], - ["Last change", 'TODO', "None"], - ["Modification map", 'TODO', "None"], - ["Sightings", 'TODO', "None"] - ] + list_attr_automated = [ # ["Event ID", 'id', "None"], + ["UUID", 'uuid', "None"], + ["Date", 'date', "None"], + ["Owner org", 'owner', "None"], + # TODO : Not present ["Email", 'email', "None"], + ["Threat level", 'threat_level_id', "None"], # TODO : improve design + ["Analysis", 'analysis', "None"], # TODO : improve design + Ask where the enum is ! + # TODO : ["Distribution", 'distribution', "None"], + ["Info", 'info', "None"], # OK + # TODO : ["First recorded change", 'TODO', "None"], + # TODO : ["Last change", 'TODO', "None"], + # TODO : ["Modification map", 'TODO', "None"], + # TODO : ["Sightings", 'TODO', "None"] + ] - list_attr_manual = [["Event date", 'timestamp', "None"], # OK - ["Published", 'published', "None"], # OK - ["Sightings", 'TODO', "None"] + list_attr_manual = [["Event date", 'timestamp', "None"], + ["Published", 'published', "None", "publish_timestamp"], + ["Creator Org", 'Orgc', "None", "name"], + ["# Attributes", 'Attribute', "None"], + ["Tags", 'Tag', "None"] ] data = [] @@ -194,53 +416,130 @@ def create_flowable_table_from_event(misp_event: pymisp.MISPEvent): # The attribute does not exist ,we print a default text on the row data.append([Paragraph(item[0], col1_style), Paragraph(item[2], col2_style)]) - # Manual addition of specific attributes - item = list_attr_manual[0] # Timestamp - if hasattr(misp_event, item[1]): - data.append([Paragraph(item[0], col1_style), Paragraph(str(getattr(misp_event, item[1]).strftime(EXPORT_DATE_FORMAT)), col2_style)]) - else : - data.append([Paragraph(item[0], col1_style), Paragraph(item[2], col2_style)]) + # Manual addition of specific attributes(Factorized, because too long) + # Timestamp + item = list_attr_manual[0] + data.append([Paragraph(item[0], col1_style), get_timestamp_value(misp_event, item, col2_style)]) - # Published (Factorized, because too long) + # Published item = list_attr_manual[1] - data.append([Paragraph(item[0], col1_style), get_published_value(misp_event)]) + data.append([Paragraph(item[0], col1_style), get_published_value(misp_event, item, col2_style)]) - # Create styles and set parameters - alternate_colors_style = alternate_colors_style_generator(data) - lines_style = lines_style_generator(data) + # Creator organisation + item = list_attr_manual[2] + data.append([Paragraph(item[0], col1_style), get_creator_organisation_value(misp_event, item, col2_style)]) - # Create the table - curr_table = Table(data, COL_WIDTHS, - rowHeights=(ROW_HEIGHT)) # colWidths='*' does a 100% and share the space automatically + # Number of Attributes + item = list_attr_manual[3] + data.append([Paragraph(item[0], col1_style), get_attributes_number_value(misp_event, item, col2_style)]) - # Make the table nicer - curr_table.setStyle(TableStyle([('TEXTCOLOR', (0, 0), (0, -1), FIRST_COL_FONT_COLOR), - ('TEXTCOLOR', (1, 0), (-1, -1), SECOND_COL_FONT_COLOR), - ('FONT', (0, 0), (0, -1), FIRST_COL_FONT), - ('FONT', (1, 0), (-1, -1), SECOND_COL_FONT), - ('FONTSIZE', (0, 0), (-1, -1), TEXT_FONT_SIZE), - ('VALIGN', (0, 0), (-1, -1), 'MIDDLE'), - ('INNERGRID', (0, 0), (-1, -1), 0.25, colors.black), - # ('BOX', (0, 0), (-1, -1), 0.25, colors.black) # Box for all - ] + alternate_colors_style + lines_style)) + # Number of Attributes + item = list_attr_manual[4] + data.append([Paragraph(item[0], col1_style), get_tag_value(misp_event, item, col2_style)]) - return curr_table + return create_flowable_table_from_data(data) -def create_style(): +def create_flowable_table_from_attributes(misp_event: pymisp.MISPEvent): + ''' + Returns a list of flowables representing the list of attributes of a misp event. + The list is composed alternatively of headers and tables, to add to the pdf + :param misp_event: A misp event + :return: a table of flowables + ''' + + flowable_table = [] sample_style_sheet = getSampleStyleSheet() + i = 0 - custom_body_style = sample_style_sheet['BodyText'] - custom_body_style.fontName = 'Helvetica' - custom_body_style.fontSize = 9 + if hasattr(misp_event, "Attribute"): + # There is some attributes for this object + for item in getattr(misp_event, "Attribute"): + # TODO : TO ACTIVATE IF NECESSARY flowable_table.append(Spacer(1, 5 * mm)) + flowable_table.append(Paragraph("Attribute #" + str(i), sample_style_sheet['Heading3'])) + flowable_table.append(create_flowable_table_from_one_attribute(item)) + i += 1 + else: + # No attributes for this object + flowable_table.append(Paragraph("No attributes", sample_style_sheet['Heading2'])) - # custom_body_style.listAttrs() # Print list of attributes that can be changed - # styles.add(ParagraphStyle(name='Justify', alignment=TA_JUSTIFY)) + return flowable_table - return custom_body_style +def create_flowable_table_from_one_attribute(misp_attribute: pymisp.mispevent.MISPAttribute): + ''' + Returns a table (flowalbe) representing the attribute + :param misp_attribute: A misp attribute + :return: a table representing this misp's attribute's attributes, to add to the pdf as a flowable + ''' + data = [] + col1_style, col2_style = get_table_styles() + + # To reduce code size, and automate it a bit, triplet (Displayed Name, object_attribute_name, + # to_display_if_not_present) are store in the following list + list_attr_automated = [["UUID", 'uuid', "None"], # OK + ["Category", 'category', "None"], # OK + ["Comment", 'comment', "None"], # OK + ["Type", 'type', "None"], # OK + ["Value", 'value', "None"]] # OK + + list_attr_manual = [["Tags", 'Tag', "None"]] # OK + + # Automated adding of standard (python) attributes of the misp event + for item in list_attr_automated: + if hasattr(misp_attribute, item[1]) and getattr(misp_attribute, item[1]) is not None and getattr(misp_attribute, item[1]) != "": + # The attribute exist, we fetch it and create the row + data.append([Paragraph(item[0], col1_style), Paragraph(str(getattr(misp_attribute, item[1])), col2_style)]) + #else: + # The attribute does not exist ,we print a default text on the row + # TODO : TO ACTIVATE IF YOU WANT A EMPTY LINE INSTEAD OF NOTHING data.append([Paragraph(item[0], col1_style), Paragraph(item[2], col2_style)]) + + # Number of Attributes + item = list_attr_manual[0] + + if hasattr(misp_attribute, item[1]): + data.append([Paragraph(item[0], col1_style), get_tag_value(misp_attribute, item, col2_style)]) + + return create_flowable_table_from_data(data) + + +def create_flowable_table_from_tags(misp_event: pymisp.MISPEvent): + ''' + Returns a Table (flowable) to add to a pdf, representing the list of tags of an event or a misp event + :param misp_event: A misp event + :return: a table of flowable to add to the pdf + ''' + + flowable_table = [] + col1_style, col2_style = get_table_styles() + + i = 0 + if hasattr(misp_event, "Tag") and len(getattr(misp_event, "Tag")): # Tags can exist but be empty + # There is some tags for this object + for item in getattr(misp_event, "Tag"): + flowable_table.append(create_flowable_tag(item)) + i += 1 + return create_tags_table_from_data(flowable_table) + else: + # No tags for this object + return [Paragraph("No tags", col2_style)] + + +def create_flowable_tag(misp_tag): + ''' + Returns a Flowable tag linked to one tag. + :param misp_tag: A misp tag of a misp event or a misp event's attribute + :return: one flowable representing a tag (with style) + ''' + col1_style, col2_style = get_table_styles() + + return [Flowable_Tag(text=misp_tag.name, color=misp_tag.colour, custom_style=col1_style)] def get_table_styles(): + ''' + Create and returns the two mains styles for the columns of the document. + :return: two styles, one for each columns of the document, describing the MISP object. + ''' sample_style_sheet = getSampleStyleSheet() custom_body_style_col_1 = ParagraphStyle(name='Column_1', @@ -263,42 +562,56 @@ def get_table_styles(): def collect_parts(misp_event: pymisp.MISPEvent): + ''' + Main part of the PDF creation, it creates a ready-to-compile-as-pdf list of flowables from a MISP Event, calling subfunctions to handle the printing of each element + :param misp_event: a misp event + :return: a list of flowables to compile as pdf + ''' # List of elements/content we want to add flowables = [] # Get the list of available styles sample_style_sheet = getSampleStyleSheet() - # Create own style - custom_style = create_style() - # Create stuff - paragraph_1 = Paragraph(misp_event.info, sample_style_sheet['Heading1']) - paragraph_2 = Paragraph(str(misp_event.to_json()), custom_style) - paragraph_3 = Paragraph("Dingbat paragraph", - sample_style_sheet['BodyText']) # Apply custom style - paragraph_4 = Paragraph("A bold word.
An italic word.", - sample_style_sheet['BodyText']) # HTML markup is working too - table = create_flowable_table_from_event(misp_event) + title = Paragraph(misp_event.info, sample_style_sheet['Heading1']) + subtitle = Paragraph("General information", sample_style_sheet['Heading2']) + attributes = Paragraph("Attributes", sample_style_sheet['Heading2']) + + table_event_general = create_flowable_table_from_event(misp_event) + table_event_attribute = create_flowable_table_from_attributes(misp_event) + + # If you want to output the full json, just add next line + # paragraph_2 = Paragraph(str(misp_event.to_json()), sample_style_sheet['Code']) # Add all parts to final PDF - flowables.append(paragraph_1) - flowables.append(table) + flowables.append(title) + flowables.append(subtitle) + flowables.append(table_event_general) + flowables.append(PageBreak()) - flowables.append(PageBreak()) - flowables.append(paragraph_2) - flowables.append(paragraph_3) + + flowables.append(attributes) + flowables += table_event_attribute return flowables def add_page_number(canvas, doc): + ''' + Add footer to each page, drawing the page number + :param canvas: / Automatically filled during pdf compilation + :param doc: / Automatically filled during pdf compilation + :return: / Automatically filled during pdf compilation + ''' canvas.saveState() canvas.setFont('Times-Roman', 10) page_number_text = "%d" % (doc.page) + curr_spacing = 4 * mm # 0.75 * inch + canvas.drawCentredString( - 0.75 * inch, - 0.75 * inch, + curr_spacing, + curr_spacing, page_number_text ) @@ -306,6 +619,13 @@ def add_page_number(canvas, doc): def export_flowables_to_pdf(document, pdf_buffer, flowables): + ''' + Export function : creates a pdf from a list of flowables, adding page numbers, etc. + :param document: A document template + :param pdf_buffer: / not used + :param flowables: list of flowables to compile as pdf + :return: + ''' # my_doc.build(flowables) # Basic building of the final document document.build( @@ -314,16 +634,16 @@ def export_flowables_to_pdf(document, pdf_buffer, flowables): onLaterPages=add_page_number, # Pagination for all other page ) - ''' "EXTERNAL" exposed METHODS. Meant to be used outside of this class. ''' -PAGESIZE = (140 * mm, 216 * mm) # width, height -BASE_MARGIN = 5 * mm # Create a list here to specify each row separately - - def convert_event_in_pdf_buffer(misp_event: pymisp.MISPEvent): + ''' + Externally callable function that create a full pdf from a Misp Event + :param misp_event: a misp event + :return: a pdf buffer (BytesIO) that contains the pdf + ''' # Create a document buffer pdf_buffer = BytesIO() @@ -335,12 +655,6 @@ def convert_event_in_pdf_buffer(misp_event: pymisp.MISPEvent): rightMargin=BASE_MARGIN, bottomMargin=BASE_MARGIN) - # Apply standard template - # TODO - - # Set the layout - # TODO - # Collect already accessible event's parts to be shown flowables = collect_parts(misp_event) @@ -348,11 +662,14 @@ def convert_event_in_pdf_buffer(misp_event: pymisp.MISPEvent): export_flowables_to_pdf(curr_document, pdf_buffer, flowables) pdf_value = pdf_buffer.getvalue() + # Used for testing purposes + # pdf_buffer.seek(0) + # TODO : Not sure what to give back ? Buffer ? Buffer.value() ? Base64(buffer.value()) ? ... - # pdf_buffer.close() + pdf_buffer.close() # return pdf_value - return pdf_buffer + return pdf_value def get_values_from_buffer(pdf_buffer): @@ -362,20 +679,28 @@ def get_values_from_buffer(pdf_buffer): def get_base64_from_buffer(pdf_buffer): return base64.b64encode(pdf_buffer.value()) +def get_base64_from_value(pdf_value): + return base64.b64encode(pdf_value) def register_to_file(pdf_buffer, file_name): + # Used for testing purposes pdf_buffer.seek(0) with open(file_name, 'wb') as f: f.write(pdf_buffer.read()) +def register_value_to_file(pdf_value, file_name): + + with open(file_name, 'wb') as f: + f.write(pdf_value) + if __name__ == "__main__": # pdf_buffer = convert_event_in_pdf_buffer(None) # register_to_file(pdf_buffer, 'test.pdf') get_sample_fonts() - + get_sample_styles() # get_values_from_buffer(pdf_buffer) # get_base64_from_buffer(pdf_buffer) diff --git a/setup.py b/setup.py index a546fb2..5e6c7b9 100644 --- a/setup.py +++ b/setup.py @@ -41,7 +41,7 @@ setup( ], install_requires=['six', 'requests', 'python-dateutil', 'jsonschema', 'python-dateutil', 'enum34;python_version<"3.4"', - 'functools32;python_version<"3.0"'], + 'functools32;python_version<"3.0"', 'reportlab'], extras_require={'fileobjects': ['lief>=0.8', 'python-magic'], 'neo': ['py2neo'], 'openioc': ['beautifulsoup4'], diff --git a/tests/reportlab_testfiles/to_delete1.json b/tests/reportlab_testfiles/to_delete1.json new file mode 100644 index 0000000..0a9b56c --- /dev/null +++ b/tests/reportlab_testfiles/to_delete1.json @@ -0,0 +1,804 @@ +{ + "Event": { + "info": "OSINT - New Malware with Ties to SunOrcal Discovered", + "publish_timestamp": "1518455494", + "timestamp": "1510922435", + "analysis": "2", + "Attribute": [ + { + "comment": "", + "category": "External analysis", + "uuid": "5a0a9ade-3b60-4fbb-87d2-4628950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "https://researchcenter.paloaltonetworks.com/2017/11/unit42-new-malware-with-ties-to-sunorcal-discovered/", + "Tag": [ + { + "colour": "#00223b", + "exportable": true, + "name": "osint:source-type=\"blog-post\"" + } + ], + "object_relation": null, + "type": "link" + }, + { + "comment": "", + "category": "External analysis", + "uuid": "5a0a9af4-0d1c-4ae0-8903-45c4950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "Unit 42 has discovered a new malware family we\u2019ve named \u201cReaver\u201d with ties to attackers who use SunOrcal malware. SunOrcal activity has been documented to at least 2013, and based on metadata surrounding some of the C2s, may have been active as early as 2010. The new family appears to have been in the wild since late 2016 and to date we have only identified 10 unique samples, indicating it may be sparingly used. Reaver is also somewhat unique in the fact that its final payload is in the form of a Control panel item, or CPL file. To date, only 0.006% of all malware seen by Palo Alto Networks employs this technique, indicating that it is in fact fairly rare.", + "Tag": [ + { + "colour": "#00223b", + "exportable": true, + "name": "osint:source-type=\"blog-post\"" + } + ], + "object_relation": null, + "type": "comment" + }, + { + "comment": "", + "category": "Persistence mechanism", + "uuid": "5a0a9d47-1c7c-4353-8523-440b950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "%COMMONPROGRAMFILES%\\services\\", + "object_relation": null, + "type": "regkey" + }, + { + "comment": "", + "category": "Persistence mechanism", + "uuid": "5a0a9d47-808c-4833-b739-43bf950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "%APPDATA%\\microsoft\\mmc\\", + "object_relation": null, + "type": "regkey" + }, + { + "comment": "", + "category": "Persistence mechanism", + "uuid": "5a0a9d47-91e0-4fea-8a8d-48ce950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Common Startup", + "object_relation": null, + "type": "regkey" + }, + { + "comment": "", + "category": "Persistence mechanism", + "uuid": "5a0a9d47-0d2c-4f98-9913-4ea3950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\\Startup", + "object_relation": null, + "type": "regkey" + }, + { + "comment": "", + "category": "Payload delivery", + "uuid": "5a0a9d47-a0a4-4f6b-bd53-42b4950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "\u2018%TEMP%\\~WUpdate.lnk", + "object_relation": null, + "type": "filename" + }, + { + "comment": "", + "category": "Payload delivery", + "uuid": "5a0a9d96-48d4-4538-b643-4c26950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "%TEMP%\\~Update.lnk", + "object_relation": null, + "type": "filename" + }, + { + "comment": "", + "category": "Persistence mechanism", + "uuid": "5a0a9d96-d87c-4b6f-b3a6-4eea950d210f", + "timestamp": "1510922426", + "to_ids": false, + "value": "%APPDATA%\\microsoft\\credentials\\", + "object_relation": null, + "type": "regkey" + }, + { + "comment": "", + "category": "Payload delivery", + "uuid": "5a0a9d96-83dc-4a40-90fe-46d9950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "%TEMP%\\winhelp.dat", + "object_relation": null, + "type": "filename" + }, + { + "comment": "", + "category": "Payload delivery", + "uuid": "5a0a9d96-cc18-491c-b16b-4ffe950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "[path_previously_identified]\\winhelp.cpl", + "object_relation": null, + "type": "filename" + }, + { + "comment": "C2", + "category": "Network activity", + "uuid": "5a0a9e4c-1c14-49c0-bee2-4f7d950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "www.fyoutside.com", + "object_relation": null, + "type": "hostname" + }, + { + "comment": "C2", + "category": "Network activity", + "uuid": "5a0a9e4c-ab08-47f8-991f-471c950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "www.tashdqdxp.com", + "object_relation": null, + "type": "hostname" + }, + { + "comment": "C2", + "category": "Network activity", + "uuid": "5a0a9e4c-8ba4-43d7-a8e3-4b52950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "www.weryhstui.com", + "object_relation": null, + "type": "hostname" + }, + { + "comment": "", + "category": "Network activity", + "uuid": "5a0a9e4c-bcf8-42ac-86dc-48b0950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "98.126.156.210", + "object_relation": null, + "type": "ip-dst" + }, + { + "comment": "C2", + "category": "Network activity", + "uuid": "5a0a9e4c-9440-40fa-ac80-4320950d210f", + "timestamp": "1510922426", + "to_ids": true, + "value": "www.olinaodi.com", + "object_relation": null, + "type": "hostname" + }, + { + "comment": "Reaver.v1", + "category": "Payload delivery", + "uuid": "5a0a9eae-a23c-4b65-b46b-4683950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "d560f44188fb56d3abb11d9508e1167329470de19b811163eb1167534722e666", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v2", + "category": "Payload delivery", + "uuid": "5a0a9eae-5e1c-411a-b1ba-49ac950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "98eb5465c6330b9b49df2e7c9ad0b1164aa5b35423d9e80495a178eb510cdc1c", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v2", + "category": "Payload delivery", + "uuid": "5a0a9eae-ccf0-4390-bcde-43bd950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "05ddbd0506ec95fb460b3994e5b21cdb0418ba4aa406374ca1b91249349b7640", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-3ef4-42d5-baca-44c4950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "18ac3b14300ecfeed4b64a844c16dccb06b0e3513d0954d6c6182f2ea14e4c92", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-8cc8-4bbd-adec-4e38950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "c0f8bb77284b96e07cab1c3fab8800b1bbd030720c74628c4ee5666694ef903d", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-486c-4820-b2b3-4bf0950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "9213f70bce491991c4cbbbd7dc3e67d3a3d535b965d7064973b35c50f265e59b", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-bef4-4696-a1ab-4c83950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "26c234c73e2c3448589c7d4a0cf17f615ad3666541a4e611e2d8b77637205bcf", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-7560-4794-90d1-4f4d950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "ae9f158e4886cfdbfb4f1b3b25707d05f6fd873d0be9d8e7334a2c28741228ee", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-d3c4-4809-aea5-435c950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "1fcda755e8fa23d27329e4bc0443a82e1c1e9a6c1691639db256a187365e4db1", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-a5dc-43ab-9158-451c950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "c906250e0a4c457663e37119ebe1efa1e4b97eef1d975f383ac3243f9f09908c", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "Reaver.v3", + "category": "Payload delivery", + "uuid": "5a0a9eae-1d70-4f14-b316-4ce4950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "1813f10bcf74beb582c824c64fff63cb150d178bef93af81d875ca84214307a1", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "SunOrcal", + "category": "Payload delivery", + "uuid": "5a0a9eae-7674-4a3f-a595-4006950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "799139b5278dc2ac24279cc6c3db44f4ef0ea78ee7b721b0ace38fd8018c51ac", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "SunOrcal", + "category": "Payload delivery", + "uuid": "5a0a9eae-4a58-4535-9998-49b7950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "81d887fefdbb0219647991c2b7bddf45c2fede4dc6fc18408f1706e0279615b2", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "SunOrcal", + "category": "Payload delivery", + "uuid": "5a0a9eae-6ae4-41a1-8402-4328950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "58312fb742ce881e040e1b5b8555f00a402b8dd4fc886acaae2f862040b3bfc5", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "SunOrcal", + "category": "Payload delivery", + "uuid": "5a0a9eae-6edc-4177-afd5-4c93950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "38ea33dab0ba2edd16ecd98cba161c550d1036b253c8666c4110d198948329fb", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "SunOrcal", + "category": "Payload delivery", + "uuid": "5a0a9eae-8388-4e7f-ab5b-4e95950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "cb7c0cf1750baaa11783e93369230ee666b9f3da7298e4d1bb9a07af6a439f2f", + "object_relation": null, + "type": "sha256" + }, + { + "comment": "C2", + "category": "Network activity", + "uuid": "5a0a9efc-6604-4cd9-acbb-4632950d210f", + "timestamp": "1510922427", + "to_ids": true, + "value": "104.148.70.217", + "object_relation": null, + "type": "ip-dst" + }, + { + "comment": "SunOrcal - Xchecked via VT: cb7c0cf1750baaa11783e93369230ee666b9f3da7298e4d1bb9a07af6a439f2f", + "category": "Payload delivery", + "uuid": "5a0ed8bb-5df0-47a8-9785-44a702de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "da7a5e54d1d45462bda65807c1ef03ee34b7e777", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "SunOrcal - Xchecked via VT: cb7c0cf1750baaa11783e93369230ee666b9f3da7298e4d1bb9a07af6a439f2f", + "category": "Payload delivery", + "uuid": "5a0ed8bb-f580-4b51-a866-482602de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "7dcf79a66192e88b92ccc12810e61329", + "object_relation": null, + "type": "md5" + }, + { + "comment": "SunOrcal - Xchecked via VT: cb7c0cf1750baaa11783e93369230ee666b9f3da7298e4d1bb9a07af6a439f2f", + "category": "External analysis", + "uuid": "5a0ed8bb-8a94-47be-9f1e-463f02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/cb7c0cf1750baaa11783e93369230ee666b9f3da7298e4d1bb9a07af6a439f2f/analysis/1510574305/", + "object_relation": null, + "type": "link" + }, + { + "comment": "SunOrcal - Xchecked via VT: 38ea33dab0ba2edd16ecd98cba161c550d1036b253c8666c4110d198948329fb", + "category": "Payload delivery", + "uuid": "5a0ed8bb-3f4c-411b-9507-4d1602de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "704886d56ded5817e39d7442b0203c2f76207f92", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "SunOrcal - Xchecked via VT: 38ea33dab0ba2edd16ecd98cba161c550d1036b253c8666c4110d198948329fb", + "category": "Payload delivery", + "uuid": "5a0ed8bb-6f34-4e76-ba5b-45ae02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "af6a25fc28e0560860c01d74854a2cba", + "object_relation": null, + "type": "md5" + }, + { + "comment": "SunOrcal - Xchecked via VT: 38ea33dab0ba2edd16ecd98cba161c550d1036b253c8666c4110d198948329fb", + "category": "External analysis", + "uuid": "5a0ed8bb-5b24-48ce-82c4-4e2b02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/38ea33dab0ba2edd16ecd98cba161c550d1036b253c8666c4110d198948329fb/analysis/1510574322/", + "object_relation": null, + "type": "link" + }, + { + "comment": "SunOrcal - Xchecked via VT: 58312fb742ce881e040e1b5b8555f00a402b8dd4fc886acaae2f862040b3bfc5", + "category": "Payload delivery", + "uuid": "5a0ed8bb-830c-472b-9d19-481002de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "9adbe92835ee2cc93e0d99b9d4536eb7727acf47", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "SunOrcal - Xchecked via VT: 58312fb742ce881e040e1b5b8555f00a402b8dd4fc886acaae2f862040b3bfc5", + "category": "Payload delivery", + "uuid": "5a0ed8bb-b94c-4e75-a47d-488002de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "47cc3592bbf8c3b516ae74c95efb3344", + "object_relation": null, + "type": "md5" + }, + { + "comment": "SunOrcal - Xchecked via VT: 58312fb742ce881e040e1b5b8555f00a402b8dd4fc886acaae2f862040b3bfc5", + "category": "External analysis", + "uuid": "5a0ed8bb-8d8c-4b7a-a223-498e02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/58312fb742ce881e040e1b5b8555f00a402b8dd4fc886acaae2f862040b3bfc5/analysis/1510574347/", + "object_relation": null, + "type": "link" + }, + { + "comment": "SunOrcal - Xchecked via VT: 81d887fefdbb0219647991c2b7bddf45c2fede4dc6fc18408f1706e0279615b2", + "category": "Payload delivery", + "uuid": "5a0ed8bb-b9b0-40ac-a84f-4b6002de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "7fa8bfc051b98698e6b95cbc7163e4aa41880279", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "SunOrcal - Xchecked via VT: 81d887fefdbb0219647991c2b7bddf45c2fede4dc6fc18408f1706e0279615b2", + "category": "Payload delivery", + "uuid": "5a0ed8bb-65e8-471f-9a66-4e3102de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "5eb3a846092cae378fcd45bdf5453536", + "object_relation": null, + "type": "md5" + }, + { + "comment": "SunOrcal - Xchecked via VT: 81d887fefdbb0219647991c2b7bddf45c2fede4dc6fc18408f1706e0279615b2", + "category": "External analysis", + "uuid": "5a0ed8bb-d7c0-4ed1-9bdc-497002de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/81d887fefdbb0219647991c2b7bddf45c2fede4dc6fc18408f1706e0279615b2/analysis/1510574318/", + "object_relation": null, + "type": "link" + }, + { + "comment": "SunOrcal - Xchecked via VT: 799139b5278dc2ac24279cc6c3db44f4ef0ea78ee7b721b0ace38fd8018c51ac", + "category": "Payload delivery", + "uuid": "5a0ed8bb-a260-4d97-b3c8-43eb02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "a6e538a01c366580e90e49249251b66dfe39c72f", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "SunOrcal - Xchecked via VT: 799139b5278dc2ac24279cc6c3db44f4ef0ea78ee7b721b0ace38fd8018c51ac", + "category": "Payload delivery", + "uuid": "5a0ed8bb-61ec-48e1-8327-492b02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "11a5b1901243396984670af7acc6cf72", + "object_relation": null, + "type": "md5" + }, + { + "comment": "SunOrcal - Xchecked via VT: 799139b5278dc2ac24279cc6c3db44f4ef0ea78ee7b721b0ace38fd8018c51ac", + "category": "External analysis", + "uuid": "5a0ed8bb-4f20-46d8-b762-4cf702de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/799139b5278dc2ac24279cc6c3db44f4ef0ea78ee7b721b0ace38fd8018c51ac/analysis/1510574343/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1813f10bcf74beb582c824c64fff63cb150d178bef93af81d875ca84214307a1", + "category": "Payload delivery", + "uuid": "5a0ed8bb-b6ec-4b31-8078-4c9b02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "03bc4181fb54af3151cab60406a01a44158e5277", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1813f10bcf74beb582c824c64fff63cb150d178bef93af81d875ca84214307a1", + "category": "Payload delivery", + "uuid": "5a0ed8bb-67e0-45e3-86d3-4a9d02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "17587683361d8458aebd9b8fdd07137a", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1813f10bcf74beb582c824c64fff63cb150d178bef93af81d875ca84214307a1", + "category": "External analysis", + "uuid": "5a0ed8bb-cfec-48d4-9919-49ab02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/1813f10bcf74beb582c824c64fff63cb150d178bef93af81d875ca84214307a1/analysis/1510849386/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c906250e0a4c457663e37119ebe1efa1e4b97eef1d975f383ac3243f9f09908c", + "category": "Payload delivery", + "uuid": "5a0ed8bb-cb84-4739-a17e-456b02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "b31160953ff19e6abf12fc8319420ab2e1c88e77", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c906250e0a4c457663e37119ebe1efa1e4b97eef1d975f383ac3243f9f09908c", + "category": "Payload delivery", + "uuid": "5a0ed8bb-8bd8-4a20-a99e-498b02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "2d563bf83bddca1f24e8a0ffb951a7e9", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c906250e0a4c457663e37119ebe1efa1e4b97eef1d975f383ac3243f9f09908c", + "category": "External analysis", + "uuid": "5a0ed8bb-c264-45c1-acf8-4ece02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/c906250e0a4c457663e37119ebe1efa1e4b97eef1d975f383ac3243f9f09908c/analysis/1510574300/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1fcda755e8fa23d27329e4bc0443a82e1c1e9a6c1691639db256a187365e4db1", + "category": "Payload delivery", + "uuid": "5a0ed8bb-bc04-47cf-8f7b-49cb02de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "172b4578cb50985b08c227360d9c9df2cf32117a", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1fcda755e8fa23d27329e4bc0443a82e1c1e9a6c1691639db256a187365e4db1", + "category": "Payload delivery", + "uuid": "5a0ed8bb-9340-4443-b23e-4e1902de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "aab319d9715d38a37a10d82e87478dfc", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 1fcda755e8fa23d27329e4bc0443a82e1c1e9a6c1691639db256a187365e4db1", + "category": "External analysis", + "uuid": "5a0ed8bb-b9c8-43aa-8797-462302de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/1fcda755e8fa23d27329e4bc0443a82e1c1e9a6c1691639db256a187365e4db1/analysis/1510574331/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: ae9f158e4886cfdbfb4f1b3b25707d05f6fd873d0be9d8e7334a2c28741228ee", + "category": "Payload delivery", + "uuid": "5a0ed8bb-8a68-4f7a-adcb-46c302de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "d62f1f039d0be1d7b2a8ed122d97ee917dbc9ce8", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: ae9f158e4886cfdbfb4f1b3b25707d05f6fd873d0be9d8e7334a2c28741228ee", + "category": "Payload delivery", + "uuid": "5a0ed8bb-dcf8-4fe9-bdee-484502de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "892350b2a44efd9fa1e7c88aec013818", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: ae9f158e4886cfdbfb4f1b3b25707d05f6fd873d0be9d8e7334a2c28741228ee", + "category": "External analysis", + "uuid": "5a0ed8bb-23d8-4bbe-b367-4fae02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/ae9f158e4886cfdbfb4f1b3b25707d05f6fd873d0be9d8e7334a2c28741228ee/analysis/1510574327/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 9213f70bce491991c4cbbbd7dc3e67d3a3d535b965d7064973b35c50f265e59b", + "category": "Payload delivery", + "uuid": "5a0ed8bb-d850-43f6-aa30-4f5702de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "e96be5b542d100913a5bca0f02fb094d6f3ad85b", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 9213f70bce491991c4cbbbd7dc3e67d3a3d535b965d7064973b35c50f265e59b", + "category": "Payload delivery", + "uuid": "5a0ed8bb-3ae4-4f3e-b592-474002de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "dd7edadd019bc120978a4dad284fbea6", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 9213f70bce491991c4cbbbd7dc3e67d3a3d535b965d7064973b35c50f265e59b", + "category": "External analysis", + "uuid": "5a0ed8bb-c9a4-4669-a3ba-47e002de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/9213f70bce491991c4cbbbd7dc3e67d3a3d535b965d7064973b35c50f265e59b/analysis/1510574335/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c0f8bb77284b96e07cab1c3fab8800b1bbd030720c74628c4ee5666694ef903d", + "category": "Payload delivery", + "uuid": "5a0ed8bb-e764-4ad4-8cdb-438902de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "cbde40a234bff8870f8746eca969c364da7f4aec", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c0f8bb77284b96e07cab1c3fab8800b1bbd030720c74628c4ee5666694ef903d", + "category": "Payload delivery", + "uuid": "5a0ed8bb-02e0-4eb5-9e34-41e602de0b81", + "timestamp": "1510922427", + "to_ids": true, + "value": "ae185e9c43bb1498a3c653a0886896e3", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: c0f8bb77284b96e07cab1c3fab8800b1bbd030720c74628c4ee5666694ef903d", + "category": "External analysis", + "uuid": "5a0ed8bb-586c-4a4d-aa3b-4f7c02de0b81", + "timestamp": "1510922427", + "to_ids": false, + "value": "https://www.virustotal.com/file/c0f8bb77284b96e07cab1c3fab8800b1bbd030720c74628c4ee5666694ef903d/analysis/1510921773/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 18ac3b14300ecfeed4b64a844c16dccb06b0e3513d0954d6c6182f2ea14e4c92", + "category": "Payload delivery", + "uuid": "5a0ed8bc-ba8c-4160-8374-4dba02de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "5c6b231111239c0625dc9ff4359d1b8553159ecc", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 18ac3b14300ecfeed4b64a844c16dccb06b0e3513d0954d6c6182f2ea14e4c92", + "category": "Payload delivery", + "uuid": "5a0ed8bc-eff4-4d36-947a-424c02de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "c629f8f3206e5a6de83b4c996a2bacfb", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v3 - Xchecked via VT: 18ac3b14300ecfeed4b64a844c16dccb06b0e3513d0954d6c6182f2ea14e4c92", + "category": "External analysis", + "uuid": "5a0ed8bc-60d8-4f2e-aa79-4d6f02de0b81", + "timestamp": "1510922428", + "to_ids": false, + "value": "https://www.virustotal.com/file/18ac3b14300ecfeed4b64a844c16dccb06b0e3513d0954d6c6182f2ea14e4c92/analysis/1510610402/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v2 - Xchecked via VT: 98eb5465c6330b9b49df2e7c9ad0b1164aa5b35423d9e80495a178eb510cdc1c", + "category": "Payload delivery", + "uuid": "5a0ed8bc-0124-4bd3-9049-4e6b02de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "c05d15fc94d096a821f2c689a29dff7679ce087a", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v2 - Xchecked via VT: 98eb5465c6330b9b49df2e7c9ad0b1164aa5b35423d9e80495a178eb510cdc1c", + "category": "Payload delivery", + "uuid": "5a0ed8bc-c04c-49c4-9d39-464802de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "dadf3d3dd411bc02d7c05ee3a18259ea", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v2 - Xchecked via VT: 98eb5465c6330b9b49df2e7c9ad0b1164aa5b35423d9e80495a178eb510cdc1c", + "category": "External analysis", + "uuid": "5a0ed8bc-37cc-47c1-bdcd-454e02de0b81", + "timestamp": "1510922428", + "to_ids": false, + "value": "https://www.virustotal.com/file/98eb5465c6330b9b49df2e7c9ad0b1164aa5b35423d9e80495a178eb510cdc1c/analysis/1510823791/", + "object_relation": null, + "type": "link" + }, + { + "comment": "Reaver.v1 - Xchecked via VT: d560f44188fb56d3abb11d9508e1167329470de19b811163eb1167534722e666", + "category": "Payload delivery", + "uuid": "5a0ed8bc-4014-447e-8efc-450702de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "0cea48067ddbc9227363168013142f6f3a5dea9f", + "object_relation": null, + "type": "sha1" + }, + { + "comment": "Reaver.v1 - Xchecked via VT: d560f44188fb56d3abb11d9508e1167329470de19b811163eb1167534722e666", + "category": "Payload delivery", + "uuid": "5a0ed8bc-5768-4c26-85a2-47b902de0b81", + "timestamp": "1510922428", + "to_ids": true, + "value": "9f289cce6f95949450e3f4c96a187f5d", + "object_relation": null, + "type": "md5" + }, + { + "comment": "Reaver.v1 - Xchecked via VT: d560f44188fb56d3abb11d9508e1167329470de19b811163eb1167534722e666", + "category": "External analysis", + "uuid": "5a0ed8bc-a7a0-499f-bd08-48bb02de0b81", + "timestamp": "1510922428", + "to_ids": false, + "value": "https://www.virustotal.com/file/d560f44188fb56d3abb11d9508e1167329470de19b811163eb1167534722e666/analysis/1510823685/", + "object_relation": null, + "type": "link" + } + ], + "Tag": [ + { + "colour": "#004646", + "exportable": true, + "name": "type:OSINT" + }, + { + "colour": "#ffffff", + "exportable": true, + "name": "tlp:white" + }, + { + "colour": "#3c7700", + "exportable": true, + "name": "circl:incident-classification=\"malware\"" + }, + { + "colour": "#00223b", + "exportable": true, + "name": "osint:source-type=\"blog-post\"" + } + ], + "published": true, + "date": "2017-11-10", + "Orgc": { + "uuid": "55f6ea5e-2c60-40e5-964f-47a8950d210f", + "name": "CIRCL" + }, + "threat_level_id": "3", + "uuid": "5a0a9aa9-23a4-4607-b6df-41a9950d210f" + } +} \ No newline at end of file diff --git a/tests/reportlab_testfiles/to_delete2.json b/tests/reportlab_testfiles/to_delete2.json new file mode 100644 index 0000000..424b45b --- /dev/null +++ b/tests/reportlab_testfiles/to_delete2.json @@ -0,0 +1 @@ +{"Event": {"info": "OSINT - HIDDEN COBRA \u2013 North Korean Remote Administration Tool: FALLCHILL", "publish_timestamp": "0", "timestamp": "1511183733", "Object": [{"comment": "", "template_uuid": "688c46fb-5edb-40a3-8273-1af7923e2215", "uuid": "5a0d68b2-c4d0-4721-936b-77bb950d210f", "sharing_group_id": "0", "timestamp": "1510828210", "description": "File object describing a file with meta-information", "template_version": "4", "Attribute": [{"comment": "", "category": "Payload delivery", "uuid": "5a0d68b3-9de8-4b28-ab58-77bb950d210f", "timestamp": "1510828211", "to_ids": true, "value": "e48fe20eb1f5a5887f2ac631fed9ed63", "object_relation": "md5", "type": "md5"}, {"comment": "", "category": "Other", "uuid": "5a0d68b3-f5ec-470e-8e6f-77bb950d210f", "timestamp": "1510828211", "to_ids": false, "value": "5.49321665686", "object_relation": "entropy", "type": "float"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d68b3-6da0-4ced-8233-77bb950d210f", "timestamp": "1510828211", "to_ids": true, "value": "E48FE20EB1F5A5887F2AC631FED9ED63", "object_relation": "filename", "type": "filename"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d68b3-2600-4859-a347-77bb950d210f", "timestamp": "1510828211", "to_ids": true, "value": "f83f30bd284074d1daaf2e262a280ca780791f2c", "object_relation": "sha1", "type": "sha1"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d68b3-6138-4c7f-987c-77bb950d210f", "timestamp": "1510828211", "to_ids": true, "value": "1536:qJhDLw1yDhhzoN/e/C/O/C/a/D/I26251K06Zk/XrqqitM4NvL:qvfw1ahEVOS+Sq7IN251ikzq5tM4NvL", "object_relation": "ssdeep", "type": "ssdeep"}, {"comment": "", "category": "Other", "uuid": "5a0d68b3-c3f0-4fe1-9479-77bb950d210f", "timestamp": "1510828211", "to_ids": false, "value": "94208", "object_relation": "size-in-bytes", "type": "size-in-bytes"}], "distribution": "5", "meta-category": "file", "name": "file"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0d6aa6-a230-4f7b-8ab3-469a950d210f", "sharing_group_id": "0", "timestamp": "1510828710", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0d6aa6-4254-40d9-8d15-407e950d210f", "timestamp": "1510828710", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0d6aa6-ab7c-45af-a562-45d4950d210f", "timestamp": "1510828710", "to_ids": true, "value": "125.212.132.222", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0d6abb-4910-4c4c-9004-7753950d210f", "sharing_group_id": "0", "timestamp": "1510828731", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0d6abb-6300-44e7-82fb-7753950d210f", "timestamp": "1510828731", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0d6abb-d8d0-414c-89bb-7753950d210f", "timestamp": "1510828731", "to_ids": true, "value": "175.100.189.174", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0d6ada-a910-4186-90fc-21c1950d210f", "sharing_group_id": "0", "timestamp": "1510828762", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0d6ada-2b3c-48bd-8624-21c1950d210f", "timestamp": "1510828762", "to_ids": false, "value": "1992", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0d6ada-0ee0-406e-8722-21c1950d210f", "timestamp": "1510828762", "to_ids": true, "value": "10.10.30.110", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "688c46fb-5edb-40a3-8273-1af7923e2215", "uuid": "5a0d6d2a-464c-4b9c-8406-421c950d210f", "sharing_group_id": "0", "timestamp": "1510829354", "description": "File object describing a file with meta-information", "template_version": "4", "Attribute": [{"comment": "", "category": "Payload delivery", "uuid": "5a0d6d2a-d43c-4c55-95df-4316950d210f", "timestamp": "1510829354", "to_ids": true, "value": "1216da2b3d6e64075e8434be1058de06", "object_relation": "md5", "type": "md5"}, {"comment": "", "category": "Other", "uuid": "5a0d6d2b-bccc-4cbd-ae3a-4a45950d210f", "timestamp": "1510829355", "to_ids": false, "value": "6.27082111511", "object_relation": "entropy", "type": "float"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d6d2b-8dd8-43ff-aab0-4984950d210f", "timestamp": "1510829355", "to_ids": true, "value": "1216DA2B3D6E64075E8434BE1058DE06", "object_relation": "filename", "type": "filename"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d6d2b-4e64-4e4d-bd51-4cb9950d210f", "timestamp": "1510829355", "to_ids": true, "value": "5ee752a1b2bcdb84243e615cd67397d965b16490", "object_relation": "sha1", "type": "sha1"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0d6d2b-a2d8-40e5-a43e-458e950d210f", "timestamp": "1510829355", "to_ids": true, "value": "3072:GxXIbbVcpID+5/MiPDH8QnO3oMc+i+TN85mQLP\r\ngpnejnceJEOED:Gx4bbVZD+5\r\n/MiPDchdi+TN85muP0SlO", "object_relation": "ssdeep", "type": "ssdeep"}], "distribution": "5", "meta-category": "file", "name": "file"}], "analysis": "2", "Attribute": [{"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-2ef4-4bae-baa4-4a91950d210f", "timestamp": "1510922092", "to_ids": true, "value": "98.101.211.162", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-ba20-4bc4-8262-4bba950d210f", "timestamp": "1510922092", "to_ids": true, "value": "81.0.213.173", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-9b70-447e-a488-478d950d210f", "timestamp": "1510825132", "to_ids": true, "value": "175.100.189.174", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cab-007c-4517-99e0-433d950d210f", "timestamp": "1510825131", "to_ids": true, "value": "125.212.132.222", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "External analysis", "uuid": "5a0d5c2a-f1e4-4b25-b521-223f950d210f", "timestamp": "1510922092", "to_ids": false, "value": "This joint Technical Alert (TA) is the result of analytic efforts between the Department of Homeland Security (DHS) and the Federal Bureau of Investigation (FBI). Working with U.S. government partners, DHS and FBI identified Internet Protocol (IP) addresses and other indicators of compromise (IOCs) associated with a remote administration tool (RAT) used by the North Korean government\u2014commonly known as FALLCHILL. The U.S. Government refers to malicious cyber activity by the North Korean government as HIDDEN COBRA. For more information on HIDDEN COBRA activity, visit https://www.us-cert.gov/hiddencobra.\r\n\r\nFBI has high confidence that HIDDEN COBRA actors are using the IP addresses\u2014listed in this report\u2019s IOC files\u2014to maintain a presence on victims\u2019 networks and to further network exploitation. DHS and FBI are distributing these IP addresses to enable network defense and reduce exposure to any North Korean government malicious cyber activity.\r\n\r\nThis alert includes IOCs related to HIDDEN COBRA, IP addresses linked to systems infected with FALLCHILL malware, malware descriptions, and associated signatures. This alert also includes suggested response actions to the IOCs provided, recommended mitigation techniques, and information on reporting incidents. If users or administrators detect activity associated with the FALLCHILL malware, they should immediately flag it, report it to the DHS National Cybersecurity and Communications Integration Center (NCCIC) or the FBI Cyber Watch (CyWatch), and give it the highest priority for enhanced mitigation.", "object_relation": null, "type": "comment"}, {"comment": "", "category": "External analysis", "uuid": "5a0d5c0d-b18c-4f6f-aa4f-21c1950d210f", "timestamp": "1510922092", "to_ids": false, "value": "https://www.us-cert.gov/ncas/alerts/TA17-318A", "object_relation": null, "type": "link"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-e5a0-4eb8-aeae-450e950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.118", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-d258-4609-8361-4d7a950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.141", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-86f4-4569-9bd2-44e6950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.196", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-43bc-4e34-bb67-4071950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.5", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-03a4-4235-9147-4ba4950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.50", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-052c-44da-bf20-406a950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.54", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-94a4-4948-b022-4729950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.56", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-98e8-483a-87c0-4806950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.58", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-b8e8-442b-b8db-4c15950d210f", "timestamp": "1510922092", "to_ids": true, "value": "181.119.19.74", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-4968-4900-b36b-4f77950d210f", "timestamp": "1510922092", "to_ids": true, "value": "190.105.225.232", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-ab6c-41d9-8db5-4538950d210f", "timestamp": "1510922092", "to_ids": true, "value": "41.92.208.194", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-7510-42a3-974f-4101950d210f", "timestamp": "1510922092", "to_ids": true, "value": "41.92.208.196", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-e318-4ceb-9e1d-464b950d210f", "timestamp": "1510922092", "to_ids": true, "value": "41.92.208.197", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-f0ac-4308-8aa8-4546950d210f", "timestamp": "1510922092", "to_ids": true, "value": "209.183.21.222", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-7364-4cec-a34d-49d3950d210f", "timestamp": "1510922093", "to_ids": true, "value": "190.82.74.66", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-3548-4317-ba86-47aa950d210f", "timestamp": "1510922093", "to_ids": true, "value": "190.82.86.164", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-19a8-4022-a693-4626950d210f", "timestamp": "1510922093", "to_ids": true, "value": "111.207.78.204", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-f848-4a73-9157-46db950d210f", "timestamp": "1510922093", "to_ids": true, "value": "119.10.74.66", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-18ec-4bc8-a595-460c950d210f", "timestamp": "1510922093", "to_ids": true, "value": "122.114.89.131", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-df54-41a3-9862-48cb950d210f", "timestamp": "1510922093", "to_ids": true, "value": "122.114.94.26", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-406c-4dac-a6fc-411c950d210f", "timestamp": "1510922093", "to_ids": true, "value": "139.217.27.203", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-efec-4716-a5d3-42a7950d210f", "timestamp": "1510922093", "to_ids": true, "value": "221.208.194.72", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-6a8c-4e1a-bad4-467e950d210f", "timestamp": "1510922093", "to_ids": true, "value": "221.235.53.229", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-8bf8-4464-bda7-41b9950d210f", "timestamp": "1510922093", "to_ids": true, "value": "77.78.100.101", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-dd70-41ea-9e72-4316950d210f", "timestamp": "1510922093", "to_ids": true, "value": "62.243.45.227", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-6fe4-48ff-a4da-48d4950d210f", "timestamp": "1510922093", "to_ids": true, "value": "117.232.100.154", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-f0c4-443e-a482-42d6950d210f", "timestamp": "1510922093", "to_ids": true, "value": "59.90.93.138", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-4774-448e-a959-4be3950d210f", "timestamp": "1510922093", "to_ids": true, "value": "125.160.213.239", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-060c-4f32-9ef5-44e7950d210f", "timestamp": "1510922093", "to_ids": true, "value": "27.123.221.66", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-db4c-49cd-8e8e-4d6d950d210f", "timestamp": "1510922093", "to_ids": true, "value": "36.71.90.4", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-52b8-4327-9ba8-48af950d210f", "timestamp": "1510922093", "to_ids": true, "value": "191.233.33.177", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-b904-4e2e-9886-4d18950d210f", "timestamp": "1510922093", "to_ids": true, "value": "200.57.90.108", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-c498-48c9-862e-4e3e950d210f", "timestamp": "1510922093", "to_ids": true, "value": "5.79.99.169", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-71ac-493a-be1e-45a9950d210f", "timestamp": "1510922093", "to_ids": true, "value": "203.160.191.116", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-690c-4409-9a7f-4f46950d210f", "timestamp": "1510922093", "to_ids": true, "value": "196.25.89.30", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-0f08-46a5-9976-4e9d950d210f", "timestamp": "1510922093", "to_ids": true, "value": "82.223.213.115", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-c828-475e-aa90-445b950d210f", "timestamp": "1510922093", "to_ids": true, "value": "82.223.73.81", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-52cc-4c04-b3e0-4bdf950d210f", "timestamp": "1510922093", "to_ids": true, "value": "91.116.139.195", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-5454-4bfa-ac35-4729950d210f", "timestamp": "1510922093", "to_ids": true, "value": "195.74.38.115", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-88e4-4815-bae9-490d950d210f", "timestamp": "1510922093", "to_ids": true, "value": "210.202.40.35", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-64e4-4694-be69-49e4950d210f", "timestamp": "1510922093", "to_ids": true, "value": "104.192.193.149", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-00d4-450d-90a0-4a22950d210f", "timestamp": "1510922093", "to_ids": true, "value": "173.0.129.65", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-44c4-4f44-822c-4a3f950d210f", "timestamp": "1510922093", "to_ids": true, "value": "173.0.129.83", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-2fa4-485a-a67a-42bc950d210f", "timestamp": "1510922093", "to_ids": true, "value": "191.234.40.112", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-811c-4636-8a32-422c950d210f", "timestamp": "1510922093", "to_ids": true, "value": "199.167.100.46", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-8d0c-48d7-a471-4723950d210f", "timestamp": "1510922093", "to_ids": true, "value": "208.180.64.10", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cac-92fc-4454-bc1f-499e950d210f", "timestamp": "1510922093", "to_ids": true, "value": "208.78.33.70", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-8fe8-49f2-826a-4b9d950d210f", "timestamp": "1510922093", "to_ids": true, "value": "208.78.33.82", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-fe48-4022-907e-455a950d210f", "timestamp": "1510922093", "to_ids": true, "value": "216.163.20.178", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-284c-44d1-8bc0-4c23950d210f", "timestamp": "1510922093", "to_ids": true, "value": "50.62.168.157", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-a3bc-47dd-b8bb-43bf950d210f", "timestamp": "1510922093", "to_ids": true, "value": "64.29.144.201", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-b52c-4840-9e6c-411a950d210f", "timestamp": "1510922093", "to_ids": true, "value": "66.175.41.191", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-f1cc-4186-8ddf-4701950d210f", "timestamp": "1510922093", "to_ids": true, "value": "66.232.121.65", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-8ee8-418c-bf8f-41eb950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.11", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-c090-4253-8707-4c41950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.12", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-d178-46f3-bef8-4ee7950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.13", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-ab04-40df-a071-4f0b950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.134", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-81f8-44bc-bd21-4882950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.140", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-4144-45a1-8e13-40c1950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.158", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-0160-47d4-bbe3-4700950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.162", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-9de0-4760-82fc-4864950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.163", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-f54c-42af-ac30-4f89950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.164", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-b57c-4a18-8f1c-4770950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.170", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-b018-4f1d-93af-482a950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.173", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-88b8-4899-83c5-412a950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.179", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-63d4-4033-9899-4982950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.181", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-eaac-431f-a176-430b950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.185", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-897c-4f7a-ba71-429e950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.186", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-1848-4566-84b6-43d8950d210f", "timestamp": "1510922094", "to_ids": true, "value": "66.242.128.223", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-12d0-47f9-9c4c-4191950d210f", "timestamp": "1510922094", "to_ids": true, "value": "71.125.1.130", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-71bc-4cc8-83ca-4866950d210f", "timestamp": "1510922094", "to_ids": true, "value": "71.125.1.132", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-8434-4f4b-8eaa-4809950d210f", "timestamp": "1510922094", "to_ids": true, "value": "71.125.1.133", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-da38-4053-a188-45a3950d210f", "timestamp": "1510922094", "to_ids": true, "value": "71.125.1.138", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-4a28-476e-9df6-4fc5950d210f", "timestamp": "1510922094", "to_ids": true, "value": "72.167.53.183", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-bd9c-4057-b472-4bb0950d210f", "timestamp": "1510922094", "to_ids": true, "value": "75.103.110.134", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-27f0-468c-9143-43f8950d210f", "timestamp": "1510922094", "to_ids": true, "value": "96.65.90.58", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-18a4-447f-ac34-4265950d210f", "timestamp": "1510922094", "to_ids": true, "value": "98.101.211.140", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-cf6c-4ed0-a3b9-480f950d210f", "timestamp": "1510922094", "to_ids": true, "value": "98.101.211.170", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-de7c-441f-be8d-422d950d210f", "timestamp": "1510922094", "to_ids": true, "value": "98.101.211.251", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-1e3c-4d69-b544-4548950d210f", "timestamp": "1510922094", "to_ids": true, "value": "98.113.84.130", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-3470-4089-8adc-40f3950d210f", "timestamp": "1510922094", "to_ids": true, "value": "98.159.16.132", "object_relation": null, "type": "ip-dst"}, {"comment": "C2", "category": "Network activity", "uuid": "5a0d5cad-ec70-4532-9ff5-4167950d210f", "timestamp": "1510922094", "to_ids": true, "value": "197.211.212.14", "object_relation": null, "type": "ip-dst"}, {"comment": "INSTALLATION", "category": "Payload delivery", "uuid": "5a0d5cad-9028-4a7e-b958-4683950d210f", "timestamp": "1510825133", "to_ids": true, "value": "1216da2b3d6e64075e8434be1058de06", "object_relation": null, "type": "md5"}, {"comment": "INSTALLATION", "category": "Payload delivery", "uuid": "5a0d5cad-ea9c-4249-9228-40c9950d210f", "timestamp": "1510825133", "to_ids": true, "value": "e48fe20eb1f5a5887f2ac631fed9ed63", "object_relation": null, "type": "md5"}, {"comment": "", "category": "Network activity", "uuid": "5a0d65c3-59c0-430d-a6f9-4e6a950d210f", "timestamp": "1510827459", "to_ids": true, "value": "10.10.30.110", "object_relation": null, "type": "ip-dst"}, {"comment": "(header)", "category": "Payload delivery", "uuid": "5a0d6a08-d304-4922-924f-7860950d210f", "timestamp": "1510922094", "to_ids": true, "value": "9c58c3fe5f463b33e9d2bc488bf4ae82", "object_relation": null, "type": "md5"}, {"comment": ".text", "category": "Payload delivery", "uuid": "5a0d6a08-c718-42ec-a84a-7860950d210f", "timestamp": "1510922094", "to_ids": true, "value": "5e856b2016485f5d844d07ebc461690c", "object_relation": null, "type": "md5"}, {"comment": ".rdata", "category": "Payload delivery", "uuid": "5a0d6a08-ba98-4007-8907-7860950d210f", "timestamp": "1510922094", "to_ids": true, "value": "063ef94aa302b3de760bbf4ce2f3ef9d", "object_relation": null, "type": "md5"}, {"comment": ".data", "category": "Payload delivery", "uuid": "5a0d6a08-99b4-4f94-9278-7860950d210f", "timestamp": "1510922094", "to_ids": true, "value": "59ad2089dfe1a9456b4b456e62933a32", "object_relation": null, "type": "md5"}, {"comment": ".rsrc", "category": "Payload delivery", "uuid": "5a0d6a08-defc-41fe-b70a-7860950d210f", "timestamp": "1510922094", "to_ids": true, "value": "3e47af504a67377daffd633c5ee43c50", "object_relation": null, "type": "md5"}, {"comment": "On port 443", "category": "Payload delivery", "uuid": "5a0d6a76-7878-4cec-ad85-76fa950d210f", "timestamp": "1510922094", "to_ids": true, "value": "125.212.132.222|443", "object_relation": null, "type": "ip-dst|port"}, {"comment": "On port 443", "category": "Payload delivery", "uuid": "5a0d6a76-e90c-4ece-aa45-76fa950d210f", "timestamp": "1510922094", "to_ids": true, "value": "175.100.189.174|443", "object_relation": null, "type": "ip-dst|port"}, {"comment": "On port 1992", "category": "Payload delivery", "uuid": "5a0d6a76-e5f0-4f3d-b7c0-76fa950d210f", "timestamp": "1510922094", "to_ids": true, "value": "10.10.30.110|1992", "object_relation": null, "type": "ip-dst|port"}, {"comment": "", "category": "External analysis", "uuid": "5a0d6b47-01d4-4bef-b59c-4fcb950d210f", "timestamp": "1510922094", "to_ids": false, "value": "MAR-10135536-A_WHITE_S508C.pdf", "data": "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bG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIj4KICAgICAgICAgPHBkZjpQcm9kdWNlcj5BY3JvYmF0IERpc3RpbGxlciAxMS4wIChXaW5kb3dzKTwvcGRmOlByb2R1Y2VyPgogICAgICAgICA8cGRmOktleXdvcmRzPk1hbHdhcmUgQW5hbHlzaXMgUmVwb3J0LCBNQVIsIDEwMTM1NTM2LUE8L3BkZjpLZXl3b3Jkcz4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5QU2NyaXB0NS5kbGwgVmVyc2lvbiA1LjIuMjwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNy0xMS0xNFQxMjozNToxNi0wNTowMDwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRlRGF0ZT4yMDE3LTExLTAxVDE1OjI3OjQxLTA0OjAwPC94bXA6Q3JlYXRlRGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxNy0xMS0xNFQxMjozNToxNi0wNTowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KICAgICAgICAgPGRjOnRpdGxlPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5NYWx3YXJlIEFuYWx5c2lzIFJlcG9ydCAoTUFSKSAtIDEwMTM1NTM2LUE8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOnRpdGxlPgogICAgICAgICA8ZGM6Y3JlYXRvcj4KICAgICAgICAgICAgPHJkZjpTZXE+CiAgICAgICAgICAgICAgIDxyZGY6bGk+TkNDSUMvVVMtQ0VSVDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwvZGM6Y3JlYXRvcj4KICAgICAgICAgPGRjOmRlc2NyaXB0aW9uPgogICAgICAgICAgICA8cmRmOkFsdD4KICAgICAgICAgICAgICAgPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5NYWx3YXJlIEFuYWx5c2lzIFJlcG9ydCAoTUFSKSAtIDEwMTM1NTM2LUE8L3JkZjpsaT4KICAgICAgICAgICAgPC9yZGY6QWx0PgogICAgICAgICA8L2RjOmRlc2NyaXB0aW9uPgogICAgICAgICA8ZGM6c3ViamVjdD4KICAgICAgICAgICAgPHJkZjpCYWc+CiAgICAgICAgICAgICAgIDxyZGY6bGk+TWFsd2FyZSBBbmFseXNpcyBSZXBvcnQ8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT5NQVI8L3JkZjpsaT4KICAgICAgICAgICAgICAgPHJkZjpsaT4xMDEzNTUzNi1BPC9yZGY6bGk+CiAgICAgICAgICAgIDwvcmRmOkJhZz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD51dWlkOjI2MmJhY2RhLWFhOTMtNGI1Ni05MTQ1LWFiNmIwMWI3N2I4YzwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+dXVpZDo0ZTk0NTYyYi1mMWY0LTRkZGEtOGM5OC1iNDllNDg2NzgxNTI8L3htcE1NOkluc3RhbmNlSUQ+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz4NCmVuZHN0cmVhbQ1lbmRvYmoNNDAgMCBvYmoNPDwvRmlsdGVyL0ZsYXRlRGVjb2RlL0ZpcnN0IDcvTGVuZ3RoIDczL04gMS9UeXBlL09ialN0bT4+c3RyZWFtDQpo3jI0tTRSMFCwsdF3zi/NK1Gw0PfOTCmONjS1NAcKBykYgkljMGkKJi0g4hAJQxMIBVYcqx9SWZCqH5CYnlpsZwcQYAChsxTuDQplbmRzdHJlYW0NZW5kb2JqDTQxIDAgb2JqDTw8L0ZpbHRlci9GbGF0ZURlY29kZS9GaXJzdCA3L0xlbmd0aCAyMjkvTiAxL1R5cGUvT2JqU3RtPj5zdHJlYW0NCmjelI6xasMwFEV/5W2xILb0bCuhJQSM3aEUl2Cn7eJFsQVVEVZ4kjH5+wraJUOH7vfcc1A+FCDgcODVEj4dJa91/Vzztz6tn7oz4zVpFYybGxV00jzmAveIAlHm+xJTUW6E2PyuInzqRzLXILPJWnjX5CMJMsuznPEXfVsdTT5plV0VaahmZW/eeOj01VHYQlt1W4jnhZTFLq0Yb91058US80LiLhXyx3siNy2jpqQayV1UgMb4YKzVBIiZgCH5MPPkVj8wxvvl8qXH8Jc/jmPAwCC9azibYPX/mOPxW4ABAIYTZZYNCmVuZHN0cmVhbQ1lbmRvYmoNNDIgMCBvYmoNPDwvRGVjb2RlUGFybXM8PC9Db2x1bW5zIDUvUHJlZGljdG9yIDEyPj4vRmlsdGVyL0ZsYXRlRGVjb2RlL0lEWzxFMEQ4RkQ5QjEzNjc0RjVDMUQyRkQ2MEFFQkY4NDdDQT48RTA3MEU4MTFFRUM1MzI0MTkwOEM0NzI2NjAzODAzN0Q+XS9JbmZvIDE1OTMgMCBSL0xlbmd0aCAyMzgvUm9vdCAxNTk1IDAgUi9TaXplIDE1OTQvVHlwZS9YUmVmL1dbMSAzIDFdPj5zdHJlYW0NCmje7NK9agJBGIXhmVkVIoI/aJmIvWKT1souXbAIWFnZq2DwAmxE7CwtbOy9DiFegJW9uYEU/nwnxRZi78K7xcPHmWVnZjnB2RO8G+xccM6/mfmPeC7MzVA3S13TDbVa1WpfyURJzSz+aP6WTX3tV++M4qR81DwzUyczOtz0uU+bM2Mzvda816zdM2fNHTP7peRdtmRDbuVUvsie9qrIhc78f56Nkvbt7pflq5LogV46n1T98S45J/tG+KRNW/EfkF4hvUJ6hUivkF4hvUKkV0ivkF4h0iukV0ivEOkVJrVX/i+ew0WJuwowALH8NaANCmVuZHN0cmVhbQ1lbmRvYmoNc3RhcnR4cmVmDQoxMTYNCiUlRU9GDQo=", "Tag": [{"colour": "#ffffff", "exportable": true, "name": "tlp:white"}], "object_relation": null, "type": "attachment"}, {"comment": "(header)", "category": "Payload delivery", "uuid": "5a0d6e08-0298-459d-859f-7779950d210f", "timestamp": "1510922094", "to_ids": true, "value": "08697ebe4017d27c904c7117bb109ca8", "object_relation": null, "type": "md5"}, {"comment": ".test", "category": "Payload delivery", "uuid": "5a0d6e08-3238-4c4b-a0d1-7779950d210f", "timestamp": "1510922094", "to_ids": true, "value": "cacb1aba3ba5bddfc2f023bb4ff3c54d", "object_relation": null, "type": "md5"}, {"comment": ".rdata", "category": "Payload delivery", "uuid": "5a0d6e08-a908-4ee6-b576-7779950d210f", "timestamp": "1510922095", "to_ids": true, "value": "0a36c62d9bd091d84219f7d34cf59284", "object_relation": null, "type": "md5"}, {"comment": ".data", "category": "Payload delivery", "uuid": "5a0d6e08-b020-4b90-bccf-7779950d210f", "timestamp": "1510922095", "to_ids": true, "value": "5c31589e75fc435a827c73e1b5bb4bca", "object_relation": null, "type": "md5"}, {"comment": ".pdata", "category": "Payload delivery", "uuid": "5a0d6e08-45f0-4e70-9ce1-7779950d210f", "timestamp": "1510922095", "to_ids": true, "value": "afc6eebc27a713b8010efe7f16ee8fab", "object_relation": null, "type": "md5"}, {"comment": ".rsrc", "category": "Payload delivery", "uuid": "5a0d6e09-7780-4d52-967d-7779950d210f", "timestamp": "1510922095", "to_ids": true, "value": "9a33838895830247744985365b8b2948", "object_relation": null, "type": "md5"}, {"comment": ".reloc", "category": "Payload delivery", "uuid": "5a0d6e09-1a98-49dc-a594-7779950d210f", "timestamp": "1510922095", "to_ids": true, "value": "d5815368ff7a4f0c4b82c70660aa7028", "object_relation": null, "type": "md5"}, {"comment": "INSTALLATION - Xchecked via VT: e48fe20eb1f5a5887f2ac631fed9ed63", "category": "Payload delivery", "uuid": "5a0ed76f-4cec-4790-ac37-48a502de0b81", "timestamp": "1510922095", "to_ids": true, "value": "a606716355035d4a1ea0b15f3bee30aad41a2c32df28c2d468eafd18361d60d6", "object_relation": null, "type": "sha256"}, {"comment": "INSTALLATION - Xchecked via VT: e48fe20eb1f5a5887f2ac631fed9ed63", "category": "External analysis", "uuid": "5a0ed76f-74c8-4636-b565-4ca302de0b81", "timestamp": "1510922095", "to_ids": false, "value": "https://www.virustotal.com/file/a606716355035d4a1ea0b15f3bee30aad41a2c32df28c2d468eafd18361d60d6/analysis/1510823064/", "object_relation": null, "type": "link"}, {"comment": "INSTALLATION - Xchecked via VT: 1216da2b3d6e64075e8434be1058de06", "category": "Payload delivery", "uuid": "5a0ed76f-d3ac-4e29-b8f3-43bf02de0b81", "timestamp": "1510922095", "to_ids": true, "value": "0a118eb23399000d148186b9079fa59caf4c3faa7e7a8f91533e467ac9b6ff41", "object_relation": null, "type": "sha256"}, {"comment": "INSTALLATION - Xchecked via VT: 1216da2b3d6e64075e8434be1058de06", "category": "External analysis", "uuid": "5a0ed76f-45e4-4d7d-8556-4dca02de0b81", "timestamp": "1510922095", "to_ids": false, "value": "https://www.virustotal.com/file/0a118eb23399000d148186b9079fa59caf4c3faa7e7a8f91533e467ac9b6ff41/analysis/1510822839/", "object_relation": null, "type": "link"}], "Tag": [{"colour": "#004646", "exportable": true, "name": "type:OSINT"}, {"colour": "#ffffff", "exportable": true, "name": "tlp:white"}, {"colour": "#002b4a", "exportable": true, "name": "osint:source-type=\"technical-report\""}, {"colour": "#13eb00", "exportable": true, "name": "misp-galaxy:threat-actor=\"Lazarus Group\""}, {"colour": "#0088cc", "exportable": true, "name": "misp-galaxy:rat=\"FALLCHILL\""}], "published": false, "date": "2017-11-14", "Orgc": {"uuid": "55f6ea5e-2c60-40e5-964f-47a8950d210f", "name": "CIRCL"}, "threat_level_id": "3", "uuid": "5a0d5bf4-99c8-4f15-9879-22b1950d210f"}} \ No newline at end of file diff --git a/tests/reportlab_testfiles/to_delete3.json b/tests/reportlab_testfiles/to_delete3.json new file mode 100644 index 0000000..5339cf2 --- /dev/null +++ b/tests/reportlab_testfiles/to_delete3.json @@ -0,0 +1 @@ +{"Event": {"info": "OSINT - Mitigating and eliminating info-stealing Qakbot and Emotet in corporate networks", "publish_timestamp": "0", "timestamp": "1511184352", "Object": [{"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0acc3f-e330-4e19-b44c-4182950d210f", "sharing_group_id": "0", "timestamp": "1510657087", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0acc3f-cc94-4758-b472-4f0d950d210f", "timestamp": "1510657087", "to_ids": false, "value": "995", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0acc3f-9d2c-4cb7-86b7-4f26950d210f", "timestamp": "1510657087", "to_ids": true, "value": "64.183.173.170", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0acc5a-879c-469b-b4d6-4e68950d210f", "sharing_group_id": "0", "timestamp": "1510657114", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0acc5a-d424-4572-965f-4399950d210f", "timestamp": "1510657114", "to_ids": false, "value": "993", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0acc5a-b168-42f0-b18f-4d2f950d210f", "timestamp": "1510657114", "to_ids": true, "value": "67.213.243.228", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0accd4-f164-4638-8503-080d950d210f", "sharing_group_id": "0", "timestamp": "1510657236", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0accd4-b2d0-4396-ad98-080d950d210f", "timestamp": "1510657236", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0accd4-b2b8-48f3-830c-080d950d210f", "timestamp": "1510657236", "to_ids": true, "value": "96.67.244.225", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0acced-4fe4-4b29-9407-4db2950d210f", "sharing_group_id": "0", "timestamp": "1510657261", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0acced-c8f8-43ff-b64d-4ac0950d210f", "timestamp": "1510657261", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0acced-5fe4-4217-b75a-42d9950d210f", "timestamp": "1510657261", "to_ids": true, "value": "173.25.234.18", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0acd03-9880-4d9b-8816-0c9f950d210f", "sharing_group_id": "0", "timestamp": "1510657283", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0acd03-52f0-43b8-b511-0c9f950d210f", "timestamp": "1510657283", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0acd03-e63c-4b5f-b67d-0c9f950d210f", "timestamp": "1510657283", "to_ids": true, "value": "24.123.151.58", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0acdd2-42b0-4178-9599-0ab7950d210f", "sharing_group_id": "0", "timestamp": "1510657490", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0acdd2-df68-4c66-9b29-0ab7950d210f", "timestamp": "1510657490", "to_ids": false, "value": "995", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0acdd3-27dc-4e07-9834-0ab7950d210f", "timestamp": "1510657491", "to_ids": true, "value": "76.164.161.46", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0ace3f-f0f8-481b-b90f-0cdb950d210f", "sharing_group_id": "0", "timestamp": "1510657599", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0ace3f-a9c8-476c-a448-0cdb950d210f", "timestamp": "1510657599", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0ace3f-dd14-49d6-9c9e-0cdb950d210f", "timestamp": "1510657599", "to_ids": true, "value": "68.115.254.146", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aebe2-710c-459f-94f6-0d11950d210f", "sharing_group_id": "0", "timestamp": "1510665186", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aebe2-ce60-4c18-9163-0d11950d210f", "timestamp": "1510665186", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aebe2-14d0-4c77-b265-0d11950d210f", "timestamp": "1510665186", "to_ids": true, "value": "198.57.88.73", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aece9-8a7c-4e23-a82e-0d11950d210f", "sharing_group_id": "0", "timestamp": "1510665449", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aecea-6a34-4d8a-a45c-0d11950d210f", "timestamp": "1510665450", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aecea-4364-41ff-9330-0d11950d210f", "timestamp": "1510665450", "to_ids": true, "value": "47.21.79.34", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aed28-c8b0-415b-b8f8-0d11950d210f", "sharing_group_id": "0", "timestamp": "1510665512", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aed28-f570-4458-ada1-0d11950d210f", "timestamp": "1510665512", "to_ids": false, "value": "465", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aed28-232c-4fc5-a562-0d11950d210f", "timestamp": "1510665512", "to_ids": true, "value": "174.51.185.121", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aed3e-9dc4-4f60-b423-4595950d210f", "sharing_group_id": "0", "timestamp": "1510665534", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aed3e-96e4-4749-b7e4-42b1950d210f", "timestamp": "1510665534", "to_ids": false, "value": "993", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aed3e-ac88-4281-a110-4536950d210f", "timestamp": "1510665534", "to_ids": true, "value": "71.3.55.80", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aed4f-581c-4aec-8ef1-0d11950d210f", "sharing_group_id": "0", "timestamp": "1510665551", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aed4f-39bc-45ff-a36e-0d11950d210f", "timestamp": "1510665551", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aed4f-d610-4a5a-8114-0d11950d210f", "timestamp": "1510665551", "to_ids": true, "value": "88.244.177.127", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aee8a-fb14-4018-9413-4a3f950d210f", "sharing_group_id": "0", "timestamp": "1510665866", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aee8a-0af0-4cb2-90ef-4db3950d210f", "timestamp": "1510665866", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aee8a-2ba0-4a2e-9064-49c1950d210f", "timestamp": "1510665866", "to_ids": true, "value": "180.93.148.41", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aee9b-caf8-4ba4-af30-c1d9950d210f", "sharing_group_id": "0", "timestamp": "1510665883", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aee9b-8250-4e0e-9089-c1d9950d210f", "timestamp": "1510665883", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aee9b-0a88-425b-a3e6-c1d9950d210f", "timestamp": "1510665883", "to_ids": true, "value": "101.51.40.175", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aeeb0-5b5c-463f-b010-4dcf950d210f", "sharing_group_id": "0", "timestamp": "1510665904", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aeeb1-86f4-4742-b2db-464a950d210f", "timestamp": "1510665905", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aeeb1-6b0c-4a24-98c0-4aef950d210f", "timestamp": "1510665905", "to_ids": true, "value": "73.166.94.110", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aeefe-4eb4-43ad-9b97-4fec950d210f", "sharing_group_id": "0", "timestamp": "1510665982", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aeefe-d074-476e-b474-40f0950d210f", "timestamp": "1510665982", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aeefe-3574-48b1-a0c5-4c9e950d210f", "timestamp": "1510665982", "to_ids": true, "value": "71.88.202.122", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aef74-a3f4-4cff-b3ff-c1d9950d210f", "sharing_group_id": "0", "timestamp": "1510666100", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aef74-0264-4ce3-ace4-c1d9950d210f", "timestamp": "1510666100", "to_ids": false, "value": "990", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aef74-84d0-47cd-bbbd-c1d9950d210f", "timestamp": "1510666100", "to_ids": true, "value": "74.5.136.50", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aef88-7b34-4633-983a-4a4b950d210f", "sharing_group_id": "0", "timestamp": "1510666120", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aef88-b638-43b2-a9b2-4db7950d210f", "timestamp": "1510666120", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aef88-e260-4d88-a629-4858950d210f", "timestamp": "1510666120", "to_ids": true, "value": "89.43.179.209", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0aef9f-d298-42b6-8fd3-44b6950d210f", "sharing_group_id": "0", "timestamp": "1510666143", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0aef9f-e708-42e2-b69e-48f0950d210f", "timestamp": "1510666143", "to_ids": false, "value": "995", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0aef9f-94bc-4fe8-9aeb-472f950d210f", "timestamp": "1510666143", "to_ids": true, "value": "211.27.18.233", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0af012-82e4-49fa-9ca6-43e0950d210f", "sharing_group_id": "0", "timestamp": "1510666258", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0af012-9c6c-4cf7-9430-491a950d210f", "timestamp": "1510666258", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0af012-58a8-4aee-9c9a-45c9950d210f", "timestamp": "1510666258", "to_ids": true, "value": "96.82.91.67", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0af027-e910-4a68-8d5a-0d11950d210f", "sharing_group_id": "0", "timestamp": "1510666279", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0af027-cc2c-4f89-a4cc-0d11950d210f", "timestamp": "1510666279", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0af027-5d60-41de-b6ba-0d11950d210f", "timestamp": "1510666279", "to_ids": true, "value": "98.194.132.179", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0af038-fa20-4d65-928f-be53950d210f", "sharing_group_id": "0", "timestamp": "1510666296", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0af038-8b80-47e0-9cac-be53950d210f", "timestamp": "1510666296", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0af038-2a10-4cfc-ad7c-be53950d210f", "timestamp": "1510666296", "to_ids": true, "value": "98.113.137.220", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0af04d-9574-4849-9eb7-4e6b950d210f", "sharing_group_id": "0", "timestamp": "1510666317", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0af04d-6518-4261-9500-4cac950d210f", "timestamp": "1510666317", "to_ids": false, "value": "2222", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0af04d-d8f8-4b29-827b-4872950d210f", "timestamp": "1510666317", "to_ids": true, "value": "24.184.200.177", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}, {"comment": "", "template_uuid": "9f8cea74-16fe-4968-a2b4-026676949ac6", "uuid": "5a0af05e-299c-445b-88c7-4fc7950d210f", "sharing_group_id": "0", "timestamp": "1510666334", "description": "An IP address and a port seen as a tuple (or as a triple) in a specific time frame.", "template_version": "4", "Attribute": [{"comment": "", "category": "Network activity", "uuid": "5a0af05e-5280-4c91-a7df-4605950d210f", "timestamp": "1510666334", "to_ids": false, "value": "443", "object_relation": "dst-port", "type": "port"}, {"comment": "", "category": "Network activity", "uuid": "5a0af05e-95dc-46a6-9b5a-4590950d210f", "timestamp": "1510666334", "to_ids": true, "value": "105.224.247.34", "object_relation": "ip", "type": "ip-dst"}], "distribution": "5", "meta-category": "network", "name": "ip-port"}], "analysis": "2", "Attribute": [{"comment": "", "category": "External analysis", "uuid": "5a0ac04b-331c-457e-9154-4535950d210f", "timestamp": "1510922403", "to_ids": false, "value": "https://blogs.technet.microsoft.com/mmpc/2017/11/06/mitigating-and-eliminating-info-stealing-qakbot-and-emotet-in-corporate-networks/", "Tag": [{"colour": "#00223b", "exportable": true, "name": "osint:source-type=\"blog-post\""}], "object_relation": null, "type": "link"}, {"comment": "", "category": "External analysis", "uuid": "5a0ac07e-7154-4727-9128-4b2b950d210f", "timestamp": "1510922403", "to_ids": false, "value": "The threat to information is greater than ever, with data breaches, phishing attacks, and other forms of information theft like point-of-sale malware and ATM hacks becoming all too common in today's threat landscape. Information-stealing trojans are in the same category of threats that deliver a steady stream of risk to data and can lead to significant financial loss.\r\n\r\nQakbot and Emotet are information stealers that have been showing renewed activity in recent months. These malware families are technically different, but they share many similarities in behavior. They both have the ultimate goal of stealing online banking credentials that malware operators can then use to steal money from online banking accounts. They can also steal other sensitive information using techniques like keylogging.", "object_relation": null, "type": "comment"}, {"comment": "Qakbot malware", "category": "Payload delivery", "uuid": "5a0ac277-6480-4635-a01f-4b80950d210f", "timestamp": "1510922403", "to_ids": true, "value": "da00823090dae3dae452ddc8a4c2a3c087389b4aacf1f0c12d13c83c9fcaef9c", "object_relation": null, "type": "sha256"}, {"comment": "Qakbot malware", "category": "Payload delivery", "uuid": "5a0ac277-b4a0-490f-8e6a-4941950d210f", "timestamp": "1510922403", "to_ids": true, "value": "ca2d536b91b15e7fc44ec93bbed1f0f46ae65c723b8a4823253a2a91b8241f9a", "object_relation": null, "type": "sha256"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0ac405-e138-4948-8fd4-4827950d210f", "timestamp": "1510922403", "to_ids": true, "value": "%APPDATA%\\Microsoft\\Cexpalgxx\\Cexpalgxx.exe", "object_relation": null, "type": "filename"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0ac405-1734-4d67-9c55-4422950d210f", "timestamp": "1510922403", "to_ids": true, "value": "%APPDATA%\\Microsoft\\Cexpalgxx\\Cexpalgxx32.dll", "object_relation": null, "type": "filename"}, {"comment": "", "category": "Persistence mechanism", "uuid": "5a0ac48c-b1fc-4778-9481-41b5950d210f", "timestamp": "1510922404", "to_ids": false, "value": "HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run", "object_relation": null, "type": "regkey"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-bfa0-4123-a4c6-46e3950d210f", "timestamp": "1510922404", "to_ids": true, "value": "104.236.252.178", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-1274-4dff-b646-43f4950d210f", "timestamp": "1510922404", "to_ids": true, "value": "162.243.159.58", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-8568-4190-8a0b-489e950d210f", "timestamp": "1510922404", "to_ids": true, "value": "45.33.55.157", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-74d4-41c3-b9aa-4102950d210f", "timestamp": "1510922404", "to_ids": true, "value": "77.244.245.37", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-2050-407e-b273-4948950d210f", "timestamp": "1510922404", "to_ids": true, "value": "192.81.212.79", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-2ae4-4411-818f-4932950d210f", "timestamp": "1510922404", "to_ids": true, "value": "173.212.192.45", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-15f0-4c1f-a22e-4a3a950d210f", "timestamp": "1510922404", "to_ids": true, "value": "103.16.131.20", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-9e94-47b9-8d1e-4867950d210f", "timestamp": "1510922404", "to_ids": true, "value": "195.78.33.200", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-97a8-4b76-bf49-4e0d950d210f", "timestamp": "1510922404", "to_ids": true, "value": "50.116.54.16", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-1908-41f4-ae48-4aa8950d210f", "timestamp": "1510922404", "to_ids": true, "value": "212.83.166.45", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-2b14-4a7c-86d9-46cd950d210f", "timestamp": "1510922404", "to_ids": true, "value": "137.74.254.64", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-ae4c-4005-bd7b-4548950d210f", "timestamp": "1510922404", "to_ids": true, "value": "104.227.137.34", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-b178-4a7e-b14b-4a16950d210f", "timestamp": "1510922404", "to_ids": true, "value": "188.165.220.214", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-f5a0-4806-9b9f-4519950d210f", "timestamp": "1510922404", "to_ids": true, "value": "85.143.221.180", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-57c8-4d89-916f-486f950d210f", "timestamp": "1510922404", "to_ids": true, "value": "119.82.27.246", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-1a24-4ae0-a9fc-4823950d210f", "timestamp": "1510922404", "to_ids": true, "value": "194.88.246.7", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-8fb0-49d9-ae66-4eb7950d210f", "timestamp": "1510922404", "to_ids": true, "value": "206.214.220.79", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-debc-4839-80be-4b11950d210f", "timestamp": "1510922404", "to_ids": true, "value": "173.230.136.67", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Network activity", "uuid": "5a0ac4d2-1068-4201-9cc0-4b86950d210f", "timestamp": "1510922404", "to_ids": true, "value": "173.224.218.25", "object_relation": null, "type": "ip-dst"}, {"comment": "", "category": "Persistence mechanism", "uuid": "5a0ac521-3dfc-422a-b3fa-4d7c950d210f", "timestamp": "1510922404", "to_ids": false, "value": "%appdata%\\roaming\\microsoft\\windows\\start menu\\programs\\startup\\[random].lnk", "object_relation": null, "type": "regkey"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0ac521-ca08-4726-bad0-4466950d210f", "timestamp": "1510922404", "to_ids": true, "value": "%Appdata%\\local\\[random]\\[random].exe", "object_relation": null, "type": "filename"}, {"comment": "", "category": "Persistence mechanism", "uuid": "5a0ac521-b370-4446-b84e-4bb2950d210f", "timestamp": "1510922404", "to_ids": false, "value": "%localappdata%\\microsoft\\windows", "object_relation": null, "type": "regkey"}, {"comment": "", "category": "Payload delivery", "uuid": "5a0ac521-ab0c-4ac5-b31f-4cf5950d210f", "timestamp": "1510922404", "to_ids": true, "value": "%WINDIR%\\System32\\netshedule.exe", "object_relation": null, "type": "filename"}, {"comment": "Emotet downloader", "category": "Payload delivery", "uuid": "5a0ac577-0aec-403a-b697-4d69950d210f", "timestamp": "1510922404", "to_ids": true, "value": "4ce5366c7eef1fff1260d5d7a0aec72c1246621838bf8df07f4a6ab3e5369d96", "object_relation": null, "type": "sha256"}, {"comment": "Emotet malware", "category": "Payload delivery", "uuid": "5a0ac577-90f4-482f-b813-4e55950d210f", "timestamp": "1510922404", "to_ids": true, "value": "ffcb204da3ff72d268c8ac065c2e7cce5c65fafc2f549d92d0c280c6099bd440", "object_relation": null, "type": "sha256"}, {"comment": "Emotet malware", "category": "Payload delivery", "uuid": "5a0ac577-9008-42f4-a39c-4dc9950d210f", "timestamp": "1510922404", "to_ids": true, "value": "59639027a7fd487295bad10db896528ea223684e6595cae4ce9a0bec8d809087", "object_relation": null, "type": "sha256"}, {"comment": "Emotet malware - Xchecked via VT: 59639027a7fd487295bad10db896528ea223684e6595cae4ce9a0bec8d809087", "category": "Payload delivery", "uuid": "5a0ed8a4-6294-41ce-ae02-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "9214359938285f26785f7eaf25a74dddea678065", "object_relation": null, "type": "sha1"}, {"comment": "Emotet malware - Xchecked via VT: 59639027a7fd487295bad10db896528ea223684e6595cae4ce9a0bec8d809087", "category": "Payload delivery", "uuid": "5a0ed8a4-8cbc-4980-a1c7-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "5aa9fa89cee3ffc4c3009e34db830de0", "object_relation": null, "type": "md5"}, {"comment": "Emotet malware - Xchecked via VT: 59639027a7fd487295bad10db896528ea223684e6595cae4ce9a0bec8d809087", "category": "External analysis", "uuid": "5a0ed8a4-1f84-4696-a287-e7e802de0b81", "timestamp": "1510922404", "to_ids": false, "value": "https://www.virustotal.com/file/59639027a7fd487295bad10db896528ea223684e6595cae4ce9a0bec8d809087/analysis/1506215055/", "object_relation": null, "type": "link"}, {"comment": "Emotet malware - Xchecked via VT: ffcb204da3ff72d268c8ac065c2e7cce5c65fafc2f549d92d0c280c6099bd440", "category": "Payload delivery", "uuid": "5a0ed8a4-1748-4308-a4e3-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "a33763608d07880c5ca31fd68e30355c04201c92", "object_relation": null, "type": "sha1"}, {"comment": "Emotet malware - Xchecked via VT: ffcb204da3ff72d268c8ac065c2e7cce5c65fafc2f549d92d0c280c6099bd440", "category": "Payload delivery", "uuid": "5a0ed8a4-073c-4f4c-aea8-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "03b933fb1b471d7710d82d8b3f6c62b1", "object_relation": null, "type": "md5"}, {"comment": "Emotet malware - Xchecked via VT: ffcb204da3ff72d268c8ac065c2e7cce5c65fafc2f549d92d0c280c6099bd440", "category": "External analysis", "uuid": "5a0ed8a4-a5ec-4828-9615-e7e802de0b81", "timestamp": "1510922404", "to_ids": false, "value": "https://www.virustotal.com/file/ffcb204da3ff72d268c8ac065c2e7cce5c65fafc2f549d92d0c280c6099bd440/analysis/1510558151/", "object_relation": null, "type": "link"}, {"comment": "Emotet downloader - Xchecked via VT: 4ce5366c7eef1fff1260d5d7a0aec72c1246621838bf8df07f4a6ab3e5369d96", "category": "Payload delivery", "uuid": "5a0ed8a4-690c-47b9-8647-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "82519982e32708e94c54ffce3c652714049a04f6", "object_relation": null, "type": "sha1"}, {"comment": "Emotet downloader - Xchecked via VT: 4ce5366c7eef1fff1260d5d7a0aec72c1246621838bf8df07f4a6ab3e5369d96", "category": "Payload delivery", "uuid": "5a0ed8a4-0868-42fa-ad0f-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "517d9598ac8aa0ef0cb7145ffd64805e", "object_relation": null, "type": "md5"}, {"comment": "Emotet downloader - Xchecked via VT: 4ce5366c7eef1fff1260d5d7a0aec72c1246621838bf8df07f4a6ab3e5369d96", "category": "External analysis", "uuid": "5a0ed8a4-6c28-4f4a-8db3-e7e802de0b81", "timestamp": "1510922404", "to_ids": false, "value": "https://www.virustotal.com/file/4ce5366c7eef1fff1260d5d7a0aec72c1246621838bf8df07f4a6ab3e5369d96/analysis/1510180240/", "object_relation": null, "type": "link"}, {"comment": "Qakbot malware - Xchecked via VT: ca2d536b91b15e7fc44ec93bbed1f0f46ae65c723b8a4823253a2a91b8241f9a", "category": "Payload delivery", "uuid": "5a0ed8a4-fd94-4d5f-8e45-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "74153fa3ca1a97b68fdd31fa02c3e16daa03ac59", "object_relation": null, "type": "sha1"}, {"comment": "Qakbot malware - Xchecked via VT: ca2d536b91b15e7fc44ec93bbed1f0f46ae65c723b8a4823253a2a91b8241f9a", "category": "Payload delivery", "uuid": "5a0ed8a4-1e1c-4eca-8532-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "54240940b30c9f21e006d87371f490e6", "object_relation": null, "type": "md5"}, {"comment": "Qakbot malware - Xchecked via VT: ca2d536b91b15e7fc44ec93bbed1f0f46ae65c723b8a4823253a2a91b8241f9a", "category": "External analysis", "uuid": "5a0ed8a4-2ee8-44be-abd5-e7e802de0b81", "timestamp": "1510922404", "to_ids": false, "value": "https://www.virustotal.com/file/ca2d536b91b15e7fc44ec93bbed1f0f46ae65c723b8a4823253a2a91b8241f9a/analysis/1510257822/", "object_relation": null, "type": "link"}, {"comment": "Qakbot malware - Xchecked via VT: da00823090dae3dae452ddc8a4c2a3c087389b4aacf1f0c12d13c83c9fcaef9c", "category": "Payload delivery", "uuid": "5a0ed8a4-4da0-47ea-9e6d-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "4c04c92cf88dc1a0cc4829229786ac50c1a51aa5", "object_relation": null, "type": "sha1"}, {"comment": "Qakbot malware - Xchecked via VT: da00823090dae3dae452ddc8a4c2a3c087389b4aacf1f0c12d13c83c9fcaef9c", "category": "Payload delivery", "uuid": "5a0ed8a5-a0cc-446a-8c32-e7e802de0b81", "timestamp": "1510922404", "to_ids": true, "value": "692802635dbd973b7944ebc8dbc22e2a", "object_relation": null, "type": "md5"}, {"comment": "Qakbot malware - Xchecked via VT: da00823090dae3dae452ddc8a4c2a3c087389b4aacf1f0c12d13c83c9fcaef9c", "category": "External analysis", "uuid": "5a0ed8a5-2c5c-4318-9715-e7e802de0b81", "timestamp": "1510922405", "to_ids": false, "value": "https://www.virustotal.com/file/da00823090dae3dae452ddc8a4c2a3c087389b4aacf1f0c12d13c83c9fcaef9c/analysis/1510111314/", "object_relation": null, "type": "link"}], "Tag": [{"colour": "#004646", "exportable": true, "name": "type:OSINT"}, {"colour": "#ffffff", "exportable": true, "name": "tlp:white"}, {"colour": "#00223b", "exportable": true, "name": "osint:source-type=\"blog-post\""}, {"colour": "#0088cc", "exportable": true, "name": "misp-galaxy:tool=\"Emotet\""}, {"colour": "#0088cc", "exportable": true, "name": "misp-galaxy:banker=\"Qakbot\""}], "published": false, "date": "2017-11-06", "Orgc": {"uuid": "55f6ea5e-2c60-40e5-964f-47a8950d210f", "name": "CIRCL"}, "threat_level_id": "3", "uuid": "5a0ac036-6fbc-4855-83af-422b950d210f"}} \ No newline at end of file diff --git a/tests/reportlab_testoutputs/basic_event.pdf b/tests/reportlab_testoutputs/basic_event.pdf new file mode 100644 index 0000000..d967730 --- /dev/null +++ b/tests/reportlab_testoutputs/basic_event.pdf @@ -0,0 +1,391 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 26 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +7 0 obj +<< +/Contents 27 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/Contents 28 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +9 0 obj +<< +/Contents 29 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +10 0 obj +<< +/Contents 30 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +11 0 obj +<< +/Contents 31 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +12 0 obj +<< +/Contents 32 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +13 0 obj +<< +/Contents 33 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +14 0 obj +<< +/Contents 34 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +15 0 obj +<< +/Contents 35 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +16 0 obj +<< +/Contents 36 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +17 0 obj +<< +/Contents 37 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +18 0 obj +<< +/Contents 38 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +19 0 obj +<< +/Contents 39 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +20 0 obj +<< +/Contents 40 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +21 0 obj +<< +/Contents 41 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +22 0 obj +<< +/Contents 42 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +23 0 obj +<< +/PageMode /UseNone /Pages 25 0 R /Type /Catalog +>> +endobj +24 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20190221153022-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190221153022-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +25 0 obj +<< +/Count 17 /Kids [ 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R + 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R ] /Type /Pages +>> +endobj +26 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1591 +>> +stream +Gb!;d9lJcG&A@C2&D;s\5V.[4,%[F&2JJ(#]#ejM*Z!s.Od/=gChI<,7fWFIAp"u9;'T8T]Ns'GCf@L&0>e+4W)bBbi+SQ5D'[g77egONb+ONT`%`a8MM[S9+:+.F4cQE!=t1Zlhf`[B%M*sg'Vs%h'IJ:#ote"[5tOg2F#Z=9JE=N$$k-br08a-bI.l]SXHO:7KS@R7RG`-.$CsI82+r^0I2_XGOj/+-HmHcs>lBi1J=uM[^a$6tIoBZRh*HaCHjL61IZ)^I@'39bj.=@(-A^\B,19RPq'+!D!#LgCug#MLFq^3i"_Vubeb@Z`KJWj-E-KEG(CTST56gN!2fhr#Ym#n=3*,:'\m@i=/8?_V.P/#H2ghp2e;>XSl"IO1I<>+<$%##KM;Bb(q5mX&_:/so!NImM&D@o;[#;fQjWZ^eUU""4k_&]PGIGqJ(BjdjMI]&!b1h[#<$arjGt'/RG"l[@k0Zqc;Fkc2CrWmb^cEa0);J2)UVjn)Gn1Dp,Zk1cZ$n[uVp:EY"0SleN,iDgnMoXXIIuqa>b5i974W<55IED]\8ArE'[q4eka,fk[_2j^W7e^qd=^i^*Hu%k7-AcfBYmp,&.(56oGkKOkP7m4\\=7ekIKj(V[hnAnGR<$53r+2@Cj-*]tJ=)odLYrD01\*OUP%Uq+2q.dQ?6t0RtuZ)3A\P5iKVo`0A06NfR-P]EGG?0+_1F7DaqP0AVl;7U`QNNDLUe#'jA7e[/TDjW"dREF*5BFa73Rm>]5WPJusKFRi@]MQs`!VHMW<.1j`3lP*Af/Y7k7,W'Y+!d%ui.6Oo)+B"cGO&RLt,LqYI8D,G]86N%oCSY"sEk.U@=-%K1`(foNF)k3]mc'#PH8?6W)l;H^o.@8)6WFqmKREb9;6@nt][p?ZG7dSNOmDK@b?(u)Ve#7rHmL:a9(l<.=0aTZAFH.<,qF%/p85r5Z8/=gn!&2G/$hk9p;g0Q199L(M**(3ZV'XTaA[+7X5kmZ4=)A]9$Ha8Xgj3d\%=fOp~>endstream +endobj +27 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2120 +>> +stream +Gb"/)gN)%,&:N/3m'Mro2e1:GnWoS,36l*`8Rg:KqW&HKKIk-U-mW>'J):DU;PYnf'((XIes7u=@^-.C$XaJo;]tk0eaG0qGWg_TG8)HXi>AMt"UmW4gYq)fTP@n#8_([YG-o[t#iG?dn+[kN[CNi"@1!8+2].!riCi5/-\eV6)6p0])$e1q2Pl'M4>rD'\[ZG\-6Q!\UN[PY<9V%^5<.6*Lds8'apuF'']Ir-_NlUE@GaM)?ci7+_KB\@URo<,".+8HJ=D$#2oAsn]:()7\@+bL!#FZm-lB]=fKSn[6fI1boV6J5W^:B$LFq%oi*15HK(r0g'j;)2q)KgHI_d;P\20HC/]m4@>l8D_:Pk4hUFQn\o"oS9F8,-jkYXJ]Td/Ig;6$m,a!Y:Pf6-FZ,ClDZ@"<7Q>i663$_stN:1"[QoX#m2WqL^XD+:tXY03Sd89;?hbCdGKKZ9KrEHR.*4t]eE(o9XC'uW5Qfhj#>/Y$5f?j@e-F4Jk:?10CfFGRL%C@Hc:Wlg07tiFX/AauW1JR+R^]O?<91*$OHS5hGE;)>j/F:E67tP;:Rr\+S,=X5F=(gQDTo3lDMq'0q;!QbcO+i?TJo?#Ub8+\".r&Jhe-0_Gf5ht[(e!1A*7UhckK)WGP;FUYCf?iDBL5T1F+o>"iHc?JJo5OpTi-(^leirWBttC0ZQ<:u_4\b!*)$R??f"E;10.T3c"iY>Z;h8'1=#Nm17o;TZ8?IlhgZLiq5#sn9DqMI>LlBG8SamP5Odjj^_SPOH!i_7jLB1.IUIL4be$k9?.Z7!QGAi)4`38;[b@^[]Ig&$<]`/r[cQ#kC+$U/M;E=um8d,Qn'WaLBJ`A#D+*jE7ND/bi105.N@8FoNnZptQplL;f6^>NgD;`WXiNX!$+(:UX,20AD:F9s>8rQU73WXR67QI?!TB>`6Eu/$U*Sqqqm!M*G6gE()[-b8^(8da6!rl7iZL\GYcY:]T0OI&%Fi+decETp,"l%=(m':5#E8MAAeW?E:)5Nb(Q>V7"dr'3#N,#l-*[PYM+/d/K`jjgJ^-Pr/]0)=PVA`j0ImlcR:W9c1Y'>/[7,g2^5hm'%&O=i;C[;I%qd3kLfst97*/=OCW[0-iC,G`-+;nQUe8g$C'j"'..ULV`S"f9X3=KGq&&`l_$MV&E=<$[)-&("^&jf2P`!Nu0+`]e0LUD\O!`.e53-gCNYTl_O>s;Xcf68P/FfEc"S\\ujAmKokK"M&9p-$ec?Y-Vis85riu#>b.>^+Xqb0:)dqPOqZn\imV+*q)8Maiu@I$l.BM$cZT%F1,G(SD=_Z\3J-q<-<8j494"E+7O=ScR4`O/+]A[O;!B.a"e;*2`(133H+5,K\7CJL,jl',\lRESZR2>%1HAXS)9R%\7\($]=$doA:.Dt58Y7+EXhmXuiNNX;R\UZ56Q:ebYoCm=A@=0"mocVS/+nCQ;K"C%>8>bu7QT/dYjGEE)Q-aD[[h/;m1aB`r4u+Ps2[g'Gtt--HRj5^^J\]4m&JQ@Vh\H!=:]OlmY(:'@_M13pngf5*%-d<7/FM"hH+tm_R!q>U%7=U[sWt)nePcCKCTfE#rT3EqE06Ph(t9nEN,5N'e'n_RDiaKmBKsd6s@2,hLf%+0!Ec6gMKilqngC8f6%&iU),2TT0Afp5!(uWIt%=[h1q&0^V%(d-rk7-LT8"sfYWh:V\RT]Q!E<$Pt,GF5cu1'eZ-R=L`b(Xc^X+/7G=DF5_Et>YeG2NmH#-*"S+8>,?4@jCLO+GaX<42="nT=ap$X"aSb@,3&Tj`SEDsJ#AJ%4anGW8U;@@9dL+E1B3`8Uub66_O;+;>sendstream +endobj +28 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1271 +>> +stream +Gb"/gh/AcR&A[3%=,_7$PcM`grIfUCV9*"i:$#VNqn`^_91$gWMok)Od_Gb3FtcbGfZ&q$2dg..41dR9_p&#](ejnEoA:YopqqYA(Dnh,-N_L'"6TcV4/6_h\V'r@k7[@8YC#fg&iR%pc#!e),*#\0'3ocmu\MfB.i?AmQ8VIra5PRGE(.`!5S'FLSd,:%tWfaN>B5#&o=8\20oABqZXLK"Jec)UN;:Pnj_F5KHC^uDtn-1n?`=8psJ,T?)dWMbbW-n(Ajgpdu:ukR2FPY8_(?Q-+f0-`!$C-mK<&'C(b]V83Rj<9Q$9diQ,tYMfPD_O0ob]h8:X_FYld@<+qap+6?F>/Lq`"p-0'Ue]Nd!RerR@"4pClq7;l-k_ViNj&%8DhYhs9mW#Vi"`$P95B"-A%_rZ!)>_a>/sBcUB8I8"U.C%/HZET0;;g!!.Biu4VIpX]#NN^#i90J7*3q^(jajZ1fhUXpInA;bVID("9sd[D+KM__3@G9f:CQQ3YIq(*iA3VDJ&U1=/t#fG[-]lQEN6V;SIdoj&p5gQ7<7VUainGZ?Vg]'eXKVb4R_k]2u/\$GY#t6J[)jNuc4[)mR\+%Sj)+E-dC9lr6B]/>`$W-i4BnQrWb!7\%`pS"1m1/0pj)h,jcon^r&TjAhV+,kNX6[nAb-FjpZW06p_YY?^i!kF5&A6Ne^gf7?t\RbJs>DCoSQ_AKI27U$_)29&/p@mh<"Vp=)+Q\4Z)=Ld@_$Q'JV@9O2jMfC?'Q;gX";aj'/bem&Y'f_'jKA^aJ^b@@Cmbt&^GK^r2TfC4lE']=:`aEiZK4-`L$IaT-"FZc=+\->KB:gnF'f7@IJ;XIc?HUc]F7=FnY>LrEh^p_')%LaEehdBendstream +endobj +29 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1144 +>> +stream +Gb"/i?#S1G'Sc)J.uqQm5`5)Ei`u%+&4-ddDAY]XiiI]Sl.U6Us.7\UC"&&p-:D>/d^9\JEI#ZqO.HF0Sk9O,%9s^?4ED4-]`4S1lq.lqfnH5:SEU\>%n"r&[B'%_$#eZ@i5,o_39$)A"9F[bpd)8hu].].n2PA4%+-s.L%ihB4oLMN`$jMnqa"a!1+"Z=br\0,k.b9-/dKI4[^f-h5f0#XME4:_)ZJi95m:lrcAR'kMT5j7t0hf7?dgnl73YbCAttAQD\mqIipie3jl$EH5d&R^Y\hTL"Lc,hkn-YaX9?>._')ZjParBuS3HSstS=8V_S.d\2=EJ!8.o1L?=:fa1^B;^aTGkNgW.U[Q["]hHknI(]n*p"f+k"8`%n)9I",I2ShDiGTYUiI[ZJERR)T1aT84io1('-7M;?0oi!7NG%YZ1g>q**&A+'5rsH>qi'^1udQ\\bVqZ&=VRG7EjQ,^Oo!U$eWjbtOggFJ<6VUs"kd$:AGea!@)=J*9X6^f[DOmM;QFYLl"#CC]Zk7?gaTXnFYpcYeC=mg7haHlms0+k+^)0CKlutgd5Y?nL&f]GU)Qs;$LGl7c\LZC@YiQ(rBk>X3*W9/DFR@JZ$X7KNcK;Q?F7?g5s(;GZD_cXFhZ~>endstream +endobj +30 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1266 +>> +stream +Gb"/iD/\/e&BE]*;\7S#YCK^rmmrQo]8$k8L10?%^#tTb'QLd_DM*?6;0HJARH<(i4#DY]-oQ>rO+3UB57.uVOagd12_5jDDS]Yn"pU5B.L*hJ/Uh7q/nXQb)iJ5L2AZ*bT53Co#f@)iAWQq3X?Wu/P0MOdD"3N;?IXrfnh*S]#+Y\Oe$U0<:XV^2uNGpG4GTp358lD,QQKC24km1j4B^0P/%4kjl4!Va^>@*ol23"K='33SfBgaX1L;PSfBeu<]*WNBRf1Y#NK,0K)M@8)MbWl`_"Q#[B!Zo@7*2PXg4e'HeZ8B>p<%ki-h\#5_=)+$Lr^VV-Us)OP>^i9FP)e_,8glLoZS[r3@SWt34r?Fdh_qs0N*/>ha6:T=#t7iL&8dNg38>%t&!1>T$9ANfXhZGuVFb2+D1"n>B-.!^l*d\H/Ws*$LeH_8TZ%t?U=L,3)K/0>U>T:`B7O.pBC?RI9pY"LI7#1l\`;d#ks![LWphubd^B?FaJ)^J?r"#J6"ecZb%l*0A5#2$Jpcn!WU!g1[s9cc$sLeIV@a@`;daQa&Go%19/4'ORN2ud)>rsaFB`Ts!@4XN!nj#:l#gcPTopNcYmikJW:muTtO!a[mh'4;:ImaOd/UXp]$aD,msA(nS[@d1Z:bit^DoEF[eKg`dJV$><$$:ok-1c`$s5M:24juTo(9T-"0;gF']aZn>YLiaK]WQUNd?`L>_!jb.+&?O*L!YO`7NHoefh[IQaendstream +endobj +31 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1235 +>> +stream +Gb"/igQ(#H&;KZP'Ei`g%3UDC)4iJ06])XJd7p1go=.N!c8HUh`P-b7n&gel>HqH9M[em&Chc@urh3pf8N&8"T'Ln$Ef3t$A,mTNhq3=m0(cVhrg(g$XZ!np_t7/+_82d4VFYb.+fkJX\'g?>pA*n=ea-T/7@Kpu>R>MR"(\m/Q"Mo@ZnRfukFW9U&4`:ekW;Lc!o2m/XS9DGdRS"5(5'-^(YNBt@F_s4CbS(P^XmdJq$YM6LfK/jDh#iP%,pQ!;kqHpE[np9ib0/(lL4C)i]!QW_>EWh`OCukNYYC`3!5JOr"NLR]cM%D`lq.6*lPM*=2Cie+X*":-.W'Lmsn84smNB;Oq3;87/g\N#.S+sM8dg%ADgNh>.&-hk(h[N'Q2%K/qJ^R]@JBfCu$>WiqUm+"lfDA;uGcah#V$ak-%roirgA>lWe!*]XE$t?kUXB/csW'Vce2RR9OpVh/uq^-\qB(h4;]b@nq7+)O`B=a+*[BoX%f+B6'W*%35i9:Qu7WVH^!=ikcT%C/qraD<[,MW4akoCk.50=9%ZHjOo*U?%L0$&P`Kd*$"8V/?(F[F7bU`s[kMXUL!?esMoD<,ThpWM*Nq6O#fn,DbO`[@)Cop\a&n@:n)\Po:q:0%hPDAJ0.DE0-"1@J;qq`[@"X6cl0rX#L&H@tp$6/+uH@RQ$?*&n1c@]5qX.:UjTTuWs*U\Uh1i=h2nPIF"o*C29k?E95Kg:g:W,11t-rXkrOqr$R&.i4o1Frt/f%J)gP0r"$>78)!4QK+AtkMiIars,I'AiP3l>,"7,e7\k>A=;O[U04Fr\1ao!#,#8eqar2DGAEu+e7^M'g'Iq&#A8M0n.f>W6T7R%>;gm[3S8.t?r',`37VU84ER["2TVFiQn\=V/nc(`LpXp9X2NtO0Q4ura!WbZ2-VP/Qk`W$`,XQ[rAqNW\7VN=JE!JY^S/_LC!rdgqBAc"&RK(:0rD;O(j8Ut9'?5@sDh[M)p8T?:Z15U!^[_=dr.boK2bIXc]Yl(2F`s0>'L_/ebRbpZY@Aj\BQU5F(haHQN*mendstream +endobj +32 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1186 +>> +stream +Gb"/hbAJ7X'Sc@.$3K%^!G92iiGFuh;R@k+-;h?%3M`-0Z5Z;/iO:HdHShKcOtAtX`1X9N3@'+QkCEJB+:th@@Jq&[6MrMNcX28('XK?@>8FR&`Qtm4LWMT/!ouCopZK_&\=^XHQE7A;!*WPHM:k3hc1b]@?Hf"C3km/noY",1?jK?&eIb>'nrqY!@0PZ^n*>nRAJo&UOOC7oj?s(qY*6rQ-EYbF=;INYh[`V&kFf^bXA;Y:)@]%/3$k5'8ogK!d\X.fG1MF*8tjk)q_2_]gqE,F%36?h(#o$^&p?-h=j97^.Ruq1bhJ!=O+*KLY-)^?=uG()Fm6ob!t"A+e@kYPpO9(M,N\/srcWbP440o#]2*.fr'I2Y_4>$E>IJ:NG-tGJbN7Yu/%jbBYC2)1f?"grm3ar&M=_+?(q-G%]DX[*r+sFIqrrfqnFQ/lO%LKJ"0PY%fT@a8Za',2TAPV*C^'S1JV/FD%Qi'0NCkP^3O1DD;^)>%;FlnTLW%#sPVR@+W(`M),\5%M9@s3VWKT4].dn7TlRtFC?eqK8qo=t(Ng*"3s&S"F-S=ZT0VVRSHAGU[f=t!_UVqZ\?G%+uY0rbs2uS1e$C"R5.!t5-:g/:?bWZAuu:tI)Z".0FnpIK+'IR%Oifad3;**3G2&@5Zql1Ce36AcPAQW<:lIgR,j"n`^@`C*NMZ./Zg)1h['8(Qo"6h4Nr;^](3W,rt5/fg2Os$EoWE`ALE_Ro)BZgs-oM$5HgiS=8[Q-pc$J!\Y.=%/u"EJBO$KW;AY]VV_"#j2C0"F6BFAXZFR:Slj!GdJZj:n:BCKojVdQ++3$NY=7KYfrs8P/=12O+Wc?=L,8X%mJ&QoVs&nj+\t?GYVqctK&Y/"6"[U(76J#dL&Td4MG>[N/QDMi6Ue\4#,]&Vt"Vn9$rs@U*R*L53pFuR]Y'%86^Z,8Irj>P`mN4PJAbX#q$#RY2`IGl,=n#cf!Tmc,A$Ql5A=4R=@$OVm8mdlhY[,:0>-!)D5%1l<9=M.!5D:(W`W$Ue5O*gB-f]^O;s6Dp@e)`Y**2&~>endstream +endobj +33 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1340 +>> +stream +Gb"/g?#SIU'Sc)T.gYJg.j1.5LS)35\olXZFN`qb];8%JEGHr(j.sc20C;/neB,!JW9YEO?ab&%^-4XnTD&Ho9AcuLlPG6P1aUIT!Wc&n"T^mmRJoL$R8,q@2A&]7D'JoJHo_Xr6PsRb8:q%qiqa[`0$'IVSkS%(l*L'%k@p=SC*8oLAL,7$#rPrq$09:]a."o(]r>4-g)`jQoh[uVh8IuT8q:bNCbrK`P-Tng;H7e1-:P)8qrh87TQKo0,F(mb[o\&3]pj4VKWYuruotFj["SMKo\dfk0e7K3g'M:HTbu"EiHP4]QNi#>!@r(mX1Z`+4ZMaRck<8b?=7X$is?"_&Aq-:uGo2d"%h4\O:A#;I6.n4+K2sr+p#_+Laer:T*13;tUM@d=df1\]pE[@H?fX%9rlfXVd+6>5&.rt589i'4bFPDQ5rbiLTUn#RN!5N712ruh+2\b=5`TOm,tErap%["ukFA2,F`jgI_R5]^_8#a"6#1$o>0`7=p]/U5mR39's;n;g0MJ:G9Ts4eTQIr0Ks=g`U24nrsi%,FP.mMWU$Ge7V`b4o'#)r\OG4rXHTc]hl_p&)XN6.Q&1BnLscU_*d0g*q+8Y`RUmPja6"bC3DO?FlL0&ZPa&K`uCKa]6Ao"*;$Kk6\(dNmpfrOZ>d/8!e2j>oC]BGRLQL.dgJNcOoRY^qZ/Nr7[ktoujqF#1]uQ3c@icX!-HHjUgq$rU:#Fs7>+Gd#RsUi-f(JHOM7K>)%W?69CB6D.FuHdu9('EjPXM6r1F=QbAj*rrh4rm:"\\PDoG"0;F"="1am]nojj3g#"i.42d[QjM'48PRPFRV<_=8-Y3fdZ(-b.'e9P='[MD1dP1&3((=\@OmAt=BH.6EqS.l,!7V)f#I3/G#dr%lUN%-16aq%`dUn]">XIS3;OK4DNQ,B`%StP5/:r7!^-N!2B^:labG-f&jkb@B#$=iTgl?jBeGKB9Hj5TrO/i~>endstream +endobj +34 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1447 +>> +stream +Gb"/i>BALf'Z],,'Kab[RMgrFBCC-3-0_eckq+10fA5!"-39<^CtIRY$au/XJ,i#U)io@IUa,9!^Wo..-S7Ssr.XO5?P)eqPY>Bc!@6-a!)GVCr_-Wm7t6N,&L9WN&U[\&f>>E:3n6n3bm6SW2Qt2D6,r&&14;rq0/adL*eu2R7[epXqnL1N:#J4EN9JM/C,6'L'Ej>7ESQM3hnK'Zq_GiV1\ODKJO6q"6JYgAV(0toa268dC$-+G%8XKS+Yc!1KM.V0bQ;o*%[L6kVGFefPW-eL>>p\(L_GtkJYAq]Cg!ri_N2qM-GY'fl-O?`\Tn/jtdDJ#3IS%^0).8P@%8l00&"]1Wk_jE:%BF%MYndUVMa]W3j)BF&,c5B9?c)'OGjI!Cr0.+;rID$DnG992clqaX6;YZ23R*Vp!Zrd@X.J94..+HPd4$13[\S20W]7F!Aq\"B]'Hbp[-^3<>g[o*d\m?2r_Tl)p>YO_A4A:b^J!YN8T);1UWL88:.MQMp9\LtjLOu`HlgkMDm!AG<8W&s7DZ=uR0$VM-Z9d%CEN'Ab-r(Cb63baoF7":^(N\4l*8)`!M%i!$q+pO>+dO"VNDu!6K\IBibqE""(6)k_&a]k)"XWFZPr`!$nC[(Ed-HpJD3$@K]\&4<;OBJ>t`=j1?hUhYN$MQa+Bs%(i?cpBQD^F]W_d5p;%tu5*rE*D-L"--a\2G)VOFF;6I=NKZlb01oS2`VDq(9OYW!.P"8SjDub[j-ERLl*T_,J^;Z2M_EGTA[MPl2_mSEH"/q#B1Nqi<4+]3TCDV8g_gjQZ-BN!"K)j4ATouA;BUTIpq-:\^,dMpS\0/P%mQOKh)\WE/QHe""ub=?9k;Ln:EjL$\14\HjheQ-h)_,(jSFEOD+8*EnFWr$o9!OAEMq0!/=qEj*s,]d9H0+SbYMjAj2g(b_NaDXh[.38Bc&r@8I9$F'IU&+SgUCJTncBqJ8i=D_4Jn+Mk!P\3cOLG\2cI!;$CfkgUOI_LrEdiJcLu*Ets.P]2)XBVU5?,%0gQ7j#*m5WK;3K[W8DS5RP2:4Z/Q):-"IdX#[2k#u6LhD(Ao[YsZ>H9ruMk\E*9["`PhHLpAsmpu&$Vi%1<~>endstream +endobj +35 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1439 +>> +stream +Gb"/igN)%,&;KZH'U\-ERi,*(G&bZ1%nW[i:0TYLVRJP4<[(\'/B@;8(QqIS9I3kOfqe=B8h:4-?%#eft-g$C8WW.C!IE3+@=5@1!5^[;/RXZ)Th1"bDXbJWl67b+`frcOGj3C7T)>fjdI\6N-tVQ?R_8p;i,B%,8DXPDT5ZsB6qboTm[d>S8;Qe>#g-4X[=,D"JXM-W-'%MF"UF4QeDo0m#@Rl`:?T4:#kBSe5$OK/Dm&@HdDA;rMNk#F*hM8E7&V6,"D"6JOkDJc3+h(UJm%#lO-[O?9)rB$XLV\\M15qG@E5.X(WH\_pQ?C_>^kcX.#qie%_^QgJNtd4VZ!AX_U9:.F."iJ1Q4q:(0/FPCJ&l.e7mJh*D#$1<.Mu9n:P#cMoG7)(N.]N3*b.*5C:o7C*!"ukj]cT&8TWT8,s1?mc&fA+6dhp%+`3JKBGdBtr0P'H*.$Os_\;jk&TD_@0:;^drr=]o;/n$Hn,i$ErcV';*Ba:9?I2tGZk$KiV[M^K(Ne#\(S%e!jW$$43Zc0H>stDG?8u4=?@5qqj])pnRm-8CVu*?aZ2qeV.PS46pO<;MkTmJt!!AaoZErfG]/F+PS\"e.0Z1Vb^Kdnt?U#WnDf9RcO4348okLb;ZeR4rj'k'-j5)hH>\;6J#tBV85W'U5A1O6/m5Gc(W!6S,$85ol04]bQfJ$]EJ-L2toEceuQl^d257Ag-la0G(cb?4JoFsIN*l/Zlb7PWj%1bpfA,~>endstream +endobj +36 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1466 +>> +stream +Gb"/hD0$US&BE]".5]L4DJ&=`8unl&CX]*.:8b3-P3H1B-eTb-,_5:WgK/od]5up>2l)9N0K-XL:m57^%gY2f)LlKR%+3T8-\P)i7[\Wk@pIWm>U2#39*C\R0-9Or:b4VWR=?*^WnHXPB<(SKF=1UaplH0-*okrZX0f&6360HleP!3^Bf(0;7e4$4*Uh@bnF@dSDI0+[[Fr],;c5@(X"X_lK*u+TBkgC[q)^:C]>+sH9$pfNl"qZ=sSl;jFWo8R#]3qZ7,=929i0We-c9knl=MmXF8\bE913)rBectfpf%a?ScUj,UZ!m'T#L76SqS@riFVYSOm340b!;@M&qjbSq/bE6(RH/JKoc\[2q],)ILM]F2/Ts(C!J)9YOgt^uB_qERf0jWF/m\f)o*0*AcBZ9GpM&kEtL\!\8TL'e,h/Abp8!jk]@Xe**3-[Xb3@0TPVqTM4Vr.6^*+aFEOpf!OOBdt#^\2[oaA(=qa&T`C7jIT%lut;h`3rEnq5%qte^+Ve^-#V9NQ'$_\@*)6QVqK8$k6lPH4"Uh(,9dgE=j<%g8ja5lRNW\gpn2'RQ%:fKK#qMS"5!GVi#j*G#A2Tp*)>Fr#<56[5!p>5e"!BgoplaUSA=*?K#>+NrMAhBEs]^SI:JOt+i?;M1(!_C!X0:;.Trr=]o;=UQu!3WqikV7FI_fMt_0ARV+-\jJWPHmf[#l_:nCC0g<*BVE&VLW#7Ws90rLV*hd4]'e9$k26K=R=5deahT)kV3~>endstream +endobj +37 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1374 +>> +stream +Gb"/hD/\/e&BE]*;\7TNXFOt*O,n^uLN_<($qob!HV77Iims,o7no:f?eU>fWHB1b27b,r'AK4@jS@,sFhdErYl"Uhf.\T5k6W$@"9P)e&ck9%RJ]W_9L^*nCC;N*eeW^Y4^WoT.253-dNAS#rJOA3j957=AFc$[Sum=2k'?7[S5IYSO[u>u!9;c4Lg%d)&`iQXjk8iAO"ulk<)bW[U];[`8CFgV2-^LqjR`,X6(2^4[+geOX[/KEk6Yu9:L*S>Pl#;8`7@SN]@9^E`i<2=]I7g.g`K"MPM>!L;,)fIY3'tRpO(Rk8%budQVY=:5+gi\A`h:0<.KGa*bW[Yu@.G,4/BP=V8>6;NQCGGms.N8ZnqN]U:l0?iUio+-IC'H>.UX>Qc?N8d^1Uam+q3;M$ej-AsJo.#jP/)8ST]dr*cDi3qOODsrD%c26/Mp3Z1Zg@54@?s^tr8jN&H_C1asUZ@E(I;DL>)"3ehHTj\%BPFh/LaiX&8E6EtXZ*41=a$b"%\7itJ@W#0K*-i5Mu7?VWg9R6e:6QBgCY/M5;]&Hs5Z/jI\Ja[1'TG)fh*V)02c9@)meW+X`bF+h)2R?BCHr[qZ"\?YA]JVq^gQ0X/[ZpFRB">rT"hN:k?l<)q,@s&__\6h;>u+uC6/BQ.g.q[9sANS_jYhqBUom!Q3lQil-CI>[FoXEV\_YEk:WR<)4Y4s%3\]`I4)kJA(O?&VpGu:U@Cl`OfEs@!fll)aM^pV1+FtD=dAZS#,e)I5Q2GJ$*kK6*]&=%Ii="3*L$0@AA&&S!+%YVb3Pr9ghoSo[l3tQTJ7;Pg8i`Qeq#ie`K4"jqcLV=XR&K[C%cm/PAam?p^7H>>_rLg7%cf=*_]IlHHt`rH3%LN,R2i:GaC-3HVb.FpW;+2%WR*#F^+=nh`'lMCV<"`]VkY8_i<]JdE'+1Ui#YAtEpZ@*`K-_fn\A!(=/$6]5iG&PkR^*$MB>Wlq!fql@46SPVo=^l"i":>OBNc:6h03a'gKe''@Rg*g]~>endstream +endobj +38 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1469 +>> +stream +Gb"/h?$"^h'Sc)P'g'k`2_u(np?ZG[dPg?se*44gan0bkAT>G[`?Co_P"]P4&NlUhNQA[FutMNMK0fErS!C5#5g*5u>X-:c'F",g/`9=/0"V`:CZ]m'@eqf<@s<@aoF=$=9XlRe,j?b%&=8/$`'m[5jS=3B(moFQS8D"Lkj(Q'g7_tOW=';#D8OY4;g`Q(rhM)0Lp.CP/@YRLO%N8Gs4$'Ygstb?keEIg7kl<6Ro'9>j5)[,;?b1?pN!B!!`6Q0JG-R"UfP;M4L#9C?4EXc1E4A@N.(oJ)3=JDkIBGl-qZ0$ipDf^s9,0lf,-G8@4Y=8.&oa)n\g3iqFX[itBA<=Mh;i'HhMY>"`3*=#aN:_rNe7W^&urMm.?#j?S:-BS)6OO^$sN\fV-rFGqk`$0*=[q%4l&TLcE>\nDY>@ogX3aq]kmd=;SL)^"a8*6@_Yb5dD%OMgKmW";C6o'ef`@0ZpW]<(5VkIf,E`XW:SfPa]sWVj-klh+Fl]D6s1iDL&`@m_#)3bS81_5;o4X;#~>endstream +endobj +39 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1390 +>> +stream +Gb"/hgN)%,&;KZH'U\-ERi,*((5kQJH:U*aF?3-rA9nUpTWLVf&rF&t[gtlr,3_Y*`%Zs-P-"hr,SiVKbPaD.KZ65WIV*XfI\)YkF%-uoPFO=h$8VF@4I_;dO%Kd-N0Y6.G`F!Zp1qqoTgdH0L?+Fl49$AKh2Ym_n-188?@nW[eXm31%5.=mJBpS3t:g]-#dC4!fUK-!5^U,RM!9c&DXBHVVZh0O*"Z0//[;UW"=$C_qOASF.NGCH#+rR`Q73'I.S6&LDp7b<..pR>#0A:,hh,&CR2Q/q%FUJrDIWMXE::KD;Va?QMP2NQ>Xn;BF;K*DoZ=)*H,!Tl=QdQ%=24dhb_:dgIkKs1JD-D"BPHti\V,UeM/Y'm%\u]bD?Jua:oE"'0T/SW'U#j7--H7QIAh_2HZIY?KhrtSsfBkPB(O7d8!lRl"VJ3:e7l?Fd8f'4%BH+5D?E@pd2EM?C%gnF+HYh*(NS((pAPn&=-s6/&=3s+`pBpa8p%kqHZ(p#0D3-)CKVWk-^ac2:T!lqphoG27logU+"m#SrUiM2`L!oFEt8D(58;G@Sj0-5+kpAi9XO<0$heM:Y93!P(n*L%m0ZGH1h%U^qh^7O6"Vf\^j8>?F[KQq_)d??\pRpf2m@;qo\b@Q9!F;3qGpQn^-*R<-Y(T0\R]KA@:gn-J6:7'EO'7Y(ZcOQKeW5iXmPN;'$p+b54f:St0#gD/;@(L)<:*8.;;)!M)_'\kK:%0MM@ZS\RBGLQmOF0IC2]9_m^+bs1])FZ]q[cGe%$<8;S[ZCQ+Uk"a3C'/At"d_T>"#)n=3UDh*XWu-EM&]:ODu_nK%3k?EKZ'SCM,8eqaPfMsO-CXH*ZkbLGcu_.hG\#k`],hJ>7hBb/TMZ/49<>E!![%S!+=^q"+sII+*$$43,O+d"%-[:"9p;L@_p_'%,i=:3,O-B5;ka?">QE)5JGOiO22V3j38+Me)n\\f_eRI#)3%E!XEOjR"L7VlTFV0HWh8ZHM;YdfN.I6A?=Y=MaV47,m(G6TR-?(c_66jnL8e"_u=)T3Z-P6d0IC@B70~>endstream +endobj +40 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1399 +>> +stream +Gb"/hhf%7-&BE],S"fIKNjM-E&Z*@4kfqpKXu8V+"^RaH;5SCijD,0tH\hY.\P':++BqDHJ'q0>r^\@XaQ1>*lLQi.Fh(nECCi`V!9K`-jF9S"@bMrMr4]f\?):EH&s.uC#*reOO_#fWM\.g5UZCM+qnjOi%cU:olLlLQc9^9XdWIVUZ$!kHOt*s.%+Z;)"=9>61jg?A5rQKIEV1Uq?_qoC#)HDVUK=dPTP.kVQtFXcfrN)>*j<^9moeDX/jlrVS8l-C)iBXDjp/%0X,UKCn9aje]%a`j[m2_>:UlABA'E'^e<0KhQR&fPGd"M/kcK_9#NpA__KfW.oA'6.';":oQkh5d<5Jcs;6'8m(^nM0Dr!\AXb7#8,@/Bi['39VjSi*5k,N:QT<$-)mT`au>KOIjFM&h4Y53ggW/u^FbF!_\$$b(UYBP2UT^<$K'5DpOd6KDos/o54Kj[AcLnM"gqVYCCuKDta4W;Kk']a5!sb>M#L%77.N%(f2_s*;i&sSG*!@S(0k6G>V1q;82r`E8k&aR:FqV$6+WXR;mgBuJZ6K@erd0+[86GCe@'I8Nrs<)s,NDDh!!_5\rS=%FH?f;4^gR#;kV7V(*3Pr=@$!j3$m"JuF5Si*FEe9LoFZqT!Q3k_nbV,u0!F&h\Fafk4l+Y?WX5KrVSph!gil`DFL?UK?Xf@c/^H_6^6h.F036&"#.'0ipY\,75#'a,%Qh'A:5^V6;Xb:gO,t%fnRB-"J'5;'8E!F)PUS*7Dh\I$J[YHPmgj&]d7&9b,UQrSTpN"$(Ie6VP0?nH,Z5U37C]I+DWD5RmlVr"$p.KYI?i9%^up+IJ&7WB;*gWDZbWiE[l0!":4T$m9:*mgfih;?"Z#$Q_E^ec~>endstream +endobj +41 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1437 +>> +stream +Gb"/hD3N[3&BE]".5]L4f?Dl\[B$4Cg#t",4^4J*RDu4$(H_q^!h&-6'6'*3%s"_\2T.e/T3i%F;D0O;8sN&0Q=YS_*a/;TO;jlb!rMooZ'2UX410E5Wn'c2_`X(Hi!HZ@-bs#Zpj-](.9.(OZ.dJdB4a<_*sT8`&'p#;gCl>EKl?`!R99un=(;g&+>LE"is'\sqXq$V=2E.M[WS\;d0:*V3]S\1okXN8=/^DXOH.@h$D/ag9Lbk7R<.(o'NE1CLqGFg8@$En<+S-^7EhUa9)Zj`j4.sp^QI9Xn!@6=5=4drJ!P)'j!N!HQi"aHd@s?m>]rslE\_[9DDn'*S)m[U_n9=r[>ImE[(V@b2U:nuA/Y:!?Ut,K#'N(Om*4`S"62KZ5fe6CAW20I7EuHi:r3$\Y)O?o>XKgf$lO8qpds4RU)&j?7t+gSe$U#GB`lMGlD]fS1WPBpTs+g*)GS`Mo"<#Oc/qk&$)nY&0u2uS@BEEA]+lf_HeaR:Pbe;iK"j\ei_K;r[n)`*TX$E6aL%WlG7M[?MuY#[:FJ]opfpC7VYZM?WDf]),dLjUafJ&UfM'"L4QdfjL/YkXi^VQ")JFZI[mSP?g\+%d^0%/I1mtLk)D8%Z_"]LQHT*6ppc:L4(\0K_T!0+4HrBqlp;u00rEcjZlM+,]3!d[*#aeaiM+D*U9Eu,#(\g$/OW4m>J%GO!bQSdAA=Ug:I>]qFh\8Ub[C$$lfEEPO`'TWM?6SmV(1]c^1tl.MGQFIN;j*Z7"\KCECc!RSU]\\^+;O5+F#PJ]bQWtjmKg5nZ(.J+B)A-4:A(+HIr^o]mZO@#mEOon>ThoS1U09_#bW[ERn*"F(rccKg14_6NZ+pUQ6-\n95cBKM*Z30'(^0@B!5ndtq8O#.kVka&c&VsW!OY_=TKQgSn0'#JZ/>J(P+*QNN#;E9O8nJ,a2rqjh#&i-[=s)$iuBsA;APdQ8G6t]DUCtWrD:7^d4\q8'+&ZON(D"5`%j1rfDQ?%;d@1i>sK$ui[#0R;\i77F@E2t_+JTS\eh2I`MOtbdQBq%.IP<0EE09N7++E?FAG)a-&cp!r89b"10j&T$?(XFW">3PJEcfAWCh7f6ta]7*7tp/b@#ru-Y<`g~>endstream +endobj +42 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1049 +>> +stream +Gb"/%gN)%,&:N/3lqCbccOe$(EV3PbfU6>4S^q@-IH:X>Pt72kdrt]aKd9SB?&H'-:""g\64,]j*ZaU1HOtFHj5u^^!8\t4T-L"ZU]coU6LlXs-'Q(k)aj\s%3hD+_^n!*d#?$q97XPN"j$hCBRYWq'-nskX8`HFlH9?DBLi[_@i6I,JNpqt"0X?3OZA5?XS?&grn*ZgqGUCrB%^JOiuKH?g9>h?<\SYSujFGlmHqlhMaRo^qEqg"de#e.>jYj3ED*CD#<7=d)0/R\G6__5rooL<-Q5M8MdCf?$FEIU:)XOq!QWg*CtApL22[ZSdfNiYiA,YdF2-p5g,mO^4)>)\P8`0>&5rg[$gEk-MOamJ*bjm'\ZVcW*=,jWu]O.-Je>@Sg?2-6)@eU-?r0:Xbr3J'7I[7jkj:hrtGpt%C>@pJDP\(eBi=raB;27Y1recQjSI8Ol0WK]NUfp##eGs^lC4OZI>!NqT5hM/6&4SOmg[feK]s!K44G%"'0,k,DoNK/jqKr5ML1*apf6W*YOSukBR#,JZdh`r-4/RoW__B`\46XsDUaG2cFKUS.Jd:ULZg9Q(@8)kERUJ1g;4RS`q:0UKLGTtlDeFKZTK7T9hpa@hMYgaA"rc$)O5Ll=n2endstream +endobj +xref +0 43 +0000000000 65535 f +0000000073 00000 n +0000000134 00000 n +0000000241 00000 n +0000000350 00000 n +0000000462 00000 n +0000000667 00000 n +0000000786 00000 n +0000000991 00000 n +0000001196 00000 n +0000001401 00000 n +0000001607 00000 n +0000001813 00000 n +0000002019 00000 n +0000002225 00000 n +0000002431 00000 n +0000002637 00000 n +0000002843 00000 n +0000003049 00000 n +0000003255 00000 n +0000003461 00000 n +0000003667 00000 n +0000003873 00000 n +0000004079 00000 n +0000004149 00000 n +0000004433 00000 n +0000004606 00000 n +0000006289 00000 n +0000008501 00000 n +0000009864 00000 n +0000011100 00000 n +0000012458 00000 n +0000013785 00000 n +0000015063 00000 n +0000016495 00000 n +0000018034 00000 n +0000019565 00000 n +0000021123 00000 n +0000022589 00000 n +0000024150 00000 n +0000025632 00000 n +0000027123 00000 n +0000028652 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 24 0 R +/Root 23 0 R +/Size 43 +>> +startxref +29793 +%%EOF diff --git a/tests/reportlab_testoutputs/to_delete1.json.pdf b/tests/reportlab_testoutputs/to_delete1.json.pdf new file mode 100644 index 0000000..bd29590 --- /dev/null +++ b/tests/reportlab_testoutputs/to_delete1.json.pdf @@ -0,0 +1,391 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 26 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +7 0 obj +<< +/Contents 27 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/Contents 28 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +9 0 obj +<< +/Contents 29 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +10 0 obj +<< +/Contents 30 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +11 0 obj +<< +/Contents 31 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +12 0 obj +<< +/Contents 32 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +13 0 obj +<< +/Contents 33 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +14 0 obj +<< +/Contents 34 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +15 0 obj +<< +/Contents 35 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +16 0 obj +<< +/Contents 36 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +17 0 obj +<< +/Contents 37 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +18 0 obj +<< +/Contents 38 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +19 0 obj +<< +/Contents 39 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +20 0 obj +<< +/Contents 40 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +21 0 obj +<< +/Contents 41 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +22 0 obj +<< +/Contents 42 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 25 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +23 0 obj +<< +/PageMode /UseNone /Pages 25 0 R /Type /Catalog +>> +endobj +24 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20190221153230-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190221153230-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +25 0 obj +<< +/Count 17 /Kids [ 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R + 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R ] /Type /Pages +>> +endobj +26 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1591 +>> +stream +Gb!;d9lJcG&A@C2&D;s\5V.[4,%[F&2JJ(#]#ejM*Z!s.Od/=gChI<,7fWFIAp"u9;'T8T]Ns'GCf@L&0>e+4W)bBbi+SQ5D'[g77egONb+ONT`%`a8MM[S9+:+.F4cQE!=t1Zlhf`[B%M*sg'Vs%h'IJ:#ote"[5tOg2F#Z=9JE=N$$k-br08a-bI.l]SXHO:7KS@R7RG`-.$CsI82+r^0I2_XGOj/+-HmHcs>lBi1J=uM[^a$6tIoBZRh*HaCHjL61IZ)^I@'39bj.=@(-A^\B,19RPq'+!D!#LgCug#MLFq^3i"_Vubeb@Z`KJWj-E-KEG(CTST56gN!2fhr#Ym#n=3*,:'\m@i=/8?_V.P/#H2ghp2e;>XSl"IO1I<>+<$%##KM;Bb(q5mX&_:/so!NImM&D@o;[#;fQjWZ^eUU""4k_&]PGIGqJ(BjdjMI]&!b1h[#<$arjGt'/RG"l[@k0Zqc;Fkc2CrWmb^cEa0);J2)UVjn)Gn1Dp,Zk1cZ$n[uVp:EY"0SleN,iDgnMoXXIIuqa>b5i974W<55IED]\8ArE'[q4eka,fk[_2j^W7e^qd=^i^*Hu%k7-AcfBYmp,&.(56oGkKOkP7m4\\=7ekIKj(V[hnAnGR<$53r+2@Cj-*]tJ=)odLYrD01\*OUP%Uq+2q.dQ?6t0RtuZ)3A\P5iKVo`0A06NfR-P]EGG?0+_1F7DaqP0AVl;7U`QNNDLUe#'jA7e[/TDjW"dREF*5BFa73Rm>]5WPJusKFRi@]MQs`!VHMW<.1j`3lP*Af/Y7k7,W'Y+!d%ui.6Oo)+B"cGO&RLt,LqYI8D,G]86N%oCSY"sEk.U@=-%K1`(foNF)k3]mc'#PH8?6W)l;H^o.@8)6WFqmKREb9;6@nt][p?ZG7dSNOmDK@b?(u)Ve#7rHmL:a9(l<.=0aTZAFH.<,qF%/p85r5Z8/=gn!&2G/$hk9p;g0Q199L(M**(3ZV'XTaA[+7X5kmZ4=)A]9$Ha8Xgj3d\%=fOp~>endstream +endobj +27 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2120 +>> +stream +Gb"/)gN)%,&:N/3m'Mro2e1:GnWoS,36l*`8Rg:KqW&HKKIk-U-mW>'J):DU;PYnf'((XIes7u=@^-.C$XaJo;]tk0eaG0qGWg_TG8)HXi>AMt"UmW4gYq)fTP@n#8_([YG-o[t#iG?dn+[kN[CNi"@1!8+2].!riCi5/-\eV6)6p0])$e1q2Pl'M4>rD'\[ZG\-6Q!\UN[PY<9V%^5<.6*Lds8'apuF'']Ir-_NlUE@GaM)?ci7+_KB\@URo<,".+8HJ=D$#2oAsn]:()7\@+bL!#FZm-lB]=fKSn[6fI1boV6J5W^:B$LFq%oi*15HK(r0g'j;)2q)KgHI_d;P\20HC/]m4@>l8D_:Pk4hUFQn\o"oS9F8,-jkYXJ]Td/Ig;6$m,a!Y:Pf6-FZ,ClDZ@"<7Q>i663$_stN:1"[QoX#m2WqL^XD+:tXY03Sd89;?hbCdGKKZ9KrEHR.*4t]eE(o9XC'uW5Qfhj#>/Y$5f?j@e-F4Jk:?10CfFGRL%C@Hc:Wlg07tiFX/AauW1JR+R^]O?<91*$OHS5hGE;)>j/F:E67tP;:Rr\+S,=X5F=(gQDTo3lDMq'0q;!QbcO+i?TJo?#Ub8+\".r&Jhe-0_Gf5ht[(e!1A*7UhckK)WGP;FUYCf?iDBL5T1F+o>"iHc?JJo5OpTi-(^leirWBttC0ZQ<:u_4\b!*)$R??f"E;10.T3c"iY>Z;h8'1=#Nm17o;TZ8?IlhgZLiq5#sn9DqMI>LlBG8SamP5Odjj^_SPOH!i_7jLB1.IUIL4be$k9?.Z7!QGAi)4`38;[b@^[]Ig&$<]`/r[cQ#kC+$U/M;E=um8d,Qn'WaLBJ`A#D+*jE7ND/bi105.N@8FoNnZptQplL;f6^>NgD;`WXiNX!$+(:UX,20AD:F9s>8rQU73WXR67QI?!TB>`6Eu/$U*Sqqqm!M*G6gE()[-b8^(8da6!rl7iZL\GYcY:]T0OI&%Fi+decETp,"l%=(m':5#E8MAAeW?E:)5Nb(Q>V7"dr'3#N,#l-*[PYM+/d/K`jjgJ^-Pr/]0)=PVA`j0ImlcR:W9c1Y'>/[7,g2^5hm'%&O=i;C[;I%qd3kLfst97*/=OCW[0-iC,G`-+;nQUe8g$C'j"'..ULV`S"f9X3=KGq&&`l_$MV&E=<$[)-&("^&jf2P`!Nu0+`]e0LUD\O!`.e53-gCNYTl_O>s;Xcf68P/FfEc"S\\ujAmKokK"M&9p-$ec?Y-Vis85riu#>b.>^+Xqb0:)dqPOqZn\imV+*q)8Maiu@I$l.BM$cZT%F1,G(SD=_Z\3J-q<-<8j494"E+7O=ScR4`O/+]A[O;!B.a"e;*2`(133H+5,K\7CJL,jl',\lRESZR2>%1HAXS)9R%\7\($]=$doA:.Dt58Y7+EXhmXuiNNX;R\UZ56Q:ebYoCm=A@=0"mocVS/+nCQ;K"C%>8>bu7QT/dYjGEE)Q-aD[[h/;m1aB`r4u+Ps2[g'Gtt--HRj5^^J\]4m&JQ@Vh\H!=:]OlmY(:'@_M13pngf5*%-d<7/FM"hH+tm_R!q>U%7=U[sWt)nePcCKCTfE#rT3EqE06Ph(t9nEN,5N'e'n_RDiaKmBKsd6s@2,hLf%+0!Ec6gMKilqngC8f6%&iU),2TT0Afp5!(uWIt%=[h1q&0^V%(d-rk7-LT8"sfYWh:V\RT]Q!E<$Pt,GF5cu1'eZ-R=L`b(Xc^X+/7G=DF5_Et>YeG2NmH#-*"S+8>,?4@jCLO+GaX<42="nT=ap$X"aSb@,3&Tj`SEDsJ#AJ%4anGW8U;@@9dL+E1B3`8Uub66_O;+;>sendstream +endobj +28 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1271 +>> +stream +Gb"/gh/AcR&A[3%=,_7$PcM`grIfUCV9*"i:$#VNqn`^_91$gWMok)Od_Gb3FtcbGfZ&q$2dg..41dR9_p&#](ejnEoA:YopqqYA(Dnh,-N_L'"6TcV4/6_h\V'r@k7[@8YC#fg&iR%pc#!e),*#\0'3ocmu\MfB.i?AmQ8VIra5PRGE(.`!5S'FLSd,:%tWfaN>B5#&o=8\20oABqZXLK"Jec)UN;:Pnj_F5KHC^uDtn-1n?`=8psJ,T?)dWMbbW-n(Ajgpdu:ukR2FPY8_(?Q-+f0-`!$C-mK<&'C(b]V83Rj<9Q$9diQ,tYMfPD_O0ob]h8:X_FYld@<+qap+6?F>/Lq`"p-0'Ue]Nd!RerR@"4pClq7;l-k_ViNj&%8DhYhs9mW#Vi"`$P95B"-A%_rZ!)>_a>/sBcUB8I8"U.C%/HZET0;;g!!.Biu4VIpX]#NN^#i90J7*3q^(jajZ1fhUXpInA;bVID("9sd[D+KM__3@G9f:CQQ3YIq(*iA3VDJ&U1=/t#fG[-]lQEN6V;SIdoj&p5gQ7<7VUainGZ?Vg]'eXKVb4R_k]2u/\$GY#t6J[)jNuc4[)mR\+%Sj)+E-dC9lr6B]/>`$W-i4BnQrWb!7\%`pS"1m1/0pj)h,jcon^r&TjAhV+,kNX6[nAb-FjpZW06p_YY?^i!kF5&A6Ne^gf7?t\RbJs>DCoSQ_AKI27U$_)29&/p@mh<"Vp=)+Q\4Z)=Ld@_$Q'JV@9O2jMfC?'Q;gX";aj'/bem&Y'f_'jKA^aJ^b@@Cmbt&^GK^r2TfC4lE']=:`aEiZK4-`L$IaT-"FZc=+\->KB:gnF'f7@IJ;XIc?HUc]F7=FnY>LrEh^p_')%LaEehdBendstream +endobj +29 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1144 +>> +stream +Gb"/i?#S1G'Sc)J.uqQm5`5)Ei`u%+&4-ddDAY]XiiI]Sl.U6Us.7\UC"&&p-:D>/d^9\JEI#ZqO.HF0Sk9O,%9s^?4ED4-]`4S1lq.lqfnH5:SEU\>%n"r&[B'%_$#eZ@i5,o_39$)A"9F[bpd)8hu].].n2PA4%+-s.L%ihB4oLMN`$jMnqa"a!1+"Z=br\0,k.b9-/dKI4[^f-h5f0#XME4:_)ZJi95m:lrcAR'kMT5j7t0hf7?dgnl73YbCAttAQD\mqIipie3jl$EH5d&R^Y\hTL"Lc,hkn-YaX9?>._')ZjParBuS3HSstS=8V_S.d\2=EJ!8.o1L?=:fa1^B;^aTGkNgW.U[Q["]hHknI(]n*p"f+k"8`%n)9I",I2ShDiGTYUiI[ZJERR)T1aT84io1('-7M;?0oi!7NG%YZ1g>q**&A+'5rsH>qi'^1udQ\\bVqZ&=VRG7EjQ,^Oo!U$eWjbtOggFJ<6VUs"kd$:AGea!@)=J*9X6^f[DOmM;QFYLl"#CC]Zk7?gaTXnFYpcYeC=mg7haHlms0+k+^)0CKlutgd5Y?nL&f]GU)Qs;$LGl7c\LZC@YiQ(rBk>X3*W9/DFR@JZ$X7KNcK;Q?F7?g5s(;GZD_cXFhZ~>endstream +endobj +30 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1266 +>> +stream +Gb"/iD/\/e&BE]*;\7S#YCK^rmmrQo]8$k8L10?%^#tTb'QLd_DM*?6;0HJARH<(i4#DY]-oQ>rO+3UB57.uVOagd12_5jDDS]Yn"pU5B.L*hJ/Uh7q/nXQb)iJ5L2AZ*bT53Co#f@)iAWQq3X?Wu/P0MOdD"3N;?IXrfnh*S]#+Y\Oe$U0<:XV^2uNGpG4GTp358lD,QQKC24km1j4B^0P/%4kjl4!Va^>@*ol23"K='33SfBgaX1L;PSfBeu<]*WNBRf1Y#NK,0K)M@8)MbWl`_"Q#[B!Zo@7*2PXg4e'HeZ8B>p<%ki-h\#5_=)+$Lr^VV-Us)OP>^i9FP)e_,8glLoZS[r3@SWt34r?Fdh_qs0N*/>ha6:T=#t7iL&8dNg38>%t&!1>T$9ANfXhZGuVFb2+D1"n>B-.!^l*d\H/Ws*$LeH_8TZ%t?U=L,3)K/0>U>T:`B7O.pBC?RI9pY"LI7#1l\`;d#ks![LWphubd^B?FaJ)^J?r"#J6"ecZb%l*0A5#2$Jpcn!WU!g1[s9cc$sLeIV@a@`;daQa&Go%19/4'ORN2ud)>rsaFB`Ts!@4XN!nj#:l#gcPTopNcYmikJW:muTtO!a[mh'4;:ImaOd/UXp]$aD,msA(nS[@d1Z:bit^DoEF[eKg`dJV$><$$:ok-1c`$s5M:24juTo(9T-"0;gF']aZn>YLiaK]WQUNd?`L>_!jb.+&?O*L!YO`7NHoefh[IQaendstream +endobj +31 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1235 +>> +stream +Gb"/igQ(#H&;KZP'Ei`g%3UDC)4iJ06])XJd7p1go=.N!c8HUh`P-b7n&gel>HqH9M[em&Chc@urh3pf8N&8"T'Ln$Ef3t$A,mTNhq3=m0(cVhrg(g$XZ!np_t7/+_82d4VFYb.+fkJX\'g?>pA*n=ea-T/7@Kpu>R>MR"(\m/Q"Mo@ZnRfukFW9U&4`:ekW;Lc!o2m/XS9DGdRS"5(5'-^(YNBt@F_s4CbS(P^XmdJq$YM6LfK/jDh#iP%,pQ!;kqHpE[np9ib0/(lL4C)i]!QW_>EWh`OCukNYYC`3!5JOr"NLR]cM%D`lq.6*lPM*=2Cie+X*":-.W'Lmsn84smNB;Oq3;87/g\N#.S+sM8dg%ADgNh>.&-hk(h[N'Q2%K/qJ^R]@JBfCu$>WiqUm+"lfDA;uGcah#V$ak-%roirgA>lWe!*]XE$t?kUXB/csW'Vce2RR9OpVh/uq^-\qB(h4;]b@nq7+)O`B=a+*[BoX%f+B6'W*%35i9:Qu7WVH^!=ikcT%C/qraD<[,MW4akoCk.50=9%ZHjOo*U?%L0$&P`Kd*$"8V/?(F[F7bU`s[kMXUL!?esMoD<,ThpWM*Nq6O#fn,DbO`[@)Cop\a&n@:n)\Po:q:0%hPDAJ0.DE0-"1@J;qq`[@"X6cl0rX#L&H@tp$6/+uH@RQ$?*&n1c@]5qX.:UjTTuWs*U\Uh1i=h2nPIF"o*C29k?E95Kg:g:W,11t-rXkrOqr$R&.i4o1Frt/f%J)gP0r"$>78)!4QK+AtkMiIars,I'AiP3l>,"7,e7\k>A=;O[U04Fr\1ao!#,#8eqar2DGAEu+e7^M'g'Iq&#A8M0n.f>W6T7R%>;gm[3S8.t?r',`37VU84ER["2TVFiQn\=V/nc(`LpXp9X2NtO0Q4ura!WbZ2-VP/Qk`W$`,XQ[rAqNW\7VN=JE!JY^S/_LC!rdgqBAc"&RK(:0rD;O(j8Ut9'?5@sDh[M)p8T?:Z15U!^[_=dr.boK2bIXc]Yl(2F`s0>'L_/ebRbpZY@Aj\BQU5F(haHQN*mendstream +endobj +32 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1186 +>> +stream +Gb"/hbAJ7X'Sc@.$3K%^!G92iiGFuh;R@k+-;h?%3M`-0Z5Z;/iO:HdHShKcOtAtX`1X9N3@'+QkCEJB+:th@@Jq&[6MrMNcX28('XK?@>8FR&`Qtm4LWMT/!ouCopZK_&\=^XHQE7A;!*WPHM:k3hc1b]@?Hf"C3km/noY",1?jK?&eIb>'nrqY!@0PZ^n*>nRAJo&UOOC7oj?s(qY*6rQ-EYbF=;INYh[`V&kFf^bXA;Y:)@]%/3$k5'8ogK!d\X.fG1MF*8tjk)q_2_]gqE,F%36?h(#o$^&p?-h=j97^.Ruq1bhJ!=O+*KLY-)^?=uG()Fm6ob!t"A+e@kYPpO9(M,N\/srcWbP440o#]2*.fr'I2Y_4>$E>IJ:NG-tGJbN7Yu/%jbBYC2)1f?"grm3ar&M=_+?(q-G%]DX[*r+sFIqrrfqnFQ/lO%LKJ"0PY%fT@a8Za',2TAPV*C^'S1JV/FD%Qi'0NCkP^3O1DD;^)>%;FlnTLW%#sPVR@+W(`M),\5%M9@s3VWKT4].dn7TlRtFC?eqK8qo=t(Ng*"3s&S"F-S=ZT0VVRSHAGU[f=t!_UVqZ\?G%+uY0rbs2uS1e$C"R5.!t5-:g/:?bWZAuu:tI)Z".0FnpIK+'IR%Oifad3;**3G2&@5Zql1Ce36AcPAQW<:lIgR,j"n`^@`C*NMZ./Zg)1h['8(Qo"6h4Nr;^](3W,rt5/fg2Os$EoWE`ALE_Ro)BZgs-oM$5HgiS=8[Q-pc$J!\Y.=%/u"EJBO$KW;AY]VV_"#j2C0"F6BFAXZFR:Slj!GdJZj:n:BCKojVdQ++3$NY=7KYfrs8P/=12O+Wc?=L,8X%mJ&QoVs&nj+\t?GYVqctK&Y/"6"[U(76J#dL&Td4MG>[N/QDMi6Ue\4#,]&Vt"Vn9$rs@U*R*L53pFuR]Y'%86^Z,8Irj>P`mN4PJAbX#q$#RY2`IGl,=n#cf!Tmc,A$Ql5A=4R=@$OVm8mdlhY[,:0>-!)D5%1l<9=M.!5D:(W`W$Ue5O*gB-f]^O;s6Dp@e)`Y**2&~>endstream +endobj +33 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1340 +>> +stream +Gb"/g?#SIU'Sc)T.gYJg.j1.5LS)35\olXZFN`qb];8%JEGHr(j.sc20C;/neB,!JW9YEO?ab&%^-4XnTD&Ho9AcuLlPG6P1aUIT!Wc&n"T^mmRJoL$R8,q@2A&]7D'JoJHo_Xr6PsRb8:q%qiqa[`0$'IVSkS%(l*L'%k@p=SC*8oLAL,7$#rPrq$09:]a."o(]r>4-g)`jQoh[uVh8IuT8q:bNCbrK`P-Tng;H7e1-:P)8qrh87TQKo0,F(mb[o\&3]pj4VKWYuruotFj["SMKo\dfk0e7K3g'M:HTbu"EiHP4]QNi#>!@r(mX1Z`+4ZMaRck<8b?=7X$is?"_&Aq-:uGo2d"%h4\O:A#;I6.n4+K2sr+p#_+Laer:T*13;tUM@d=df1\]pE[@H?fX%9rlfXVd+6>5&.rt589i'4bFPDQ5rbiLTUn#RN!5N712ruh+2\b=5`TOm,tErap%["ukFA2,F`jgI_R5]^_8#a"6#1$o>0`7=p]/U5mR39's;n;g0MJ:G9Ts4eTQIr0Ks=g`U24nrsi%,FP.mMWU$Ge7V`b4o'#)r\OG4rXHTc]hl_p&)XN6.Q&1BnLscU_*d0g*q+8Y`RUmPja6"bC3DO?FlL0&ZPa&K`uCKa]6Ao"*;$Kk6\(dNmpfrOZ>d/8!e2j>oC]BGRLQL.dgJNcOoRY^qZ/Nr7[ktoujqF#1]uQ3c@icX!-HHjUgq$rU:#Fs7>+Gd#RsUi-f(JHOM7K>)%W?69CB6D.FuHdu9('EjPXM6r1F=QbAj*rrh4rm:"\\PDoG"0;F"="1am]nojj3g#"i.42d[QjM'48PRPFRV<_=8-Y3fdZ(-b.'e9P='[MD1dP1&3((=\@OmAt=BH.6EqS.l,!7V)f#I3/G#dr%lUN%-16aq%`dUn]">XIS3;OK4DNQ,B`%StP5/:r7!^-N!2B^:labG-f&jkb@B#$=iTgl?jBeGKB9Hj5TrO/i~>endstream +endobj +34 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1447 +>> +stream +Gb"/i>BALf'Z],,'Kab[RMgrFBCC-3-0_eckq+10fA5!"-39<^CtIRY$au/XJ,i#U)io@IUa,9!^Wo..-S7Ssr.XO5?P)eqPY>Bc!@6-a!)GVCr_-Wm7t6N,&L9WN&U[\&f>>E:3n6n3bm6SW2Qt2D6,r&&14;rq0/adL*eu2R7[epXqnL1N:#J4EN9JM/C,6'L'Ej>7ESQM3hnK'Zq_GiV1\ODKJO6q"6JYgAV(0toa268dC$-+G%8XKS+Yc!1KM.V0bQ;o*%[L6kVGFefPW-eL>>p\(L_GtkJYAq]Cg!ri_N2qM-GY'fl-O?`\Tn/jtdDJ#3IS%^0).8P@%8l00&"]1Wk_jE:%BF%MYndUVMa]W3j)BF&,c5B9?c)'OGjI!Cr0.+;rID$DnG992clqaX6;YZ23R*Vp!Zrd@X.J94..+HPd4$13[\S20W]7F!Aq\"B]'Hbp[-^3<>g[o*d\m?2r_Tl)p>YO_A4A:b^J!YN8T);1UWL88:.MQMp9\LtjLOu`HlgkMDm!AG<8W&s7DZ=uR0$VM-Z9d%CEN'Ab-r(Cb63baoF7":^(N\4l*8)`!M%i!$q+pO>+dO"VNDu!6K\IBibqE""(6)k_&a]k)"XWFZPr`!$nC[(Ed-HpJD3$@K]\&4<;OBJ>t`=j1?hUhYN$MQa+Bs%(i?cpBQD^F]W_d5p;%tu5*rE*D-L"--a\2G)VOFF;6I=NKZlb01oS2`VDq(9OYW!.P"8SjDub[j-ERLl*T_,J^;Z2M_EGTA[MPl2_mSEH"/q#B1Nqi<4+]3TCDV8g_gjQZ-BN!"K)j4ATouA;BUTIpq-:\^,dMpS\0/P%mQOKh)\WE/QHe""ub=?9k;Ln:EjL$\14\HjheQ-h)_,(jSFEOD+8*EnFWr$o9!OAEMq0!/=qEj*s,]d9H0+SbYMjAj2g(b_NaDXh[.38Bc&r@8I9$F'IU&+SgUCJTncBqJ8i=D_4Jn+Mk!P\3cOLG\2cI!;$CfkgUOI_LrEdiJcLu*Ets.P]2)XBVU5?,%0gQ7j#*m5WK;3K[W8DS5RP2:4Z/Q):-"IdX#[2k#u6LhD(Ao[YsZ>H9ruMk\E*9["`PhHLpAsmpu&$Vi%1<~>endstream +endobj +35 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1439 +>> +stream +Gb"/igN)%,&;KZH'U\-ERi,*(G&bZ1%nW[i:0TYLVRJP4<[(\'/B@;8(QqIS9I3kOfqe=B8h:4-?%#eft-g$C8WW.C!IE3+@=5@1!5^[;/RXZ)Th1"bDXbJWl67b+`frcOGj3C7T)>fjdI\6N-tVQ?R_8p;i,B%,8DXPDT5ZsB6qboTm[d>S8;Qe>#g-4X[=,D"JXM-W-'%MF"UF4QeDo0m#@Rl`:?T4:#kBSe5$OK/Dm&@HdDA;rMNk#F*hM8E7&V6,"D"6JOkDJc3+h(UJm%#lO-[O?9)rB$XLV\\M15qG@E5.X(WH\_pQ?C_>^kcX.#qie%_^QgJNtd4VZ!AX_U9:.F."iJ1Q4q:(0/FPCJ&l.e7mJh*D#$1<.Mu9n:P#cMoG7)(N.]N3*b.*5C:o7C*!"ukj]cT&8TWT8,s1?mc&fA+6dhp%+`3JKBGdBtr0P'H*.$Os_\;jk&TD_@0:;^drr=]o;/n$Hn,i$ErcV';*Ba:9?I2tGZk$KiV[M^K(Ne#\(S%e!jW$$43Zc0H>stDG?8u4=?@5qqj])pnRm-8CVu*?aZ2qeV.PS46pO<;MkTmJt!!AaoZErfG]/F+PS\"e.0Z1Vb^Kdnt?U#WnDf9RcO4348okLb;ZeR4rj'k'-j5)hH>\;6J#tBV85W'U5A1O6/m5Gc(W!6S,$85ol04]bQfJ$]EJ-L2toEceuQl^d257Ag-la0G(cb?4JoFsIN*l/Zlb7PWj%1bpfA,~>endstream +endobj +36 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1466 +>> +stream +Gb"/hD0$US&BE]".5]L4DJ&=`8unl&CX]*.:8b3-P3H1B-eTb-,_5:WgK/od]5up>2l)9N0K-XL:m57^%gY2f)LlKR%+3T8-\P)i7[\Wk@pIWm>U2#39*C\R0-9Or:b4VWR=?*^WnHXPB<(SKF=1UaplH0-*okrZX0f&6360HleP!3^Bf(0;7e4$4*Uh@bnF@dSDI0+[[Fr],;c5@(X"X_lK*u+TBkgC[q)^:C]>+sH9$pfNl"qZ=sSl;jFWo8R#]3qZ7,=929i0We-c9knl=MmXF8\bE913)rBectfpf%a?ScUj,UZ!m'T#L76SqS@riFVYSOm340b!;@M&qjbSq/bE6(RH/JKoc\[2q],)ILM]F2/Ts(C!J)9YOgt^uB_qERf0jWF/m\f)o*0*AcBZ9GpM&kEtL\!\8TL'e,h/Abp8!jk]@Xe**3-[Xb3@0TPVqTM4Vr.6^*+aFEOpf!OOBdt#^\2[oaA(=qa&T`C7jIT%lut;h`3rEnq5%qte^+Ve^-#V9NQ'$_\@*)6QVqK8$k6lPH4"Uh(,9dgE=j<%g8ja5lRNW\gpn2'RQ%:fKK#qMS"5!GVi#j*G#A2Tp*)>Fr#<56[5!p>5e"!BgoplaUSA=*?K#>+NrMAhBEs]^SI:JOt+i?;M1(!_C!X0:;.Trr=]o;=UQu!3WqikV7FI_fMt_0ARV+-\jJWPHmf[#l_:nCC0g<*BVE&VLW#7Ws90rLV*hd4]'e9$k26K=R=5deahT)kV3~>endstream +endobj +37 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1374 +>> +stream +Gb"/hD/\/e&BE]*;\7TNXFOt*O,n^uLN_<($qob!HV77Iims,o7no:f?eU>fWHB1b27b,r'AK4@jS@,sFhdErYl"Uhf.\T5k6W$@"9P)e&ck9%RJ]W_9L^*nCC;N*eeW^Y4^WoT.253-dNAS#rJOA3j957=AFc$[Sum=2k'?7[S5IYSO[u>u!9;c4Lg%d)&`iQXjk8iAO"ulk<)bW[U];[`8CFgV2-^LqjR`,X6(2^4[+geOX[/KEk6Yu9:L*S>Pl#;8`7@SN]@9^E`i<2=]I7g.g`K"MPM>!L;,)fIY3'tRpO(Rk8%budQVY=:5+gi\A`h:0<.KGa*bW[Yu@.G,4/BP=V8>6;NQCGGms.N8ZnqN]U:l0?iUio+-IC'H>.UX>Qc?N8d^1Uam+q3;M$ej-AsJo.#jP/)8ST]dr*cDi3qOODsrD%c26/Mp3Z1Zg@54@?s^tr8jN&H_C1asUZ@E(I;DL>)"3ehHTj\%BPFh/LaiX&8E6EtXZ*41=a$b"%\7itJ@W#0K*-i5Mu7?VWg9R6e:6QBgCY/M5;]&Hs5Z/jI\Ja[1'TG)fh*V)02c9@)meW+X`bF+h)2R?BCHr[qZ"\?YA]JVq^gQ0X/[ZpFRB">rT"hN:k?l<)q,@s&__\6h;>u+uC6/BQ.g.q[9sANS_jYhqBUom!Q3lQil-CI>[FoXEV\_YEk:WR<)4Y4s%3\]`I4)kJA(O?&VpGu:U@Cl`OfEs@!fll)aM^pV1+FtD=dAZS#,e)I5Q2GJ$*kK6*]&=%Ii="3*L$0@AA&&S!+%YVb3Pr9ghoSo[l3tQTJ7;Pg8i`Qeq#ie`K4"jqcLV=XR&K[C%cm/PAam?p^7H>>_rLg7%cf=*_]IlHHt`rH3%LN,R2i:GaC-3HVb.FpW;+2%WR*#F^+=nh`'lMCV<"`]VkY8_i<]JdE'+1Ui#YAtEpZ@*`K-_fn\A!(=/$6]5iG&PkR^*$MB>Wlq!fql@46SPVo=^l"i":>OBNc:6h03a'gKe''@Rg*g]~>endstream +endobj +38 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1469 +>> +stream +Gb"/h?$"^h'Sc)P'g'k`2_u(np?ZG[dPg?se*44gan0bkAT>G[`?Co_P"]P4&NlUhNQA[FutMNMK0fErS!C5#5g*5u>X-:c'F",g/`9=/0"V`:CZ]m'@eqf<@s<@aoF=$=9XlRe,j?b%&=8/$`'m[5jS=3B(moFQS8D"Lkj(Q'g7_tOW=';#D8OY4;g`Q(rhM)0Lp.CP/@YRLO%N8Gs4$'Ygstb?keEIg7kl<6Ro'9>j5)[,;?b1?pN!B!!`6Q0JG-R"UfP;M4L#9C?4EXc1E4A@N.(oJ)3=JDkIBGl-qZ0$ipDf^s9,0lf,-G8@4Y=8.&oa)n\g3iqFX[itBA<=Mh;i'HhMY>"`3*=#aN:_rNe7W^&urMm.?#j?S:-BS)6OO^$sN\fV-rFGqk`$0*=[q%4l&TLcE>\nDY>@ogX3aq]kmd=;SL)^"a8*6@_Yb5dD%OMgKmW";C6o'ef`@0ZpW]<(5VkIf,E`XW:SfPa]sWVj-klh+Fl]D6s1iDL&`@m_#)3bS81_5;o4X;#~>endstream +endobj +39 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1390 +>> +stream +Gb"/hgN)%,&;KZH'U\-ERi,*((5kQJH:U*aF?3-rA9nUpTWLVf&rF&t[gtlr,3_Y*`%Zs-P-"hr,SiVKbPaD.KZ65WIV*XfI\)YkF%-uoPFO=h$8VF@4I_;dO%Kd-N0Y6.G`F!Zp1qqoTgdH0L?+Fl49$AKh2Ym_n-188?@nW[eXm31%5.=mJBpS3t:g]-#dC4!fUK-!5^U,RM!9c&DXBHVVZh0O*"Z0//[;UW"=$C_qOASF.NGCH#+rR`Q73'I.S6&LDp7b<..pR>#0A:,hh,&CR2Q/q%FUJrDIWMXE::KD;Va?QMP2NQ>Xn;BF;K*DoZ=)*H,!Tl=QdQ%=24dhb_:dgIkKs1JD-D"BPHti\V,UeM/Y'm%\u]bD?Jua:oE"'0T/SW'U#j7--H7QIAh_2HZIY?KhrtSsfBkPB(O7d8!lRl"VJ3:e7l?Fd8f'4%BH+5D?E@pd2EM?C%gnF+HYh*(NS((pAPn&=-s6/&=3s+`pBpa8p%kqHZ(p#0D3-)CKVWk-^ac2:T!lqphoG27logU+"m#SrUiM2`L!oFEt8D(58;G@Sj0-5+kpAi9XO<0$heM:Y93!P(n*L%m0ZGH1h%U^qh^7O6"Vf\^j8>?F[KQq_)d??\pRpf2m@;qo\b@Q9!F;3qGpQn^-*R<-Y(T0\R]KA@:gn-J6:7'EO'7Y(ZcOQKeW5iXmPN;'$p+b54f:St0#gD/;@(L)<:*8.;;)!M)_'\kK:%0MM@ZS\RBGLQmOF0IC2]9_m^+bs1])FZ]q[cGe%$<8;S[ZCQ+Uk"a3C'/At"d_T>"#)n=3UDh*XWu-EM&]:ODu_nK%3k?EKZ'SCM,8eqaPfMsO-CXH*ZkbLGcu_.hG\#k`],hJ>7hBb/TMZ/49<>E!![%S!+=^q"+sII+*$$43,O+d"%-[:"9p;L@_p_'%,i=:3,O-B5;ka?">QE)5JGOiO22V3j38+Me)n\\f_eRI#)3%E!XEOjR"L7VlTFV0HWh8ZHM;YdfN.I6A?=Y=MaV47,m(G6TR-?(c_66jnL8e"_u=)T3Z-P6d0IC@B70~>endstream +endobj +40 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1399 +>> +stream +Gb"/hhf%7-&BE],S"fIKNjM-E&Z*@4kfqpKXu8V+"^RaH;5SCijD,0tH\hY.\P':++BqDHJ'q0>r^\@XaQ1>*lLQi.Fh(nECCi`V!9K`-jF9S"@bMrMr4]f\?):EH&s.uC#*reOO_#fWM\.g5UZCM+qnjOi%cU:olLlLQc9^9XdWIVUZ$!kHOt*s.%+Z;)"=9>61jg?A5rQKIEV1Uq?_qoC#)HDVUK=dPTP.kVQtFXcfrN)>*j<^9moeDX/jlrVS8l-C)iBXDjp/%0X,UKCn9aje]%a`j[m2_>:UlABA'E'^e<0KhQR&fPGd"M/kcK_9#NpA__KfW.oA'6.';":oQkh5d<5Jcs;6'8m(^nM0Dr!\AXb7#8,@/Bi['39VjSi*5k,N:QT<$-)mT`au>KOIjFM&h4Y53ggW/u^FbF!_\$$b(UYBP2UT^<$K'5DpOd6KDos/o54Kj[AcLnM"gqVYCCuKDta4W;Kk']a5!sb>M#L%77.N%(f2_s*;i&sSG*!@S(0k6G>V1q;82r`E8k&aR:FqV$6+WXR;mgBuJZ6K@erd0+[86GCe@'I8Nrs<)s,NDDh!!_5\rS=%FH?f;4^gR#;kV7V(*3Pr=@$!j3$m"JuF5Si*FEe9LoFZqT!Q3k_nbV,u0!F&h\Fafk4l+Y?WX5KrVSph!gil`DFL?UK?Xf@c/^H_6^6h.F036&"#.'0ipY\,75#'a,%Qh'A:5^V6;Xb:gO,t%fnRB-"J'5;'8E!F)PUS*7Dh\I$J[YHPmgj&]d7&9b,UQrSTpN"$(Ie6VP0?nH,Z5U37C]I+DWD5RmlVr"$p.KYI?i9%^up+IJ&7WB;*gWDZbWiE[l0!":4T$m9:*mgfih;?"Z#$Q_E^ec~>endstream +endobj +41 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1437 +>> +stream +Gb"/hD3N[3&BE]".5]L4f?Dl\[B$4Cg#t",4^4J*RDu4$(H_q^!h&-6'6'*3%s"_\2T.e/T3i%F;D0O;8sN&0Q=YS_*a/;TO;jlb!rMooZ'2UX410E5Wn'c2_`X(Hi!HZ@-bs#Zpj-](.9.(OZ.dJdB4a<_*sT8`&'p#;gCl>EKl?`!R99un=(;g&+>LE"is'\sqXq$V=2E.M[WS\;d0:*V3]S\1okXN8=/^DXOH.@h$D/ag9Lbk7R<.(o'NE1CLqGFg8@$En<+S-^7EhUa9)Zj`j4.sp^QI9Xn!@6=5=4drJ!P)'j!N!HQi"aHd@s?m>]rslE\_[9DDn'*S)m[U_n9=r[>ImE[(V@b2U:nuA/Y:!?Ut,K#'N(Om*4`S"62KZ5fe6CAW20I7EuHi:r3$\Y)O?o>XKgf$lO8qpds4RU)&j?7t+gSe$U#GB`lMGlD]fS1WPBpTs+g*)GS`Mo"<#Oc/qk&$)nY&0u2uS@BEEA]+lf_HeaR:Pbe;iK"j\ei_K;r[n)`*TX$E6aL%WlG7M[?MuY#[:FJ]opfpC7VYZM?WDf]),dLjUafJ&UfM'"L4QdfjL/YkXi^VQ")JFZI[mSP?g\+%d^0%/I1mtLk)D8%Z_"]LQHT*6ppc:L4(\0K_T!0+4HrBqlp;u00rEcjZlM+,]3!d[*#aeaiM+D*U9Eu,#(\g$/OW4m>J%GO!bQSdAA=Ug:I>]qFh\8Ub[C$$lfEEPO`'TWM?6SmV(1]c^1tl.MGQFIN;j*Z7"\KCECc!RSU]\\^+;O5+F#PJ]bQWtjmKg5nZ(.J+B)A-4:A(+HIr^o]mZO@#mEOon>ThoS1U09_#bW[ERn*"F(rccKg14_6NZ+pUQ6-\n95cBKM*Z30'(^0@B!5ndtq8O#.kVka&c&VsW!OY_=TKQgSn0'#JZ/>J(P+*QNN#;E9O8nJ,a2rqjh#&i-[=s)$iuBsA;APdQ8G6t]DUCtWrD:7^d4\q8'+&ZON(D"5`%j1rfDQ?%;d@1i>sK$ui[#0R;\i77F@E2t_+JTS\eh2I`MOtbdQBq%.IP<0EE09N7++E?FAG)a-&cp!r89b"10j&T$?(XFW">3PJEcfAWCh7f6ta]7*7tp/b@#ru-Y<`g~>endstream +endobj +42 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1049 +>> +stream +Gb"/%gN)%,&:N/3lqCbccOe$(EV3PbfU6>4S^q@-IH:X>Pt72kdrt]aKd9SB?&H'-:""g\64,]j*ZaU1HOtFHj5u^^!8\t4T-L"ZU]coU6LlXs-'Q(k)aj\s%3hD+_^n!*d#?$q97XPN"j$hCBRYWq'-nskX8`HFlH9?DBLi[_@i6I,JNpqt"0X?3OZA5?XS?&grn*ZgqGUCrB%^JOiuKH?g9>h?<\SYSujFGlmHqlhMaRo^qEqg"de#e.>jYj3ED*CD#<7=d)0/R\G6__5rooL<-Q5M8MdCf?$FEIU:)XOq!QWg*CtApL22[ZSdfNiYiA,YdF2-p5g,mO^4)>)\P8`0>&5rg[$gEk-MOamJ*bjm'\ZVcW*=,jWu]O.-Je>@Sg?2-6)@eU-?r0:Xbr3J'7I[7jkj:hrtGpt%C>@pJDP\(eBi=raB;27Y1recQjSI8Ol0WK]NUfp##eGs^lC4OZI>!NqT5hM/6&4SOmg[feK]s!K44G%"'0,k,DoNK/jqKr5ML1*apf6W*YOSukBR#,JZdh`r-4/RoW__B`\46XsDUaG2cFKUS.Jd:ULZg9Q(@8)kERUJ1g;4RS`q:0UKLGTtlDeFKZTK7T9hpa@hMYgaA"rc$)O5Ll=n2endstream +endobj +xref +0 43 +0000000000 65535 f +0000000073 00000 n +0000000134 00000 n +0000000241 00000 n +0000000350 00000 n +0000000462 00000 n +0000000667 00000 n +0000000786 00000 n +0000000991 00000 n +0000001196 00000 n +0000001401 00000 n +0000001607 00000 n +0000001813 00000 n +0000002019 00000 n +0000002225 00000 n +0000002431 00000 n +0000002637 00000 n +0000002843 00000 n +0000003049 00000 n +0000003255 00000 n +0000003461 00000 n +0000003667 00000 n +0000003873 00000 n +0000004079 00000 n +0000004149 00000 n +0000004433 00000 n +0000004606 00000 n +0000006289 00000 n +0000008501 00000 n +0000009864 00000 n +0000011100 00000 n +0000012458 00000 n +0000013785 00000 n +0000015063 00000 n +0000016495 00000 n +0000018034 00000 n +0000019565 00000 n +0000021123 00000 n +0000022589 00000 n +0000024150 00000 n +0000025632 00000 n +0000027123 00000 n +0000028652 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 24 0 R +/Root 23 0 R +/Size 43 +>> +startxref +29793 +%%EOF diff --git a/tests/reportlab_testoutputs/to_delete2.json.pdf b/tests/reportlab_testoutputs/to_delete2.json.pdf new file mode 100644 index 0000000..93ed405 --- /dev/null +++ b/tests/reportlab_testoutputs/to_delete2.json.pdf @@ -0,0 +1,506 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 32 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +7 0 obj +<< +/Contents 33 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/Contents 34 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +9 0 obj +<< +/Contents 35 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +10 0 obj +<< +/Contents 36 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +11 0 obj +<< +/Contents 37 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +12 0 obj +<< +/Contents 38 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +13 0 obj +<< +/Contents 39 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +14 0 obj +<< +/Contents 40 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +15 0 obj +<< +/Contents 41 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +16 0 obj +<< +/Contents 42 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +17 0 obj +<< +/Contents 43 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +18 0 obj +<< +/Contents 44 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +19 0 obj +<< +/Contents 45 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +20 0 obj +<< +/Contents 46 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +21 0 obj +<< +/Contents 47 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +22 0 obj +<< +/Contents 48 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +23 0 obj +<< +/Contents 49 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +24 0 obj +<< +/Contents 50 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +25 0 obj +<< +/Contents 51 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +26 0 obj +<< +/Contents 52 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +27 0 obj +<< +/Contents 53 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +28 0 obj +<< +/Contents 54 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 31 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +29 0 obj +<< +/PageMode /UseNone /Pages 31 0 R /Type /Catalog +>> +endobj +30 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20190221153231-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190221153231-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +31 0 obj +<< +/Count 23 /Kids [ 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R + 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R + 26 0 R 27 0 R 28 0 R ] /Type /Pages +>> +endobj +32 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1737 +>> +stream +Gb!#\h,E&f&:`#5TqO,EB.UFdZnfE*Kmn!]^`?/,mNhu@dW&aA1$*_2rN.)5Q:!?_qa)\W?EJDF[m."%((c3b;#NVH'CoR"%R'mo:.A.`P"IL@+C9j,$(rk!*#3?aCn?BiAWOg:.F\FjhK0$e)lU@&R5kn@g^"2]#S5[%Hhr/@7IaZD&n!jgMuJL=75gd^7J\l84:1^T:LDC,c=]cY#!-r*47H+]XT>=A9fq:\,c6+PBg1SjQ(JJ>KiC%4t^I#JrHud*Kj2G(DiuVc7^eRiGK,B?4U07G\*/C\;L$%Z:OP+8nNuqQHq)UYIbIl:l/OPGLUA>@S,/NUAIBI-75_#g_-;;I]aDA8Q*W'U_R$4GHY*',e9F'YnLDB%_lHWT;nK_XrbSSNXUKku^Y1R!HUG-,bOnjgc)PG*-`_a_FVBsk/Bh8@0,qs)@IS9CLI60Z7<>2d\SeVhkTW9ZDjaM9q3o:MDhH+31X)=diZ??jNEXF;%Z*=o(2ddB4jhR`HehI*Ccl4m@>_@f[2D1-sG&+/]G0BgoYW2e!!CS'B_!/?^35MQTb(ICqP_JG\j.%4G4')-9m[C_e\R[^h\Y/"$Ftb:%I/R@7O]DCaY-\qK"Z$2RKm34)hSofO\K7iSp:mcXIPe"e;.D!SnGoCTIUOIiXa0!,9%tL3.Mj^;G60M^csqq[6D>=L0<%r/iN;EZ8miD2jQ\[=[VI1%FfO++bDgY*G$Z5#g]F&$-Ts1oJWkO#Q<>H(WkM:g4:7o>%HJC.3PaQL42#1rGhXZ8BachG'mV5KAOZG?XE*=\c,O%C`J113;h2G$sb1r;*d9?#'$_n-j)-PBZ)`..Z'9A!&<0I"BSdptB0CJ.DW@cuDE_WMT%7s!ZX'`6n?t)>6;2fZU4n[tc!X[;sUR6M&_a>.9elB0"oFZ<-#DA3Q*<)Qnb1LNFXrjd&sYdSQcs^g=un-0n(cAkiO\JYi,[+E0HF"b<(u-nT[B(o-hVh^=D1-s_GrJ5<87c5P.F7,]/apu$eqF#aO\9a:?E&+<^O;;Tm:P*\C;/^Bfoio`ZaXS2L&9t"_N0,VMS`/7R_]X,#Yj(Z]$W:MW\iGqs^#Yj>=DD9Yf60;rSOSW/?PNU2!:;*:/Oo+R@gmJ!2@JFq/$P'2>eDmU=Y>nj*fOAT5E:mE>TsRu"H5fiM?3])'[O?mRlnP+X;-=Q&HUT^#?d'kW1s2!eCjG`_@`dUkWJO=a#\C%Gb&U>4Xqo&=8K+jS>Ebk&2mKq<8ScJU$o1Zf6BZ(\85_$S89-%MP+8_b6.52o17p-?U:YD+rqGT[W8:mUnH:q.UV2TUJ)gHH8Nu=jj26%.7QT6@A`tg(KR8[SR.'(94Y@R,ek8XYG~>endstream +endobj +33 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1021 +>> +stream +Gb"/i9lJ`N&;KZOMNN4YOhBA8h6kkT2GL2P56jW1!+cb9Vu=7ET2Jd"Pr2SCU/:Y$6o,\.CPZjO3m/'5_J./f8I>k?.56;gLltl3_m0P$DQ8O>kWIDk'rTW:]$8c\DmF169cgW_=ju$*U?u8%>-$kHqmm-IP5BC/^NCbf?NsQKo4QXfk?3?>AUIp^$Gf(5M\ILN"('hbjHn@%MO:PrGE<=l6McR\D"6O\qo'?Wo,1?29$*`eO=-JVec*DDE<;5"k*3tH"-1sdBh[Y>5q%A33._gN'iTpAl#RpV`5r78==8&"/?Le;&S:h-,?uF^l?)Ai)(BM'2f/+W!pc4ITc#T@]DHi]5^'IQ#Z/6lop*Y8PG<#4jooJT6MlC*P3?(*P7AB[me-T;<@c/Oo#LCI4k`BuKG2ti?ggLgL\TO![Z*r64JK6gm4*!E'+%L2W%"IX+G&0N`akFT."i-Vs"Rp;X+1KW`jl#Oa]cZ*f-Y5"&pacPS(oE73V&[,g]H+YGKf9nKe4g"ToL/+/o9TGqPUD!*oD?%WNird-I/po!kh$BV#!01C*DOSg^$',jp?4q\3`><=0[5)D-K?D,cm)GP"6eC<;k8f+4dsp_T.F:'a*/*d_eM2KrpRmAg/T5hFDk6U3eTT(X8h'e@.4u-FImR~>endstream +endobj +34 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2115 +>> +stream +Gb"/'>BALX'Ro4HS=+ds3jE2jcFsn=CtR".QdG+m?A'n_>%:K(%cuU:Oc1r("%amsh`Sbjd%^qsHQs$q-\M_U`/&Kiuj'-OIB_Y=>lNdKZ0HGp(tknSPn+7GB#MU2d&cjLj:`,sKV(sh0Z3JHu>(r&q;5G4Hk[r%NYE,5bab;0I0CkV8FTcLWaJ]I5u[$N5@0EB/b:![kV@$&0XJjJt)BD-a(#[M]Q?AggL.;(5CBgZi4mII,aXecg*;-97\X_6?a]dgR9Mar.H8kktc\<^iU!Ph@\stL6KIBb*Glfgtkt:LP=H_a!'JNs9a]MTuH_RrUZ3;i@S7Pmb3hNaCAhi)GW%>G`U%6Cm44LENWr6!MAd(M.PQdg.au%gAf`MnN:T@G:$#T#?G@R;IO4>&8-MA$DZ"'d_KAJ_\:=)(hF=kR"Y3&0(UJe&Rb6;fbMQkZ!]n&R%oKAn1;TKaLi'iqkAJP..TA79Zb!f$7.8l*cWYA6/+maI.LSu<'07\(UC!POh!sZ3#LPF2@<*.@[!&eb:NpC#(P_OPcWp']kn"143t6T"^eT`R3?,,j5B'3GWiXK0k$#%FE%4mK2\uW6\F#FV^[[O?4)Kh'6K=*P!>o39NE+SggUFr_Y*-`o'J";hd(ULQuJ<,0ZS$i1s`Bok*<:JlL&Q:cJX6]/fU4HPRI$Yq>#'A1eV7F=GnMXT$MY?M2Upr5nOFp3(*T]T?\S%ZU?)s@MgrUC3g;d1.SUG9;*h*GrC!+Am,?q`S=kn3Mm!"UJY!p"bm"9fE*bGORTX2YChYUK7B9L"Y.r$TW8SCh4(H>2IM(fZ!=>5P'Nf\.19E`lZHUm(MV0k%[U=bY'*fJ*NQd1P>\QC(WuYF='MnB'?fSbAW>O`1S3QKV6+-FM&%:70!NsWDORuthNmGDV4pQj-Nqs5K4e%b`iP/hC'R.#FXJ;02^)fQ_2"7f?`Qn1KfPNYD@NkLBr.]:Pt=W-b?=cEh%W`&(Fja`q;&4BoV:?nN(W_ICm[srOZ2ud.&U"@.foAr:gI;Qb&P(f%+PNW4N.5K_"ru8E4]jXQJi"kGr)k(*j+#g1*/Y/ST.)D's15(MD?m)jGc/3TqT.<<%f)?[AU8j%fZPkGTIVIJES-cO;p<2FjNfHd#?R.GWIoTC.Tc/6La*QG3=VkqebAoU@Yj2Ri%q/%7N#C;0tY)K-%5o_9KYOG1^r!lfna-Zh[K@?$uCceG)&JaL*80Q:!!tlF\#mWuSWMXWi6h%,<(7_b&"h^iOn>`gFYBg3sAnM.J%`i"#B`C&Aq9SXKl+`V#JoD6$fg:"sOg^A.DPSk[[i9#hkrnX7cB"-[+9!P6X+=VPH8IAoIPP.d#n>$*1L/780-IsAq#+$b[g0t2Y+J_[LR<_c\S\pOf=Ih$dq%dt`puF[Ht`O(r66$I/EF"Oi$?7t-2=^=Sl`cR79;n+Th2nsl19DAh'=r[G6cH8G?@_OHfXT>GOO\^f_.YLorYq?3^,:R31re05'$C[]+;sQDXh/_f;gqEY'fD4:u`SCE5G](8c493^pd>&1WKmr%@PH!FuqNKPi>aP7>i449Io2%9Q7u':SE\D4YK=)<`rW.X[Ck_~>endstream +endobj +35 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 989 +>> +stream +Gb"/h?#Q2d'Sc)P'h?tPb>p1#KhIBEu6_iT0pZB]3UetT,sQF9r3WZiE^=bLRO$.tj(;,miCMjb\,8MJ+/@53NO9GpRhB\kc9*NiJElnZ%MpRC,^&aIPi**Kgc2L#,_rg=U=M>%KK@r78G>!t26MaF9c\^M2K?Y);BbuhRhRs9IFjcr'FaZIFK0LcI`6AIWW5E^rZR[Q^M?&d)k5ReX-%2H/=$p%A0$!&H7],A7JEj2?XCWL:ZC/]VUpUS=D5Xu)RbMiL;^r[sbKc9B\ENH1R8Z`BqDU"jjT[O+d!,;OLf`9-p"fPu7]RHK>[uX`5O*oJ=?<\;c[L-d4`+9tGjnWMVhW>]gM-:^=QUf0Sc5N,`IM_2[cMH6X4>>f=($]O8SXt<0:u>9\=So8,M$IiISaa1],r8oMPWgk%r%njL18b[.c0#0(U;K4&*ePur0Ta0tcd(+2qheI\T8D4]6X1n[n(*u#ONd:WY@W1?+jH/%Oa'b:CWGBcAnmF'QA$][U_]Vh%K'GkqDFFuskCa):"krm_eH`(!k]u14IB"n5Uk\a)8q8a6r3EmJa_H%I=S6kZ0?H\*WY?*E@rfiEQa1]/eIEa6lVSL>uAdH8-C0=A]5lP8R^FRJ8,!d=\R[5n>r819.>335V^#^i><=9uP'1NqFY9qjH!lG8Tgu".+%d1]~>endstream +endobj +36 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1017 +>> +stream +Gb"/i>u03/'Sc)J.uptUL1K?)O4_"ufU+QkPM!b?P;Yj@PX5[Dr;3%^9p77Dg(9)qgnmf9A,G>plh?O<+p`L)nNEqf6^aC):qn0f"%Bt/Y!2j3-PNOgoC]a#I4in:;'3D.Q$W5MQaBW:/Ei"B)2W`<&MiGs/QNYK!7-[+0u7W'D=l)he\uY6h_WR2REO<8s*D;@?=#$kP(,!@j@cB489h+kUWQB/^9kB=DOJ(@9UL8F2@i@&XKih%OQe]03bh]:[14Loa\q/gYpFf,T'^^D(uE0a,2-a6>1PVmiSu2Y9bmO:[H4Lsa5s0Q!'Go_.qNoR7^lBqQZlV/Wg9p,haCJ__.P_/B-0]+I3<4hJ13[l#S$QAK(5eItP(d'MK5gTu5dG.6qJ4M+r1]A3hMqJ#;6s3!a:muFD9YFMQ)]Qa^Vp+YJ8;)C+lV/MPr])H3^2<1@B^Lg;CK`M)p;spAsRIIbi/qmHjZebnksrm4s[:~>endstream +endobj +37 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1059 +>> +stream +Gb"/h>u-tU'Sc)P'dr7*2.<"2hd!Uu2Jnm0[b,r^7C1QfFi?9$64iGBRi"KR=YjK"*hm&.P,)8\*USTYVWREY\_GRf)_-,^T2n)p7&BpbX(i!c_%'!sA%OUI<_=Cepa$6F)OkJ7lR,n*=]R-$/U&1&l+384t2'38h#LYL'>eF/NPq!']794>>JX#s2SRf(ZQ![_=R=W^Xe#VgOLE$W9]K@kP[`L5)=jCm37JG#!Td0R+:]$=>]Vi"]4Lt^(^sM&ti8;i77dR[JRIBmF%7Neo$[#Z1b!%3ONo#.a+-ae%7/b(Do#9Vlc'/SWh"'!D-bmUBe1WBe_l0qY""e1Pp&*YTuM?-HXBOq`!%NWPk6hU_)sV,s(!`4\7!Z)5eQ&\I2]+\56mN,0d"eq,p?Nd!C4B.;SV70Zhc7`U\In[iTIr>DW#&$>K3DZ2=gJ,b'4SAbRe-PSdk(0]dCjD)%Z\='=dh(2e;m=t@Lcc43:$(D2X'[dUEKhIX;1mU9XL*DUOZ(,Pt)3:XCB1oF?]kL9/-X^nS*(Ql-\nGh$)V4/%XK$BZ&<;R8DQ^n`]]1p?3P$h2]X^;4cUiJDF0:7ppO^[VgdqG]nFWG@:GjR=:$NIg'fa?l\#ar;FOGN793LaNIW!o/ls)u~>endstream +endobj +38 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 965 +>> +stream +Gb"/g?Z2Df'ZJu*'Na!]t^sNGi&gUsP/Mn_[iF$C%g48/4M5Km<^Z_a)d1ngR;f2dGkq*Jg(hqai!O7oPe*q=gliE7'ecQuX2V)]XW8G_D*_q+NmS7V8S)eF1^h\G=f=iY$W@_.:g9@,7coAEgtBsI;49YB.^_"tO41BoS'CD'EB!RY\;g;:A%sG\B(OoAB'&+"UqH/QVJ2Z9,d]AnBX?s1\1H7R2WX::\p%c=Rd?DfZ;<[!m!O:_lo[?g`]F_VuJfb4SW5%160'2P5QWaGDNPH3W9Ai\m$ik4JLOcjZ*8\h_G^F[""lB(-BJrI_(ctBaG1jsSgV_d`HPh"J>*/FDIKf*#9EVN2].^7E8:,N,G!C]:>$>7o]U.>,mihNDDpN=ImcUl[`I]cV`/@S9hQHq96pnaOH5tdAhsp40n9uA6`OPcr4@1!a-kWU0iZRs3BVLci=W$G6t+J@BmBS+hNjg;D[_]-#lfFU[^?dr:Q63n-&;4M3hi4hM#M[k\@I5nnZj^GL1&n/'-'O8o~>endstream +endobj +39 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 961 +>> +stream +Gb"/i95iNL'SZ;ZMCWg:,C)%ghHmX);miVT20HJhfT&Ki8;YeDs1[)3L4Ne=%%B`(H[P0?*8b0g#(aSSMY6"S$Lg61drPX+O;*5&.7h1ia(4[d:b)U/f8=h0:0[8!$cecZg.=P?Z?c\r'Sc$-,hJ-J<',T-DOS6BB5"-'TWM^[>`_+j]U%_^I`EEre^`op>/%2_IJBrrkEF:\RDTsUYM!_L;R'CDZ.O$]'PossnLYbm*Ct%7jt_Ys--UEY:'SoKX#.]UoCG7;D`t&R8W+Wb[.!uh_XqfArO*^,(TAH-lXOCHmcgOW79u=3`GMrg&M@fK_,[&YWXjdl[3Rj!2hU)Njl[.KH)#NLT5#T@g[U5lBGq-S;ngQ.U8d6;:-db/Qn+n=S#3/03X,KPu@@4.OER6.dC/?k#\nbdk^@&hB'-\h]qQu]R66oImH+J-\!K);b&YjqEtuj3PC;.RniS0Eg:H8DGR,jB83P1c9t/<&bd6,I[Q@s]A+Kj4-ca!hBU,&0$Q@.WtC.(Sj9DITU$tPXV#7'pB54g!hBluTN3:VIljhm[is9AJ_cL(b\lYH]*#Zh@<\#?:.BLI`OQ_GP%Xp/"1nZI%qE'\9IS#IAjY.cmT72AWK4m`p?uuo,D&g$G@:.Tlo%;8,3=\+8l_2*X%W\?#Bg>q+3&1db64*D??p<$kktkP/^uN=h>V\*)PIK0%eSV3h?=u7]p6fuhMtXn+q#pi5jpu,"6lpt(3:6aL=-6I^B/LU*KP_gq(fPSK%qiK4.s2)h9+FYh2]i&lSqe;>R#9TF9cn0\F:9&TqVH_dK7)[01pfPrsues>=#Y]]f1FoJ\b\u;,Lm~>endstream +endobj +40 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 997 +>> +stream +Gb"/h?#SFN'Sc)J.uq!+Y**'4J,=9PenNSiWEZt2OG&LoPa82IqX!HD2%$K56q-DB/gBdO8X0i0l46Kh\E&XpD]4m.0mdkQZA'2bb-blCb<]E-RPo1MK2K'/RYoC`1M>IX+&Ak=B.>BRaQU(d$u3oF55JD]XB5ON^s^/YF9Joh(.<""M=PHTb0%1FN_Jf_!^UV:8KI:[o5eup&LGia90$V]*#\>A%/2P;@]m#*\Tg?BL=@NZM7OEEdCi>AXj%%uC2c%#1"O~>endstream +endobj +41 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1007 +>> +stream +Gb"/hD,8n?&BE\k;k13R$n93ZVq]YbKr,!LE'G7lcOMEqu5t#)kQfJiC?m")[:%W#&6"(FB&OFH49ta.KepQ(oUFPGdF$/h8^OPi4*AdfD^TVp8BjUapiYu'T:Z*[`IBdigh6"4&X^]:k+akm!pSSan5eIN#e4&W9\gm3ViTHR;WO=GJ7(;G=X]an>T0H1c15jTi0["/rB-qjiTR-VZM/#;cu5Y4et6:Hdn]EZo57NamO3J57s>au~>endstream +endobj +42 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1015 +>> +stream +Gb"/h>u03/'Sc)J.uptUL(r\:fU!Nre#$gl>M+AXVPoGO-t.p]^QZ$B*S.#\g.>6)daC1sp>J0cGom(r."8Gdqeuo35)$1B.#lQ2I5hM+J+&r]aoD]0S^rAub*&tb]cg=]f`ZuFbeMe#4YZ-nfLgug12oiSO3Qah[0aaH9t/6]tGh+%l">U:mT5I9)l:JEFnXN"i>TS?T<&kRbm[Se]O_uU>r]70*o5bbTZD_ifS9]"?-n9#BVWUZ)N;5/F_]E!ssJGRl3Fnr>ZnBb7-iAHmO0<--r:0c?.>uAfnK;ToK2mW6i=,Ea*fi]!;_sattiN1)fiS*p>/#Lm7F`mBQKAT^9XLYH)-!FU;Mub0qb#(6_N1M7lR1Dh#Z?DTNfP^U3eG&CcKID-H6)B!Sme4LI/H^!Sp7rmUSV$\KADPrrV6:hQIT0_-@']gG.endstream +endobj +43 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1014 +>> +stream +Gb"/h>u03/'Sc)J.uptUL1K?)O4_"ufU+QkPM!b?6^+/u8tgn]rr#U@VKE_)D2Za8kY7]?NTM7F5jJY@Zu!TedKP?:qbiSf&B8B-]#g74#r4YfRXhjq>8bLBjW[5cf,K&N*:F53+&;1,6_sKM4MtdOdea93gr!_^%D<(BNC2%A+a=-bD?:G^%tH4s1A9$'tp\qj"$GQ<3?%>g_,6Z+#/@?@om,gAf%qJRT?Xs9p9i-24,MQMRG-SYQqeDX\'%ALU+7USaVZo=jjc.<*gnil7_cjO1:57@=]@TIfPPgqko6S"*[Jq9\0*/NXPX0e:nd4s0P_T0N,$j2JU1Vb+Ngq3Xk:AsA:B6Q@g$X-gFk8Z&=(,t?r.7Cg5^N9MKcWKpC$AlWh/S_^L1[c?1aS)h2k78_l8B>5Q.W]9X2P!O!bA+/\(%,,"2`ejOappA`Gp)Ou&NAYcPM6I2,RVIqJB$Up[2OK,9Y:A5RK*B+$W*l1]El/-%KUKq)W%iG!T!k6gV>le"E0W2Q>)7N>H%\:"2"`KT*K9`*(MB$XGPhch62@b8drQ(mV6#ROts7'Y^7=4-aG"@CSTSI#YV%YU^6;sljiB25.drW[&%V)pM3#Q-:=G14cO?tJF7sUVpV%ktX6iS2#G\j8n';h#Z>!U"b;$W*]YhRhp9N[$JD.nr=$S>F9gBFkZ:*>sBk+G#JD/2GLB;3$\)%.a]mP/LT_endstream +endobj +44 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1062 +>> +stream +Gb"/h>u03/'Sc)J.uptUL(r\.Y;hjf)q1Zu&mO%;^5C&]Kb?<6mrspQD8JhWdS(V$V'U8Em5M6/F.QE$i:Mfds'uW/Fok/]#Uj(9"]S13j>4H@GW/qH&V.NQM"Q$SMsDf#PL=1r!HIcB-?D.3q&1Rr0KC\1T@,i%GJP.$;Fo0S0LRNahd`A=JQ;4/\30MgBTt1n[:,NI&:B_Hb[>b\0e3=%&KW"FK;dZPK6VYZe>73@oX2A-HCPbYA2\5[p+AdQgh-2)79IPWW95pkN1sWQH`(3ZJ)s.VSpW@g144Jl:mj'BCT9!_(2Wln'a`sl(,.+YQM2LkXPl#.qp_'M>HpIqDXg\m'%a$]hOZrZ]FS?8Q(JS-V5W>,>3-s;k6=U0<@cnV,Hr&S8_g]6ACr,!r93u*,%LNWg&KhE#dumq-nWaZ.k5HgTAEk'SS+<[93EY.*6*dBDHt22'muZ'22QB[C2IKZ`AK>X:]>oVE-6FUX"lgLDLP_:q#hrZef9*'(01=G3u3:H&%f#"]im9&VO1X)&tW=XuK@t,df+L&kcs?C/k;o74gd,.R:+>J=]d!DmETh1"^?7B"(a"h2^='YWJ"&YrbKT5IPRu.iD,'],eL(]D#gE;+uWO'cf7pG/"$#9/-X_gHW_qKS4I6G3n(>h6@a6DQC8hAqo.c7ZQ;bh2^<H%eDh+B79mT/$\_h6Su#)3A%BnKi`A[]Bnil=tj(re,`!Q2fW2%kWK^o@Wo#GGoY$kK"4-\dD=CBP%V!8!DO*^m(a.,5nI"b]kV@7q>X0Y%*P5(WGIF)@!$~>endstream +endobj +45 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 942 +>> +stream +Gb"/h;,>q#'SYH9/$?5qL1K=[?RP:%`l>B"R`$!8SgGm9UD-<;ins2OD-E8`Km%`m\[8`h8UPmu?[o&4T_K%es7lfUI0rIl#cJme!Kn^!^V\#J\qq=o"0+i7i=!=Q<'CS#]@jY(`c)Gl&g1(#JWI@Q)+O\S(pD0_u)MZBVc*<#CU]'^t!iYFVf_Z%Lfsh[fmbIg%fJ(8ZZ]%69c\EPg(X[q"c66gCug"K5X\e4=@>u0DrD;,fT[P5[%)N5fWRIajY85KfC>nOGo*<#G4KZ42>2pW\_.K^OGuf`+%?quPNGs_H"Qb:=WsXi$e2beK;VF:.)REKg+TN(l0K3sGr>RaXrb#>,J?l0/]l[G[-;+!?<+%:CN=VSg:B%U9QmMHAC6#NeT"rZQi-!oj\CCpLYa_R%G2q'<2E%d$YkpHI/hh9sifOhjEl=Tm1(!:WljiCMO52.eq\??)1\JQOmV6#GBaX2:m!]GVZ_8RL`/9\u<.]]kC)GSDfH&W#,J,D?q\?nNlTX7_I3Z3X65/8ti;FX?40627dkDS*-FP&[FF\RcGCXmen>>V\3F!Y%e/endstream +endobj +46 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 910 +>> +stream +Gb"/g95iNL'SZ;ZMCWg:,C)%ghHmX);miVT[<9&>fT&Ki8;YeFs1[)3"%0rSnd:@2f]+cZ_sncF!=52:fY3BD!:M^'^I1r(6%Q4MM@rjrg+tc7d`=NA^FIGBH'@N#q9thO>NCGBt9-]`@DOlBG>;EpfZ`F8.%F\RZOJ%8P$.[^Z3FS1BGe&5daln^3m<6pPK+mo@hFX(E:=O4"8R[b8l*O8UN$YY?]$]\5EkW0Fk\<%451=&CXA]"FWZT9aKKp$Hb4q%7V]Q1_oFr&<]sHLc8X5OF9(7$hS=.Ap7pB%(I>=0IdhakN#YSTfgJaY(Ml/0aI>,Ju9J:\SE[,7c8d2a/G,j?>"6l5a<[F:#jQcup;h=+:#`UfeA?Vt&&&UbRT1,o@!#iL=+!P!)bm^OA/R6Lsotcj]3T.2_mh4`:Nu)-SRF/Xlp2JKLKgb\Hq95r2g&@B"AW5)&`+,VHf3/*gT&+78L=?5<_h]fh@\TVhEA_;rb[)kn.oo\eB[Q4ogK>prrI"H;69~>endstream +endobj +47 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 966 +>> +stream +Gb"/g>u03/'Sc)J.uptUL1K?)DdRBu9UhnNCgm'PPG0hT7gVQ\q`-*>>Xh=!EW^?sSR_QalZ;?h#m0^BXC%k5J<)-!*$HG[F9X.mK_.?R:6Y">Nc76a8,0uAIhX!%cr::OX8p2h-V,&XL\a00B9;O_]oW+S9m=l2)SlS*08%?Uf2&?obZG14hj:7_KcakW#c4M0_>uq'b5u;Q$+8PZL%+m9@?=Mc%be(]p])Vt\%`R-"-e2J-O-i%Bml3WD/on$cD_I#'XTV,aY*bJg3c-sL='iGN:fFq85@I#Ag/L/hcOVY'kf#V0qn'K*`jN6JIrIT(,=K6i=k7_(9i1V^9fgVD''YhMmIgr#-&PY4c6>JDDp/[!"t)9P]mH=oe@rs`7#)(5YeJ+M!mKM(WM#,i0b%B,#R?P7)fgbka-Zob@-S\qW8-:,GVRXbW4&FceKi*/L_5FR,[pk+*82$(H76,9su!"4joqXF%(9U423RG,&fI'mj4%JtJ55*Y/L5.N6QG\=7e(0Vjsi>pmj$bWmgV;K7F+KcouFI#FA7sIOKNsBUX]jXEU^E.V-1BtM(J$*Q1mNT:g]Q\pNO_%H8"jTYn7f,tt'&aki*T9.*]N'XZ)h9m!A&);2%r\feh@\U+>rHoH_g>uN1,niendstream +endobj +48 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 982 +>> +stream +Gb"/ihf"u<&BE](.o+ekqZnVVe@r.JVb;QL0cZ`,+G4nK.#?)HMJ=Bonb$=RA5>tcpLM;SpVbPe:NkM,PA%?sG)-MsHe[k'[/+=DF#O,.Y^(/!eH8,h,B7hB_3BlAEXg3$>J8+KfI*TKIj:Dm'c*iK5->^8sn+41#J2<]7uc?Z!34Z4@"lqJkQf(k-RVlT-->>qG&c>JX"R;r%WZHfqcZ]FRDq:;cmkF6NT+Q6it1RTRmW,\,X,#(dFGaa<&-l#=B0r4E4b2N`p$1/&4+//Q5o`#KV@\uF_gN)q6-KsU>'^4,[dESX\[n$0VkVe$N:s?m01jMunRmnIT*o.mnPG+ImFM@ft1G]3Gc#.W5jO*AB]aq]\KH".5,S(PFp.csiUYDQuUO+b#hbZPp7shT>hf*I<,#5qa&UCnJganB3ne"lW1SIr"Ai%"'kJj=\<1"VeU:Vk`?`m.i7hGS&ZN-0F~>endstream +endobj +49 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1012 +>> +stream +Gb"/hD/[lW&BE\k;k1dq1!-$5:N9^X?jMFI"rZmY4A6d]\oem(h]=/9Rrg2eOp24>[qQNQCgZY4qu;lbJ_u]7`+3Wl9)S^ZP3Y<1f[4;5Z#6GLZ1"\L5/YM4?bu'Z=BMq[+c8G,5?^ikOWm4i2$4+b8Nf*H@&cZ4C(8"Y1s3D9lXk*T]Nd#YX3tRMCn'`bBQ!u.V"LlNhsI'5VdjO'4uh\/H[E==$]dcq,*AlrCgr7iYObI2gU?N8SDsX$bcaT]>ODb$opB,(jXT$go0'XsCIPR@m#K)2*Y;&E-o+ZM'La0h6mX24U#c,pn.(;k+amK[g%*WrqNLk_"B9.5$@s[(]mskmqB;N*JmV84(/8Z"eg5]bim9I5_\oNUZjaD)$oYba_7#kb[JO+_IG1B><`kpPFesYmZQM2)>j('?=g$nn]/#.C#!7$Pj%,'adMePdJu@-)Bmo4iY0FJ^6Ih=Ng"FDimBUK[]$&5V*`,of@@9`ON:=&Z6u%pK#c/YA'IH^/j2d)u!i"0]?AU6;3DR`pI(?h,J0k&kLiYaJ7e6-%EqKNt[%./dQhNR.o-j;\hB0_!VHVB';.VkFf9Bu8d^C,X/P0+MgN&$uMqjIi614/Eh)H&&PM;;5&%U(5P"6H+,Y<^'i`^VJHZFIRmn%CaX6CU@#tsF>r;tp%UFG+QSqf6p%rW!I54D;TSJ%?'N$MjJ&SYA+iU,UkiB83o6P&XP!,j\m^q9JX8E5MOG^F]0JTmE8(>]Z31OD`7e`4q:C)fA=\dgdh#$hHSGC/&5NaoJ1D`Wp*U?6si>Za%!3[-@+-':gnH(mDnWMZEM#dG:5a"_Tl&KHQVersq:-WY_(@3G=Sq^%5c~>endstream +endobj +50 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1115 +>> +stream +Gb"/i>u03/'Sc)J.uptUL(r\.YLo2#NJRtH0uEA-`'IrdKb?ZKq`-*>'1UD.<'liA1X<7RqV(K:1hdQ#]4:@LNrctJY]knR%)N]T&-:`EHjdV,YD=kt>"%#lI^^,c\kn'$/N!dOfbT6NfKo*H_Fk/Yo@g+FT<^MQ"9Zq/8BD/^AM1_f1^et)GlBn?n?-"HDLbAK,]t%iEgU$$Ge6s&/G4Y[t6khYQ?+4R#Y\t1;+oZ;nC`K6+L)\kN>?BX/i-2CL0/8i\d$_N+aEq..OhRW,j"sHlXN.!q;I7rKj6Vof$[a!1>!NtHV"d?)gimY0.&oa[&i-8**\5F2h'6Xc="M9LalDphUrPUbnMh6X_+pZpIk-6N`E4W-Q5_g;dLc06S5Xd?qpYo_ab]N9ZnThP>-$EQHGdVUGHN@3StU;tY,8g(C6iOte"&\O0"cGKP?j8JK2kK0#tI%89[@5pW>6u9XPAX/p>Zs%E'YXkTc/8`+Sg/ItK:d+iQp3Na.j]'QU46`a$;gj?uo#Sb`@)D\njaWJmY(6->p(ED14YCnc/ModuiJSj?YpMX%)7?Oi!8FgFX2_-,O7V)Q6E%MkVAendstream +endobj +51 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1070 +>> +stream +Gb"/h?#SIU'Sc)L.h8eQ[")8-*.D1rh)_nkL:))HeJh,VdKX]s3,5r#q]3kB/SC@_HNk7`P\nOl/+M^OOa8Q]!2l1Ik4KGHjTJo&(*Fkr)A't$-L]mU8T@aPM?LaW7Gb2F[GnV%_j#2q.1ftY%45"5Oo-(jc=$3j^@ciQVr(a"-EN@;[.R)u0$1k9hJhclmOi.M`Pm3X"\K`2\aiQp@@!R3?LY*eg8&ZbH4sAG*7Wd)WaHGTn&8$P]bL'-^Nclrc0MV*.Sqhd'tI2L&Pa\3oX^)_Y%q=[@7J':lOM%=n$&Yg2AH>CP@#u:*B4M.IS6<>Jt\m[!n1mJ!Aj6(Q\&?LJ+\S3\iNqm3euTSJIgB(DYY)gWjc$,!@>IZ].$kZr0s7.bD4?#Yq\PG'(d-4Q;bNUih[&[_QnouqFH=b`rm*j)>'OmMZHF>,`oEVluhu&mc^.S.>3s;!A]d8Lhq]t,oC:d117l^N0LpA@f8*QRgLuN4;C=OTcTM^tPa[]LakZlYG85='Eq>F]dpbT]5Q$TME@g3""H@\%2&?+(d<#Q&7mKMUd5bM".*.[:0LLBt'?W\3qSXH(;rXbsYUFfdoi1>DDTQ[)pWSHg/O4C6RTUqd31ts'+s%+j*@28rWI18R1=agF[+.tAt3M(56U.Ln:Yl.Dd8cSNlh_K5/r/sKUcHa\5;o$!nIH15XDI~>endstream +endobj +52 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1409 +>> +stream +Gb"/(gMYb8&:N_C/C53R^i">h^3t'#VbPQ3/kZ!R+J;9J=5O!NiF?tBUh+XXdR+6o2G^^CtrWi9&5-"PYCtClH;05c7Tnl(#?uSA*ca/PBB%D!@Au<";L:,6S^E?UEMju1A[u_6:hpuW+CNOW_27M^S\I-+m(eq2IHC`q/XL9eadt\NJ6JICF+7\\jK2Tn'R8Q<<5RE*U!X&V\#XX@%mE(LraAmV2h)SQB1U#[g8_u^IK`2j=5=\BbHs"7m/09H^o'XPS=\ZU7m?uQp(Ip:P53PYWJYV-g%;@e@'HB)I3:Ie*W!*V8Ne.@O8Ag"Ri8@(RDU@u@chGiYbk$Lf/BMQFX$P&:4Wj=o5L=JP)/q.Pc=;E+K:Y:>4dZ!VHL>tB3==<0kC]ApUZZs?WLCnmNbuW<4b'PZ%c3+0d/US,NeNlWabum@]-C=.S3IcL([;QPmWZi7=M_'B]8)mq^\j-YG6-3*bL5dV9(k`n5Dm1R?rr[!;ePdSiPp9b%<'..1]F"m.-hScN!=Jo28%`0RlduO7Y+TDeW331).nG:o&tMNGN`VBf(MibgBkC*k;jPb4^AiLCc0L?==pZ]Weu]Ub<3t8$"C'E(R+4cn/PN1/YVE,_;9]q@e=X70H<8mDHSa_-l:`;V0tt,p(M2Cou#b+,NZ>PbhIbeAENlFHMendstream +endobj +53 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1076 +>> +stream +Gb"/ggMYJ*&;KZP'I.TrOM'rUE626*KI?ukpZ/>S6Qn=[^-.[UNZDe"SG&\V2?tVAZb(_dSWQ,u$n+(c,#X1*:q'lZC$)--QWI5bSTrPbW[rS>O:uq"o,U;LQGc`e%$U-n64d9Y`2Ho;!Rr)lX\PrHUOtWuEF'=&ODV,of!QMkNH)RptR8rM(PVQETDOIR)0?l$N81J=S?&k%dLWQkCg&lR"Ufo&]8^0"LY$Cm"$l[M`Xe;&l.rn@/Ctap+k9b1!.B[5D!CX_!`j`ZA/"A"6ISECQG*,!0,;Wmi(jKcnP2&1=+C3j?tCq"fh//)_FjGT0H[q5?A4W4a;`8j#dS/4<&/=\.IJl[_U#[j\@i._XAf]iN[fM<=>a#?pt>.^NqVN'WZI?Q2Z06ZbdgWiR3cSiZcSA2??j0lcb75KbZWO`)-qK9E'0a=htdEHqZ_0-KoVTL(D:jA=im(I9G0*=b&Jp>clW87Kt.kiMuNmM])qU+oNctg.&XH]Nn,AnV?$SQJ6mJL+*k#`@*6&s<"l*)*`"Z@Ls1IfS+I9$AZYD!:jC:YSa_$u`SF.Cfu!?to3HSnnq[,$nbd_7qL&LXDkbN;6uG*o"A9WW9fendstream +endobj +54 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1357 +>> +stream +Gb"/hD/\/e&BE]*;\7S#YCL.)O,n^UD=*E.kgi`cp6H?5`2t&hNfl6VI^C+uEb[,0AdjJ?5>t)Cr9&WT5LVl2]YjaeiUin7Ro4-J>Fgn+UgnW]Qt)-tGjO;^h]XdJk?>9Q:*oiVWP#E#D/;5u>X%:c'Eu,]cbuX$LJG,^M2%>0MPb$A6`3SC`n^YI=)dZh[lAX(9\n$sbZ65TsFQ\oQ[*^-?puL?IN&p22XlN]96@htYpg%o+P3XG\p$E\2$?Zg#tHQF4"-o58-)mlco3F$H'-/UEfKTSLESW3X%=IP#0\[TcGeGRlN--X)abm%T019W5@^:Ngd7OKrDXU4f"jj/Z)[OOX\2%9"P).FY'(h0O$7,8;>CfL\n]M=f[hs[KZEJ:E-Z"nd?C3fTcN%Gk0Ub(]hr4;O]-_P3ebh&FG`O[\0-[sO@`2G:77Q*mJUJLL"\(@I":P^#RrT@Xe]4CiLWT*n`Dn(iM:Od.t\;"kpL=?$tHXWmt8qr!8^.>ah1pI4aKPN(dF.VM4>#L:F;@F%8\)mSm@?7uO=P='R%TKuC[E1#K:>^K@:km<:GN<@Paf"KJoaQYIleiZR3#9)2e0E`c&CKlpf_[0oW#>C*ZC'+]?N<=2'#@rerI)Ea8")`&ZiZS=(Pr]%5m"WNf-`0QJ&3W9@!?`(0FM]?H,Ss?HT!3Hm!:f2ul0"CV6>V%[],GV25s7LR"[Pi%QX>c-+"k_,ldb=Kkk=^.]c#/"YKC!^-YY<)Nl$!!5[3r1p(A&T7ZC1E2f`!XDD8j;O6is;<1#s8?4R)bm&K]o,)LQ3`ILI58kgbY/T3affZ%n?mGrMdaI(eA:BN_XoBW=iNYjLGLFFGtG0ce<$M*(P0e5qRW\3C>WX;X/dJcn[OZR:(^tCu>I$CR%t%#8>PiH7kI79YQP"%"Ym)jrPY:$U=\J#65%&NroNfra4VI5kG'HaPS&Uo7T3e&hScqT*fpu!7@EB]GQ6F;5Y1jo0n(DYmWCSI.?^UJn[(?WPu2r%Pmeq=mDVE~>endstream +endobj +xref +0 55 +0000000000 65535 f +0000000073 00000 n +0000000134 00000 n +0000000241 00000 n +0000000350 00000 n +0000000462 00000 n +0000000667 00000 n +0000000786 00000 n +0000000991 00000 n +0000001196 00000 n +0000001401 00000 n +0000001607 00000 n +0000001813 00000 n +0000002019 00000 n +0000002225 00000 n +0000002431 00000 n +0000002637 00000 n +0000002843 00000 n +0000003049 00000 n +0000003255 00000 n +0000003461 00000 n +0000003667 00000 n +0000003873 00000 n +0000004079 00000 n +0000004285 00000 n +0000004491 00000 n +0000004697 00000 n +0000004903 00000 n +0000005109 00000 n +0000005315 00000 n +0000005385 00000 n +0000005669 00000 n +0000005887 00000 n +0000007716 00000 n +0000008829 00000 n +0000011036 00000 n +0000012116 00000 n +0000013225 00000 n +0000014376 00000 n +0000015432 00000 n +0000016484 00000 n +0000017572 00000 n +0000018671 00000 n +0000019778 00000 n +0000020884 00000 n +0000022038 00000 n +0000023071 00000 n +0000024072 00000 n +0000025129 00000 n +0000026202 00000 n +0000027306 00000 n +0000028513 00000 n +0000029675 00000 n +0000031176 00000 n +0000032344 00000 n +trailer +<< +/ID +[] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 30 0 R +/Root 29 0 R +/Size 55 +>> +startxref +33793 +%%EOF diff --git a/tests/reportlab_testoutputs/to_delete3.json.pdf b/tests/reportlab_testoutputs/to_delete3.json.pdf new file mode 100644 index 0000000..d84befd --- /dev/null +++ b/tests/reportlab_testoutputs/to_delete3.json.pdf @@ -0,0 +1,277 @@ +%PDF-1.4 +%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com +1 0 obj +<< +/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 6 0 R +>> +endobj +2 0 obj +<< +/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font +>> +endobj +3 0 obj +<< +/BaseFont /Times-Roman /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font +>> +endobj +4 0 obj +<< +/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font +>> +endobj +5 0 obj +<< +/Contents 20 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +6 0 obj +<< +/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F4 /Subtype /Type1 /Type /Font +>> +endobj +7 0 obj +<< +/Contents 21 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +8 0 obj +<< +/Contents 22 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +9 0 obj +<< +/Contents 23 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +10 0 obj +<< +/Contents 24 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +11 0 obj +<< +/Contents 25 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +12 0 obj +<< +/Contents 26 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +13 0 obj +<< +/Contents 27 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +14 0 obj +<< +/Contents 28 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +15 0 obj +<< +/Contents 29 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +16 0 obj +<< +/Contents 30 0 R /MediaBox [ 0 0 396.8504 612.2835 ] /Parent 19 0 R /Resources << +/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ] +>> /Rotate 0 /Trans << + +>> + /Type /Page +>> +endobj +17 0 obj +<< +/PageMode /UseNone /Pages 19 0 R /Type /Catalog +>> +endobj +18 0 obj +<< +/Author (\(anonymous\)) /CreationDate (D:20190221153230-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190221153230-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) + /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False +>> +endobj +19 0 obj +<< +/Count 11 /Kids [ 5 0 R 7 0 R 8 0 R 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R + 16 0 R ] /Type /Pages +>> +endobj +20 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1684 +>> +stream +Gb!SlCK&tI'`FV1TqPgqAhTkTYo'%$V@cC5*o`%eeElUVFObc,?bMLGa&^O81nDmLbtbFTsk7MrS_;ulrGc<>&N@INe%V$f[[,aS$j`$FN.V!0XDKZk*iXp@M?(NW],,T][L5U*G-rE`2r4menYJ9Cq-")WX/*+9g10gndXZ/d%5!`$@eDP!11>b(iHA=okj1]1-a>/]IYqo]P&Ca>_`(QCe4/[=68HXsSI@aZ/-W(mIpPo#tlX#Yju#VM?VUVfpC(Hjn3OOtbU-e)3fIHZAoiID=/i#:_B'&[b59Wfc3%Y?=l0%Sb/om14,__`S],`C$`EjNiVXUB5Fdq`p3gpB]t_k+F_[l@eLB;8WZ(f&lB`Ff.aQV$r2C)A$^aK/N!pOraI,X\@a9rGHO4'hSe0K6.:GrR03q,M@s1thL(q7t6++hXB"Fu0l9uKQS2fAp(Y("HXZ"G\T1eQFn5#s*r2<]8?Mp5.YH64(9K@W=Ir>rREj_@e!YSp3`E5@%B5Vt=T;B4f(nGd>,=[apVXA;WoA9,h.U](8u,K+MIMfd,7E(hBsCC"(^eC=KTRtI`(ucO&0sqb$503nGmVrRlk7rb-[XJ.4'A%oZF>.oPI3Cur/;;$!ER#K/h;D?~>endstream +endobj +21 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 2196 +>> +stream +Gb"/hD0+aG&]`ep;s^;5inPM&4HUaBP8AMSAHoq2(fCpfO5Q'b>;l^NFrn=g"dn_MYm,Ugf4-"Beh3`2.c\c]lImK$);;[rNMt,X!GYM9cA<@kKqR7sC7WD.]:WLH"LatY%f%RZ/qsAdF/FBGHS^HcW\?IH)@p>G7:to_kK:=_`aa;dt[e!GD7nD[)V=XrbNEW_+mi1\;00$oP*63m]l#'`s\c9MaUR'us_)Z#X7DpCidT"I>NPdThWl1RKRj>q@L2"VIRt_6/JVPeBE?p8Cd>ukb^+%#Y_UCtr*d18BKYDIq0Y!q8k?\P"ojJcGP9+h5&#C@C%aHrO1PhBBF-p-\_-dtHSulWi]R,meSZf&/pYY.EP3l1]gS/lK[e?lO-?+2>I.ro`^qn%!m].M?Cm%bieipXZiToMT'JY&.#bufg@ef+>ZVX,15:tjETs+uC-2_O^X@Jh9[_C3eQ:IL#[_C3eJ4H/b[_"c`e%Qo[B[p!u\co9;FRt)b<NfCJ8U59a45%icF(e5/tTUgrP$3k11r8qk/AMm^]?TZ7rnEl%g1S>*`C6MEEi]f"D;>I"&mcoX4-fWHpW5&'(^T+W5^$kgJDM$JTZK>JTaZ]BT/,^FNT@JJhQm>Q\6I5!=N[>N7TBN;ns.&B;;*-h&(fZgU,e*U[K,h>2tgo\NGOZCRdiM=A7As[F3dceZR_(e@S#3rV5374p5Tb(*i`>c-9PKD6.X"52BZBh)<#*>D0+;p[T,>ou9A],k*!o)dUY'f@6[GtA7>"K^3b0rtQ+8t9f)&3$IW0CB6m2'0Q?MIEoA5WW:84Xk4*X.GJ*0E!"B-:c5%6hN@;9"q9oKO$2Roh]Fj`Ytp1iX6]ZVVpp+g`]["]P#L:Xh!ejaE9K=0>IZiO(A-?V\^6!\B4)6%AaG$H^=*3E(SVN0BK:b&D`bLh2uLPgE*D9bPR3F=EI&3R*DX/>HGt>c5+R+@2DXeSca`=0P0U(@V)T/12hg%jV]\5Ti+,J='_p3)BUIP^<>'$p[8PjUArNpd^qJ13)s+!,i9bRK;pA5mBkO*[E(5GU;Pm"2$A()[!_q"),ZZLr[]'/nnj,Y(\PjjiaLBYib*m<[Nj6A:059J?Zg5Y*d)_ameKMNM(QshAG2NJ,qVmeE3eL5Wi.4R/I7$moAl~>endstream +endobj +22 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1070 +>> +stream +Gb"/h>>q"V'Z],,'PF<'N:"ilH\LQ9e_7Xq"mnrh#V7EnM\=P7m<_)iLc&qS1H#R#!mB9QJ,\Ubq[3]8L(@V)7t#oK!Gq.Dhu\K5\=s=^+7L^u/t=[@J?q!Tm`siqIQ)tS7N-+hE)'ta"@4+fja.8.+o"lU5/:m4hL\Vm8KgA-O)iMKaue*sR:d5hhe-5-J>6?Y;S,makl]lW1(22/LDo,#c/J[$DNGVE%XM@dq_##sg_VAI^BXtJ1/$8rWlJr,VeJPK]#`Z\6Nu7/Db!M`&7-&[CKH*:-LlsR'W52/Pf%cVfK;@s\l7.9bf7f2eI0D8Ve)8HiVI3c>F!f>2g*3Y823giQ\Hnq).Jb2&VZ)622_WNaisEu0On+>(KcrcC4Bu@43VPcR,(I&cGo&%Xi)$[]-#o%L1(LqmA3m-Wqh0&iP2IOF_eh<\ZJs'=gfg="`,K!cORh+IDcV>?XedfTtQ;RPH]76o.q&Mn#'&i^s>JcIt+@2Zo6Y*T4sN!8&HTj\$tc"4R@42j4YZaj2YEJIo+%e4'K.KEad.<6ca%8[Agq"ldVWN`Q\LbA[)8YiUF0@4Up#n9&-&A>M/5W;75-/!naLSfW#,E=TrcpX9Gh."jhHFJ?:<:lK;;qqHse;0LHRZk2f+gVFO@J=!jl2k?6NLbUpKVF"9H%;3EdF>;q:Fl&f5UlOcA0ROBIM_m"l(s#\,oTQ.0e:i(D*VO2Zm`S@@?L+-jc[T4(u&aAd1,0KKc_7MF^Or_5n'XQI@*T_GU=m4W(G;r,`r=qV$B"M^L0eP*oaM*&Z5&Rij&7=$tAnPfN.ilRGlOgGh1<]#,5:MIN*44IUQ\1$*bJQ-X][uc!H^\S6\dd!:MJ'1:SKq_o,U<[rj:^QX\UlruZha8J4+f60e#P<4Q+O?oSA_1Mr!9]H0rA.mDA>dVf])DM[;>325CX+WXW-U1Bu:6oBdH'1BB_$7552pSi$9[7#]->eZe+r\OQ-&uCP%#dm-T1>4T6j>173efi32[NSU;W4*n6d^6Le1g]hGJ+@=KoX9,Kk78WHP19~>endstream +endobj +23 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 944 +>> +stream +Gb"/h?#Q2d'Sc)J.uq!+XHHk]@iO0hqs(P&R^A(BScl"?[;2,W4F22^#Nq%`.K&R;!hnr*;f-q]3+hWX$(tuj,f$];@eMgW2S6_-CVfq7`bO(a`\&(JDT8W"&CA\1>@5[mEWpWqjUTe#>]@PF-l_9lfJ$RT3Dd[@&/b5BGKc*Rm0r$!s2`:1i]=@7\X@Gl3)?L"5G2G!aKIBm(3qh;B&HgrMnPa"<>GA%L@dS$,sSV,h/M"MNh,rmC5IkaD#(7nW?Y1;#;@L#*Rcn&X%5Z''f9(8pdlH6IC*GEKVN>%ZX@g_.+mG-p7?h$)QZ!.M?J\KQ=Z?;b\`O,GLb?U<'qe+A/h-'O_UdF_HRt>OinOLo&1K$=P]\779R4m0-@E+-F)AdQEUpri\^8e<;*k#.4P"RIu5"%$=AA7]9,d*^mP)&3`T2PYYO0<$]tB?Lq=a]]C^``gTh)+L+dC0_0E[Yt6"tp)KutX6,,+]r-sJomo*oAX,S^@Q6idJ)5Hl&M,Q~>endstream +endobj +24 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 946 +>> +stream +Gb"/igMY_1&;KY!MNN3P,C-W%4+"R*.93FK;Hp'n`eT@,Bi`F(0Tk6W34=njA:AIW<_KonD]Jf7*)<(B+1Pp:qNE.*5!;%$0'Xi/7tY,(D"8poEGPIf@m>kn-cc7U@=1QrFX"dA,e.O@&'P6TniED6p0JOZsck:N?VHMZT;>H)-sp.sXDU)R>V?4VMrlamn_<7n@2?#/]\FkNnVUMR?T)qZ'8-cJfn_@5.8bXeFdS!s/E?/0VYbQX?FBpCVrUJUId.F;6aAq_\IK*#Us2]EQ(Dr0laT^F4N;LdcZGu'O``IT_S=[6*aqS">IJNrNUHT<%0\9.i0g7bkei)UfT<[Y]/2S_[h-buiB^qMl2DRBMuh(Qg\Q[j]NmXS,O4eW-m,h/M"8e$lL9.j#Q/ODc^0-[)6U%Uc#e4r!_oHYtV69QDWBhpf5P[@37/lEtETb3/p:,rhHdNjI^%2(E1k>7:;q]V274=MWr;X'"9B7q\ph$su2eg!e\NJKVP6k.L#2tpS!>Ju??cpgDl7-t.Th@$]F0uY%J)>/q*Kg@nn;+e!('OllW3]'<+]TnSF2@5"4nMCS?A5m*h4rEC@5gkT>me2,*GSLh`h]XICm_@/u&;?147]DeP7+?c1b.*t>;2#NP5g+uS[YfluLt^$/MLQgs-'T(#QN+KG&o,17K&0i=Uj2)~>endstream +endobj +25 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1254 +>> +stream +Gb"/h?'!]/'Sc)P'h>9)U60%Ch]?.%+/rFD$?=(or*fcmYgm)b!UD2XU)8(>kJMNV;JI3r9p+q(\S,>G&7Mnt-NNgI`mO3Kg6=\9Je/TmU]R0mh'W1/2R(\:.Mt5q9h(mO6N*tpj`^+nh;bEF@G@@cdkDT2R"B`4abL^5'^.S(_X.m\!n?0"b'k9`hbsKA'$XmBS:CDFDm"AGXQBK%[_NJj[&ET!XR(o"rbrd-u4FM[K,['0'FsV?MG9s,4.(Spf-Ik?LD;pW*Hh\GK5IjE!B!Am1bn?b_1i^n(,$qg7TU8@>jP7=$9]*S_n[g8LkW&9-i[CLF]:US3k.OWkd[KH#)Iam&1IMZc8/P!]n`LJsRW2\tQr,V'\RPmNf#'!#=S`9'hjVD7ZM\-LpGdWUY%[b`1tqoI(ACs\$RR?d%nZ<<@ZC3^Z<4RoHW]$K(,)sn$$WV=XAQVZ>0Kgn`sfdXH@%I:bjqq!jsYK.9r6X]%J9nU)De(kfA_VtO<:g]FNtEc^?[O&C.bn1Irb;X'.fB[G^q(n07Xf8p;7#['(2eMRiZ=-)_L%CWfkp7DH$epW"s?].c;dc/`9)u_"k,:go(RAqJif(I"E;(dfBHfcN?d91'6aO!D:[*JqP6CaB5:#YbK-@7A/Uq:%9sQ57.^G/ikV'872JHA-lrDaEi"YWdflOd8[;F9e548+(l/*kRC9Vbhf'Cs&jsCB)bbW?q&Hle\jk1uM(I<#4XQ&Sq'*OfAjEip`;nKUKJp!Y:Eg'PO]6+\_OW-5&r=^hc[j1QhV7T2endstream +endobj +26 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1331 +>> +stream +Gb"/g?#SIU'Sc)T.gQOeZ3!qG_sbccD2/NeZ*s(Diu8JUTb*qh2X?V+oIGHI?7Vm9O=,@HdCMpA]*(Z5iM%dmr82A/3_QjS,`sr@b4"CL[#!Jb[g:Dod0nhhr/?_!Qg[X*?=m)okh;lMA@>]L#VT&(%cWB7KgE%P^BD&VF$?E[0^B1V7J%Ba&^]WA5Qgk/D.Fc-0Et3)c1\P=[sGbJe3.MTOpo3d6L_D/8\5j%)rF/s_J^CfQ$2Y`$K,*mQBd5J*Z9);+W;fOZgS',Ef&MNNuS)u00K/os0[(l+WR:&jb,Y*Ju8@4P#aIVs3+h14gpds%uk5=B%1]T,`3V_FO_IBbj-mW.Ggs)47P!F4M!\1#r>#8bARK+!@d(L3sN\7?\#nNPl?IDA:@hu^PuV?bRF4r3Nr?eS)>@,iL!0JuEKZqQi#H4S_da/#:$WjH8aBLa4WMV$8lH1'iaXfN9*i:u9HH]p)i?_Fo_R?n9ZZASt$aEIcKe&0#23]FiC(WLUOl[Ja-+;\8C0^C_6_Fj8!#pBikfPr95H2gI?"ei*K,>:SM?CQqsM:5a3jS@_?[;`/dpQQ`J#69B$p],?L%j7AN5%*j\Hh[T#"&##5OCX6qKR(;XY'9@9hj=qqc0WS(4#_kG$$\!7&;&.,1M:A,&mX4f=_0-"gk(kN3WpsX0Yp*69KN[n>>WrZXEEY`-@iAW)o08m4<5)#J02T1^`L7"ZZRendstream +endobj +27 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1469 +>> +stream +Gb"/hgMZ%0&;KZP'EiaB/g-RPiGn=4a;-@bU'L.][hMC[hR2CGXX)0G0C;/nPfelc#gF^#PK8kUipY9RoRESQU%*nTQYo+1pJWhm`s;c&bmEDZ-duGEflZl4BH$uhkV`M:gZ)=X5D2chC8$bDQK%$k10p!Hrg$5BP3JI\c@cXDlC*ZfJPDAU(pbEne"[O;16.(dI+^"u3^DWjd'Gl]jI(qm:60ghm9#B'f!d^4HRN>'DHfPn8CH8>"Ui!RtH_NRqnYCuQ\u%a\INOk6@<]+JU,R_'bnutI9OO*Cj*EJ0s8M1'bOR")fRKpG-qh$D=:2Mr<2n#TWafIOnCmG$K&KSJKu=0&8Ph]On:>2?m;4XO,kOVB0bpQXo`n]SoB#7\QYnUn5@)rfrNrI!]=jagXX?h*L7$hH%e\[CW#84d,FW%h@CpiTaZc]N'SP2:o"iVTC:Q0Qqf=3OO3#9?j!]jP%9hg8_Zp3_:1jm_JEIp8)1VGnN2Qh^;pP]@XKMPL;409Sruk>.j0hB$T-X'8Qtpp`40J!G1X$cKG.&1spuLhgQ%)Zd#Ad<]PY\5ign$)n*f=rF"+m<#scT;tUC!']nmnGs@fiPPsD%_r>:17)sTBk!K/-[[o4_lLh5L$s'2(I\kO>*E0->R6_[N]X&d"QZhr8E3]tU4u`7%ES>Fe?H^NG='+,U"!K(!T4Q)ki:c&p7MWH%KP[WEUu%q.q*!?,b^PI+JC['Rs"e3tis>KX_S&El*u$$`t"kWTZ],+@B.j+WHLd/'-Y.!3ZIVTF\saYloReJ0jc+/7Dp]P8U:?N'jg;ELh'E3jCg*Ben]`:1hGBg^GV*2EpRZn0#-fekmk9"Qag0jFV>Kj>M4D$Zendstream +endobj +28 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1410 +>> +stream +Gb"/i=``=U&BE]$.593e2`%7[`LXIZ8Z/+SVeMDi?6L;s&flg&>P5HY8=Pr5d1X?U>?eBb)-df45I&E1_(\/7IZ`XGXq:GLL8M-\,(O8+&XG1/q]3A=9g2>[$Qt$/$eub`8',$Q.TKGf71g[lc$r*e'fsh$UY,l/H]aru-?`=Z%6,Ys!_$AZPRn8Nr?PAc)(4YIkOs;/cEEsuEfkB92+h=flVVm]_*sFTP]H-X&_8QhU:HK6P8)C2p[(DW4X'WgVlqOIGong1Jru:5)SO+-*BK[Xo?1$0d^BktRi2S[BlQZ2r&.(AV,Pf]HM5A`AIVFpY()?o+!rEMnKh&TC&UGu5_&_f8L6m=nlDmXRh].#oQO`Zc/Z;nr+=9nE*>u[^9PTCcrh);`Sc6eZL)+MQ$N!BG7gLA.fpat)lYnPlLuPlj!)9oH"(65-V=VgqW_$V0J""GYB/[igL#GJk!Hto58R:;5]nCU2qU3'=CSeL#udK0/I5.boEp6BGco-E0T/l/#=t\uQ1dG1bb&g^2jN1,ID=Rcq%7XSrKI'Eg+8ACD`=#@Y,=ProbAo4endstream +endobj +29 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 1410 +>> +stream +Gb"/hD/\/e&BE]*;\7TNXFOjPNfSUtFmZDA(m`Dup6Ho%`/PeH[ZW3!^9enD"h&/]`n%^n@QW"p4Pu]Ts.:`0B`)G2B/_4!`sEWu@>"ZLjFm&fPK@b(ojm]7['9U>FCTm"oC4AYRR3m->%f1?D>tiE3OrPiHSTkB-83qO?cIB6bCQNa+WqAQ.:X'ds&!MV^]2\enH/>6))u[W:_\I.G#b)N&,g$nS0eNLYJQIHdXfjb0V[BUFb6NNPj=ko*s<3jjl)#pq=2E2qaoJF$"`Q1"_0WmB2)R$(fpJ/U9:#8Xor;:hGGn9E^VBc@[p?A\k^cI"rLpkL'P`S-$pAjVe[5>-N"6#0q7!>G%Y5(Ya;JWi0NdFQo(XA-$#A;h-`hF&4(4u;rb#.f\[L@BR"8crG-en+/N5^+%=W1cJf@+-2I/q;5sbE-sP<9mLJc#7fFml;o=-n+h"%u+Wco'(gb)kO%KLkSu8(,Q[=$2D1I1YLOluPkJ@:P"/gn&%&l$CYX#2[>+oCc2`/U,!O`?e&En@<$?oISL*7V'L+eH'd*NG&"91J@J:U(e_<_AVcVQtN/XNaJ2=TE%d-V.ELSoVr%D%UbSq7mQnM49F",*<\cEiVbb_q+QToVa7N#I]mMV%kB@!&51hK3ail1G)P&'/0\q6,_9_s6?.r:'3;hG9J^X("rY=m?doEB]qIEG+f#26T1Eh8LJ&CM1jZPSTrL^j*YXXb8S<^sr"M>*,FmaH/!pO>USHg"'\(9Y.gsE4OQV0h\'q6t$(SdaC/gMeE:#[VPX"gVJZKI92&@ErpaA^Va(/FO;$lI)(L<+1gr-,jUJSnG(fdd;HH11>p&/J.H:7016_7b>k;+R5YI/AN13gdlqgQ!BR]`#&0OC%~>endstream +endobj +30 0 obj +<< +/Filter [ /ASCII85Decode /FlateDecode ] /Length 772 +>> +stream +Gatm9>u03/'Re<2\;qY.*++1@%Zf@Pg,)N5"LM7j32M_DciuQ1rS2p[_qL&MbI;nIn+#p2OV+NRZ$VoDi*uf0.0;7Q.R69&']7lFM!h#J@=Y^PfLs!F`Kq8fiESsn!V,snM?YD`+/$,pib1.EbiSB4)'tYi`^*MsKp4UsLu^#0P^p73jYWFlSETJ9<%n[AD;,Ak&4kE)^hKToYHpZ-O6QZHGbG)rQOCc.q]1*R6+a,!Qt=1;i]4)]Ic"*h:70e+g3U?tY3?7f>oFM68NZSDA5f@Ja2&ft[(/rO3f25Q1MRaY/=mVX1N=W4,j@=EeAbmdYj=8A-.g/M0OK<.IY'K:;K[&n@)Z>)Kbbl".ZMPiNTRf?Z2nAK[`Tq9MI8#0OAO9#J19P1J;/p7+(W#:,te_mBpD<8NMgUl!UP-!8Nni0i;XP-+DCLS&R;U&sGN"s+.q5XVs;>eB43seMendstream +endobj +xref +0 31 +0000000000 65535 f +0000000073 00000 n +0000000134 00000 n +0000000241 00000 n +0000000350 00000 n +0000000462 00000 n +0000000667 00000 n +0000000786 00000 n +0000000991 00000 n +0000001196 00000 n +0000001401 00000 n +0000001607 00000 n +0000001813 00000 n +0000002019 00000 n +0000002225 00000 n +0000002431 00000 n +0000002637 00000 n +0000002843 00000 n +0000002913 00000 n +0000003197 00000 n +0000003328 00000 n +0000005104 00000 n +0000007392 00000 n +0000008554 00000 n +0000009589 00000 n +0000010626 00000 n +0000011972 00000 n +0000013395 00000 n +0000014956 00000 n +0000016458 00000 n +0000017960 00000 n +trailer +<< +/ID +[<7e72719e484ae77a932aa93b5162abc5><7e72719e484ae77a932aa93b5162abc5>] +% ReportLab generated PDF document -- digest (http://www.reportlab.com) + +/Info 18 0 R +/Root 17 0 R +/Size 31 +>> +startxref +18823 +%%EOF diff --git a/tests/test_reportlab.py b/tests/test_reportlab.py index 13def0e..662276c 100644 --- a/tests/test_reportlab.py +++ b/tests/test_reportlab.py @@ -2,11 +2,12 @@ # -*- coding: utf-8 -*- import unittest -import json -import sys -from io import BytesIO +from pymisp import MISPEvent + +from pymisp.tools import reportlab_generator + +import os -from pymisp import MISPEvent, MISPSighting, MISPTag, reportlab_generator class TestMISPEvent(unittest.TestCase): @@ -25,17 +26,28 @@ class TestMISPEvent(unittest.TestCase): def test_basic_event(self): self.init_event() - reportlab_generator.register_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), self.storage_folder + "basic_event.pdf") + reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), self.storage_folder + "basic_event.pdf") def test_event(self): self.init_event() self.mispevent.load_file(self.test_folder + 'to_delete1.json') - reportlab_generator.register_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), + reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), self.storage_folder + "basic_event.pdf") - # TODO : To modify below this line - def test_loadfile(self): - self.mispevent.load_file('tests/mispevent_testfiles/event.json') - with open('tests/mispevent_testfiles/event.json', 'r') as f: - ref_json = json.load(f) - self.assertEqual(self.mispevent.to_json(), json.dumps(ref_json, sort_keys=True, indent=2)) + def test_batch_OSNT_events(self): + self.init_event() + + file_nb = str(len(os.listdir(self.test_folder))) + i = 0 + + for file in os.listdir(self.test_folder): + self.mispevent = MISPEvent() + file_path = self.test_folder + file + + print("Current file : " + file_path + " " + str(i) + " over " + file_nb) + i += 1 + + self.mispevent.load_file(file_path) + + reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), + self.storage_folder + file + ".pdf") From 76ef3d058fcc5a1e43feff3c2bc1772f73830e72 Mon Sep 17 00:00:00 2001 From: Falconieri Date: Fri, 22 Feb 2019 11:34:41 +0100 Subject: [PATCH 5/5] fix: [pdfexport] Fix tests paths, dependency in pipfile, imports, and 'file' name overwrite in test function --- Pipfile | 1 + pymisp/tools/reportlab_generator.py | 66 ++++----------------- tests/reportlab_testoutputs/basic_event.pdf | 4 +- tests/test_reportlab.py | 10 ++-- 4 files changed, 20 insertions(+), 61 deletions(-) diff --git a/Pipfile b/Pipfile index 801ad01..a6b48c8 100644 --- a/Pipfile +++ b/Pipfile @@ -13,6 +13,7 @@ requests-mock = "*" pymisp = {editable = true,extras = ["fileobjects", "neo", "openioc", "virustotal"],path = "."} pydeep = {editable = true,git = "https://github.com/kbandla/pydeep.git"} pymispwarninglists = {editable = true,git = "https://github.com/MISP/PyMISPWarningLists.git"} +reportlab = "*" [requires] python_version = "3.6" diff --git a/pymisp/tools/reportlab_generator.py b/pymisp/tools/reportlab_generator.py index 7009576..602d718 100644 --- a/pymisp/tools/reportlab_generator.py +++ b/pymisp/tools/reportlab_generator.py @@ -11,22 +11,21 @@ import pymisp logger = logging.getLogger('pymisp') # Potentially not installed imports -try: - from reportlab.pdfgen import canvas - from reportlab.pdfbase.pdfmetrics import stringWidth - from reportlab.lib import colors +#try: +from reportlab.pdfgen import canvas +from reportlab.pdfbase.pdfmetrics import stringWidth +from reportlab.lib import colors - from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak, Spacer, Table, TableStyle, Flowable - from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle +from reportlab.platypus import SimpleDocTemplate, Paragraph, PageBreak, Spacer, Table, TableStyle, Flowable - from reportlab.lib.units import mm, inch - from reportlab.lib.enums import TA_RIGHT, TA_CENTER, TA_JUSTIFY, TA_LEFT - from reportlab.lib.pagesizes import letter, inch +from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle +from reportlab.lib.units import mm +from reportlab.lib.enums import TA_RIGHT, TA_CENTER, TA_JUSTIFY, TA_LEFT - HAS_REPORTLAB = True -except ImportError: - HAS_REPORTLAB = False - print("ReportLab cannot be imported. Please verify that ReportLab is installed on the system.") +# HAS_REPORTLAB = True +#except ImportError: +# HAS_REPORTLAB = False +# print("ReportLab cannot be imported. Please verify that ReportLab is installed on the system.") ######################################################################## @@ -675,7 +674,6 @@ def convert_event_in_pdf_buffer(misp_event: pymisp.MISPEvent): def get_values_from_buffer(pdf_buffer): return pdf_buffer.value() - def get_base64_from_buffer(pdf_buffer): return base64.b64encode(pdf_buffer.value()) @@ -690,45 +688,5 @@ def register_to_file(pdf_buffer, file_name): f.write(pdf_buffer.read()) def register_value_to_file(pdf_value, file_name): - with open(file_name, 'wb') as f: f.write(pdf_value) - - -if __name__ == "__main__": - # pdf_buffer = convert_event_in_pdf_buffer(None) - - # register_to_file(pdf_buffer, 'test.pdf') - get_sample_fonts() - get_sample_styles() - # get_values_from_buffer(pdf_buffer) - # get_base64_from_buffer(pdf_buffer) - -''' In the future ? -try: - from pymispgalaxies import Clusters - has_pymispgalaxies = True -except ImportError: - has_pymispgalaxies = False - -try: - from pytaxonomies import Taxonomies - has_pymispgalaxies = True -except ImportError: - has_pymispgalaxies = False -''' -''' -class ReportLabObject(): - - def __init__(self, parameters, strict=True, standalone=True, **kwargs): - super(ReportLabObject, self).__init__('reportlab', strict=strict, standalone=standalone, **kwargs) - self._parameters = parameters - self.generate_attributes() - - def generate_attributes(self): - first = self._sanitize_timestamp(self._parameters.pop('first-seen', None)) - self._parameters['first-seen'] = first - last = self._sanitize_timestamp(self._parameters.pop('last-seen', None)) - self._parameters['last-seen'] = last - return super(ReportLabObject, self).generate_attributes() -''' diff --git a/tests/reportlab_testoutputs/basic_event.pdf b/tests/reportlab_testoutputs/basic_event.pdf index d967730..18ec6ae 100644 --- a/tests/reportlab_testoutputs/basic_event.pdf +++ b/tests/reportlab_testoutputs/basic_event.pdf @@ -202,7 +202,7 @@ endobj endobj 24 0 obj << -/Author (\(anonymous\)) /CreationDate (D:20190221153022-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190221153022-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) +/Author (\(anonymous\)) /CreationDate (D:20190222095950-01'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20190222095950-01'00') /Producer (ReportLab PDF Library - www.reportlab.com) /Subject (\(unspecified\)) /Title (\(anonymous\)) /Trapped /False >> endobj @@ -379,7 +379,7 @@ xref trailer << /ID -[] +[<0f16994cff7b04926980333b4fec6185><0f16994cff7b04926980333b4fec6185>] % ReportLab generated PDF document -- digest (http://www.reportlab.com) /Info 24 0 R diff --git a/tests/test_reportlab.py b/tests/test_reportlab.py index 662276c..6aafaf0 100644 --- a/tests/test_reportlab.py +++ b/tests/test_reportlab.py @@ -14,8 +14,8 @@ class TestMISPEvent(unittest.TestCase): def setUp(self): self.maxDiff = None self.mispevent = MISPEvent() - self.test_folder = "reportlab_testfiles/" - self.storage_folder = "reportlab_testoutputs/" + self.test_folder = "tests/reportlab_testfiles/" + self.storage_folder = "tests/reportlab_testoutputs/" def init_event(self): self.mispevent.info = 'This is a test' @@ -40,9 +40,9 @@ class TestMISPEvent(unittest.TestCase): file_nb = str(len(os.listdir(self.test_folder))) i = 0 - for file in os.listdir(self.test_folder): + for curr_file in os.listdir(self.test_folder): self.mispevent = MISPEvent() - file_path = self.test_folder + file + file_path = self.test_folder + curr_file print("Current file : " + file_path + " " + str(i) + " over " + file_nb) i += 1 @@ -50,4 +50,4 @@ class TestMISPEvent(unittest.TestCase): self.mispevent.load_file(file_path) reportlab_generator.register_value_to_file(reportlab_generator.convert_event_in_pdf_buffer(self.mispevent), - self.storage_folder + file + ".pdf") + self.storage_folder + curr_file + ".pdf")