From c54342e6b9e7b821444788a9a3da665523e7adf9 Mon Sep 17 00:00:00 2001 From: Lou Stella Date: Mon, 27 Feb 2023 16:40:38 -0600 Subject: [PATCH 1/3] Copy content from phantomcyber/playbooks --- playbooks/Dynamic_Related_Tickets_Search.json | 735 ++++++++++++++++++ playbooks/Dynamic_Related_Tickets_Search.png | Bin 0 -> 73361 bytes playbooks/Dynamic_Related_Tickets_Search.py | 278 +++++++ .../ServiceNow_Related_Tickets_Search.json | 576 ++++++++++++++ .../ServiceNow_Related_Tickets_Search.png | Bin 0 -> 51524 bytes .../ServiceNow_Related_Tickets_Search.py | 452 +++++++++++ ...Splunk_Notable_Related_Tickets_Search.json | 380 +++++++++ .../Splunk_Notable_Related_Tickets_Search.png | Bin 0 -> 47685 bytes .../Splunk_Notable_Related_Tickets_Search.py | 344 ++++++++ 9 files changed, 2765 insertions(+) create mode 100644 playbooks/Dynamic_Related_Tickets_Search.json create mode 100644 playbooks/Dynamic_Related_Tickets_Search.png create mode 100644 playbooks/Dynamic_Related_Tickets_Search.py create mode 100644 playbooks/ServiceNow_Related_Tickets_Search.json create mode 100644 playbooks/ServiceNow_Related_Tickets_Search.png create mode 100644 playbooks/ServiceNow_Related_Tickets_Search.py create mode 100644 playbooks/Splunk_Notable_Related_Tickets_Search.json create mode 100644 playbooks/Splunk_Notable_Related_Tickets_Search.png create mode 100644 playbooks/Splunk_Notable_Related_Tickets_Search.py diff --git a/playbooks/Dynamic_Related_Tickets_Search.json b/playbooks/Dynamic_Related_Tickets_Search.json new file mode 100644 index 0000000000..5c06f3b24e --- /dev/null +++ b/playbooks/Dynamic_Related_Tickets_Search.json @@ -0,0 +1,735 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Dynamic Related Ticket Search", + "coa": { + "data": { + "description": "Detects available indicators and routes them to dynamic related ticket search playbooks. The output of the analysis will update any artifacts, tasks, and indicator tags.", + "edges": [ + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_3_to_port_6", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "id": "port_0_to_port_7", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "7", + "targetPort": "7_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_7_to_port_3", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_7_to_port_5", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "5", + "targetPort": "5_in" + }, + { + "id": "port_6_to_port_8", + "sourceNode": "6", + "sourcePort": "6_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "conditions": [ + { + "index": 1 + } + ], + "id": "port_8_to_port_9", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "9", + "targetPort": "9_in" + }, + { + "id": "port_10_to_port_11", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "11", + "targetPort": "11_in" + }, + { + "id": "port_11_to_port_1", + "sourceNode": "11", + "sourcePort": "11_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_8_to_port_14", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "14", + "targetPort": "14_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_14_to_port_10", + "sourceNode": "14", + "sourcePort": "14_out", + "targetNode": "10", + "targetPort": "10_in" + } + ], + "hash": "a6c7d1370562fa8c2c59b56f47c3fd52f27f8b37", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 300, + "y": 0 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 300, + "y": 1358 + }, + "10": { + "data": { + "advanced": { + "customName": "merge reports", + "customNameId": 0, + "description": "Format a note that merges together normalized data. The data will come from the playbooks launched by the Dispatch Ticketing Playbooks block.", + "join": [], + "note": "Format a note that merges together normalized data. The data will come from the playbooks launched by the Dispatch Ticketing Playbooks block." + }, + "customDatapaths": { + "dispatch_filter_1": { + "condition_1:dispatch_ticketing_playbooks:outputs:observable.matched_fields": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.matched_fields", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.matched_fields" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.source": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.source", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.source_link": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.source_link", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source_link" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.assignee": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.assignee", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.assignee" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.creator_name": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.creator_name", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.creator_name" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.end_time": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.end_time", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.end_time" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.message": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.message", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.message" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.name": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.name", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.name" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.number": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.number", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.number" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.start_time": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.start_time", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.start_time" + }, + "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.state": { + "contains": [], + "isCustomDatapath": true, + "label": "condition_1:dispatch_ticketing_playbooks:outputs:observable.ticket.state", + "value": "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.state" + } + } + }, + "functionId": 1, + "functionName": "merge_reports", + "id": "10", + "parameters": [ + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.name", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.number", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.message", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.start_time", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.end_time", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.assignee", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.creator_name", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.state", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.matched_fields", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source_link" + ], + "template": "SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Matched Fields | Source | Source Link |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} | {9} | {10} |\n%%\n", + "type": "format" + }, + "errors": {}, + "id": "10", + "type": "format", + "warnings": {}, + "x": 280, + "y": 1032 + }, + "11": { + "data": { + "advanced": { + "customName": "ticketing update", + "customNameId": 0, + "join": [] + }, + "customFunction": { + "draftMode": false, + "name": "workbook_task_update", + "repoName": "community" + }, + "functionId": 4, + "functionName": "ticketing_update", + "id": "11", + "selectMore": false, + "type": "utility", + "utilities": { + "workbook_task_update": { + "description": "Update a workbook task by task name or the task where the currently running playbook appears. Requires a task_name, container_id, and a note_title, note_content, owner, or status.", + "fields": [ + { + "dataTypes": [ + "*" + ], + "description": "Name of a workbook task or keyword 'playbook' to update the task where the currently running playbook appears. (Required)", + "inputType": "item", + "label": "task_name", + "name": "task_name", + "placeholder": "my_task", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Note title. (Optional)", + "inputType": "item", + "label": "note_title", + "name": "note_title", + "placeholder": "My Title", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Note content. (Optional)", + "inputType": "item", + "label": "note_content", + "name": "note_content", + "placeholder": "My notes", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "Accepts 'incomplete', 'in_progress, or 'complete'. (Optional)", + "inputType": "item", + "label": "status", + "name": "status", + "placeholder": "in_progress", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "*" + ], + "description": "A user to assign as the task owner or keyword 'current\" to assign the task to the user that launched the playbook. (Optional)", + "inputType": "item", + "label": "owner", + "name": "owner", + "placeholder": "username", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "phantom container id" + ], + "description": "The ID of a SOAR Container. (Required)", + "inputType": "item", + "label": "container", + "name": "container", + "placeholder": "container:id", + "renderType": "datapath", + "required": false + } + ], + "label": "workbook_task_update", + "name": "workbook_task_update" + } + }, + "utilityType": "custom_function", + "values": { + "workbook_task_update": { + "container": "container:id", + "note_content": "merge_reports:formatted_data", + "note_title": "Dynamic Related Ticket Search Report", + "owner": null, + "status": "complete", + "task_name": "playbook" + } + } + }, + "errors": {}, + "id": "11", + "type": "utility", + "warnings": {}, + "x": 280, + "y": 1210 + }, + "14": { + "data": { + "advanced": { + "customName": "dispatch filter", + "customNameId": 1, + "description": "Create a dataset with the output of the dispatch playbooks that is not None", + "join": [], + "note": "Create a dataset with the output of the dispatch playbooks that is not None" + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "dispatch_ticketing_playbooks:playbook_output:observable", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "outputs exist", + "logic": "and" + } + ], + "functionId": 3, + "functionName": "dispatch_filter_1", + "id": "14", + "type": "filter" + }, + "errors": {}, + "id": "14", + "type": "filter", + "warnings": {}, + "x": 340, + "y": 852 + }, + "3": { + "data": { + "advanced": { + "customName": "filter new artifacts", + "customNameId": 0, + "description": "Only dispatch rplaybooks against new artifacts.", + "join": [], + "note": "Only dispatch rplaybooks against new artifacts.", + "scope": "default" + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "artifact:*.id", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "artifacts", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "filter_new_artifacts", + "id": "3", + "type": "filter" + }, + "errors": {}, + "id": "3", + "type": "filter", + "warnings": {}, + "x": 200, + "y": 328 + }, + "5": { + "data": { + "advanced": { + "join": [] + }, + "functionId": 2, + "functionName": "add_comment_2", + "id": "5", + "selectMore": false, + "tab": "apis", + "type": "utility", + "utilities": { + "comment": { + "description": "", + "fields": [ + { + "description": "", + "label": "comment", + "name": "comment", + "placeholder": "Enter a comment", + "renderType": "datapath", + "required": true + }, + { + "hidden": true, + "name": "container", + "required": false + }, + { + "hidden": true, + "name": "author", + "required": false + }, + { + "hidden": true, + "name": "trace", + "required": false + } + ], + "label": "add comment", + "name": "comment" + } + }, + "utilityType": "api", + "values": { + "comment": { + "_internal": [ + "container", + "author", + "trace" + ], + "comment": "No new artifact data found in event." + } + } + }, + "errors": {}, + "id": "5", + "type": "utility", + "warnings": {}, + "x": 420, + "y": 344 + }, + "6": { + "data": { + "advanced": { + "customName": "Dispatch Ticketing Playbooks", + "customNameId": 0, + "join": [] + }, + "functionId": 1, + "functionName": "dispatch_ticketing_playbooks", + "id": "6", + "inputs": { + "artifact_ids_include": { + "datapaths": [ + "filtered-data:filter_new_artifacts:condition_1:artifact:*.id" + ], + "deduplicate": false + }, + "indicator_tags_exclude": { + "datapaths": [], + "deduplicate": false + }, + "indicator_tags_include": { + "datapaths": [], + "deduplicate": false + }, + "playbook_repo": { + "datapaths": [], + "deduplicate": false + }, + "playbook_tags": { + "datapaths": [ + "ticket" + ], + "deduplicate": false + } + }, + "playbookName": "dispatch_input_playbooks", + "playbookRepo": 3, + "playbookRepoName": "community", + "playbookType": "data", + "synchronous": true, + "type": "playbook" + }, + "errors": {}, + "id": "6", + "type": "playbook", + "warnings": {}, + "x": 140, + "y": 508 + }, + "7": { + "data": { + "advanced": { + "customName": "artifact decision", + "customNameId": 0, + "description": "Determine if artifacts exist to run through the playbook.", + "join": [], + "note": "Determine if artifacts exist to run through the playbook." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "artifact:*.id", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "artifact exists", + "display": "If", + "logic": "and", + "type": "if" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "artifact does not exist", + "display": "Else", + "logic": "and", + "type": "else" + } + ], + "functionId": 1, + "functionName": "artifact_decision", + "id": "7", + "type": "decision" + }, + "errors": {}, + "id": "7", + "type": "decision", + "warnings": {}, + "x": 360, + "y": 148 + }, + "8": { + "data": { + "advanced": { + "customName": "outputs decision", + "customNameId": 0, + "description": "Determine if outputs exist.", + "join": [], + "note": "Determine if outputs exist." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "dispatch_ticketing_playbooks:playbook_output:observable", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "output exists", + "display": "If", + "logic": "and", + "type": "if" + }, + { + "comparisons": [ + { + "conditionIndex": 1, + "op": "==", + "param": "", + "value": "" + } + ], + "conditionIndex": 1, + "customName": "outputs do not exist", + "display": "Else", + "logic": "and", + "type": "else" + } + ], + "functionId": 2, + "functionName": "outputs_decision", + "id": "8", + "type": "decision" + }, + "errors": {}, + "id": "8", + "type": "decision", + "warnings": {}, + "x": 220, + "y": 672 + }, + "9": { + "data": { + "advanced": { + "join": [] + }, + "functionId": 3, + "functionName": "add_comment_3", + "id": "9", + "selectMore": false, + "tab": "apis", + "type": "utility", + "utilities": { + "comment": { + "description": "", + "fields": [ + { + "description": "", + "label": "comment", + "name": "comment", + "placeholder": "Enter a comment", + "renderType": "datapath", + "required": true + }, + { + "hidden": true, + "name": "container", + "required": false + }, + { + "hidden": true, + "name": "author", + "required": false + }, + { + "hidden": true, + "name": "trace", + "required": false + } + ], + "label": "add comment", + "name": "comment" + } + }, + "utilityType": "api", + "values": { + "comment": { + "_internal": [ + "container", + "author", + "trace" + ], + "comment": "No observable data found from dispatched playbooks." + } + } + }, + "errors": {}, + "id": "9", + "type": "utility", + "warnings": {}, + "x": 0, + "y": 868 + } + }, + "notes": "Outputs:\ntags indicators\nadd relevant tickets" + }, + "input_spec": null, + "output_spec": null, + "playbook_type": "automation", + "python_version": "3", + "schema": "5.0.9", + "version": "6.0.0.114895" + }, + "create_time": "2023-02-27T20:44:02.427087+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [] +} \ No newline at end of file diff --git a/playbooks/Dynamic_Related_Tickets_Search.png b/playbooks/Dynamic_Related_Tickets_Search.png new file mode 100644 index 0000000000000000000000000000000000000000..a884a3caf4ed3e0d4ed230c255aa94c185b3a900 GIT binary patch literal 73361 zcmeFZWmHwsyDtnIkWvIG1?dI}Q9v4{yE~QcmTnag0YSQ@yJ6EIf;7?{lF|**@7$Q@ zod2hH+%fL?a2bOgYpq$&eB$@S+<|g3qPNfp(BRnk`e6%!lcuwkUX<=p0<;+Wd{R9{I47gAErmvy+n(lhY$6Ydd4+ zhn$?8%q*L@DXib;FRUFMc*)6O z1O55?IZs1p)4wBG+5cJ=SRga(4)a4M7Un;FgQh&Nt6XxX&W0B1LZ+60JYWpIhpg;u zJl75W$F09Z{?kvAyN9kcQ1CE=U7g2pDFJBrP8#k1F@(ML_`oLONdiDwl9uZRj?&k|WN;>h&u`ni+ z8`8foftv!9ImOvAVVZ@Af1gxEp{z~CeGK`hv84B0RM)SLz=KU}5JYIA90Y~b z8}=e#)5UiE;reBc0Nz(~)Pd^O(?5+!tCk4<4r~()*IZy;6aMCBYgi-9DZ5*Lzg3Bl zW?0Ca3@m3Zzb90ZmuHGqk9~Ge=NV78Bg~lddxjXi=iw0x6zcH$IhvCnXWk5pDBMX5g4O@+D^U9 z4f(UCIaaWWXh+(fKdZQ-?mfpI=9XMZ@w*`tHffcky8poa-}EC5Lqf5_u0A&9{!Nl!t63cp-k`>CoLG=gB{%a#x6tzhHX;i&*Dn|c+ ze(O=Z2-+XQ!ukBbL2+AT=Zlvv!1^PC|B008)F!p2>=2YHIZ|$J(NcRmN>0w!*9B?f zyYyctCn*X>F6ashzRjlHDY`L4=%WTm-=+|6Pv$K!gs7w!&&|Yawxq}c`G}V7WidWV z4R4kG_P)Qs97IYIW$JAL3hA64Jll&dU+)h{RU(N~+(SLmupM8Mp70fbptInT`Ec{g z#PzZf&=3i;E$9GA+p2wk15Z~X&i>wdIEXEC(=9{W+1HN&dx&6*NlHeir}x{v zhBlU!J*tB|xn?a=a?lFvc{(N{rcG|sk6mm^1_p+;;q~v|-`BgXr+O00TuU-bDcs;4 zk)!9#5EP&Z!r8P4gPK&Z3=Is#%;*=8Y~8En96<+xKxs*Gg&X~yQvlFfxPQM^iFnVA zuxX16{^fOr&gBSZODi)B_0<2c+4SL~qSn^Q>Q#{n_E!6QFODT zp*!<19+`ce4Lf)Fwr#=8pSf)K9WNA!jwTPWBK0dA!x)oaq8Hlk7DE;OtSJ_9z7c=n z`%@hP-R}I|M)b;a1kA^$3NuDcfh#@9Z1H7hM2=vksCi2gZ*4|xEw@IiVj()>nwe8= z3hrZgcw_XPDFWl;+ZBRvKD6lW^LvturIO67y>@-|x7%m88~VmXu8jjJA0mp?LRxY* z6$C{{TyJZt#lVK8b|X;qV0@%tHl=a2$m@}WF@8sHZxmG!exPg1cogGy=ZweMK{d5( z(gVwaf`PANcSox2?d=TCU+tFK8?){Ew1h9}0R@2%?>p(dO1BmW2YHAs*IY=@Qz7br zjNBNO+s=PwTXf%II>MYePo*GAR@Ws`hVSGDMXBqdhVDc!_QvsOqi3S~`Bd4`*n(_S zW@e_|Z5n={j4_=6E7*=2D&2)gOl3^Tq#PT(GgSWCv1<3uJ(ns zTSbXapb?Qo>H8PoY4|@#GFPjG@L#IcZ=YUWl@#SPGyWnNPxrw}vQr^bWp=h) zXpNQ2F|T~{=4zIgP%rPw1EL?fb51jL)q7{Nv#I-e@hd|pmJ$+g`Hn^#PwL(0v7;q+ zU!ih&wB5^E-=;~@60ymn`hftCI7N?nl-4wbCRmFpKw5&RMY?SBrZo>AVOEG4%#iKfOrm%qlal17- znyyhmBV+ds2ldknk`tLoO7RBAioI^d(5`fGs)7Fg99_BRp#u}KN-1aYvzN^>1hX9- zM(S-ccYyxz4g!p;Jrw&G0HjaYRhMt9*H=;fBm>(VUVr-Z?Br90>bjzIagtF=ChnMZ zQR&KOV%P7@b}fgxA8uJ&MHnZ0%;1k*t}V~Db6Ed4oimg0@VIzyX@;oE$Z>Uwub_VN zX3C?_!&S*iOoSb_JSHrF5yV9YZUVl3C-4}e?!^|*=Mksn@a?2Q+tKZ~^S0Ly#YC$L zV))8ZyGT!=v88Bj^5J2&z0cTP?vqyMZHH}LO;!c$cHK>Z} zD+io(RAAZ$in{ZL6?#a!`IPi2(lZai*toZPvXUs#Ok*4oIh>_yoY2k9O_5@=Q3_sO z?V+rUjMf>->gwv#*s8Vas^$l4RfUBzycuLM3+;sJ@H29F>ar4oP04T+P+)xCz(G(c zY>s)4B_Hb!u-r+HbK+*PAxcn1D)#dm3){QR=c&gvv~VM;nF}Unw;?=?WW=t4T;wpr z&_-Vztl>usWDZlz1_(7`Bb*7}A814k5EjQFwdG%grS%t#+@sG|6*kf+@=d?VOh&w% z@#@;{y27Eg;&*w@(P2o>Iaj6?JVa%=8(hm(CCF$w`Em zIMq~5o=?Qpmb=bUv6u=G&r^Sc8uIPuQDSKD#%Mcb)<@_t+j~Jrj5K21OmJ-kvO^(3 z1|R%9aMURKq}6xHn$nu)fvz)jM}Ng@M>yM)b@bN~S=|9UtY|%ehlt67c$&}Q#Kz(8 zDeEIYMvEHCCY)DW>lUH4agAaED&d%I11edTD7>3u(C$C^O1su_jiTS*g}j@h7U3V1 z_>E*p$pDvPr^cI7{w5cA1`!(A-&cO;w{aIk0VI9(-H0I2`wXe3rgmypOylk-L@Uj9 z+Czyi1g4*}%d+VqC^wnEn$;7%qjG>hWQPjyeN6VDs1~Wdff*1CCo35c{K)tzOxHU& zluPOh)*BcaOWH|DMD*cZwdM)1bI_=Aq-SS~p`oKg%#;KL(}qSz*XtOQ@Z>`^_3x>t zK(jA>^v2%|XpRLQz4Hil13`DELL5N{;%n_KNoHhdJ4_(cSq{AOB_K`O~{@p*Pl1vB$?b!}WPNKX#nf>YePV zF1F%Fcb(oMG(71l3aIhf=rHX2?vY#R=vYy@lnCv4dnVowrAGUO6)8%IpYt<*Y<+ZI zRMMS`k(_#S@W#Kc&a-Mhc1u@9jY$o|<#*~e#S;@;^2yDT!$+2-^=9jHJ)VOfhxBcp zMm&Ez_Y3Qv@`j@Yy>$_L-iT}tquwVp0|0}>#dC0QaMY5YZGIgaBMlA?Rw=HXbghB( znM#iZ`MsgQ6onbrA$28Oz?uP(P4lf^zAGxLG!Wz|+7Saf0vrak0{J_fzb@k(A`pI> z1BfGxTClwV4Fdq;7rIM_`1=BkgAk!I-;vg?VcPWzCKllN02T$5-(unIjSUz*@hkce z{GWFJ;J)A8(*U;Q`iP&6@TZ-C5NJp7NsR2TB+Fm|Nq)xsbMLQv`-h!>&ocqIyX&uX zQZW9u!vZ=!7=_~XUo80K>0eE@uJ9i{*l${)Q&T(u?L}(W=JrV3h)K1UrsetR(25%H z{?uCC1h3zx-o(E3@2>vi^?JwJbsdH&sVPkvvj+n(0d_1E{eh1AJL>FwceZ{y699ca z$6hs>`RgX!FNu>#W#TrgcTG~{q0 zE+KK}uw>9Ix$_!*JkbVz>ng9%1`CH-sc91H%Vv9pO1b<>Q;!IggB-Tff#MNf}3@Sldq z*fo3`*k12|pb{*W5q1b76_tjsboFDEiTH%?W#0NXCi2?NBO7ZXX~s(T!hqGbhbZ#Pvavir#C)@c|HRcSv*S+K{C-9jrbwR1nVrkciOO)Z7vmcX4Y> z-q3=^2L@H-0oelUpCw+C4Q(;F>%-f(f>hiz#-Gb7HICIRX3nD?t8>I$lSl>^C{wdO zIcAtOyaB1^Tv!Y^5!GNe-)RW5m>8n7J4gM}nIHS;U>vG!8NI|@@IG;vjca;(nreNd zu*B*J?ShW`p$T3V*dauqm!;==vsQr;ZaSyHm-N(0dh_I}&VI49i)kUnW#}?_iUxEd8@vgZ~M1FokhQ2mxZz#+VV7mE)i+?a&i^w_sY@Fy)xuG|mqa$^eUbt5`!e2VF}e*u=EXMrR^Ei;7MUa~x) z<9X7WrXsQ=?=t*?gnR9&0c;OmJP@!U)VGoGhY?Gdl)q6x)vzP{b$HZrqCL05v=VWo zD&tWJ#gZ`zm<NUMA`7#Ta>|`yONSw z$6E6Py?z!*fkOM7qI!E}W@|KDetZ*MS~X6>ja+CU;ZpA9J+_#=^l?Fs`qtHi1{jI=Vr$_A+6oYe>{7WHCUKwQ#*!gK4e)I{|8X=Bn@E zMx*8k;Sujs0$7*Qn?er*QRRr_#A6ey~R+T!{1nZ)`#W0iu`4@}Cp*c?f_j5rTsZ2$-P=N$PbYXx2VQth$buV(J6HeAmyO>u0kN zREy0UcjhMU0Dni|Cd@Yq=*fX;FcZ`#OvM$165i&Lu!%ebPHiyO<1CnOo=P=01}4Jt zYa*Wo093ruo&XC221I!;fWf}~9?Z}uqLgz|kWX4zxZ1$T5Y5mTb(e*i>Nm7? zCbq>Mo9J=pZ<3ajjZR;rT;13xKmKvCe9EH!+Y($513g{o%yW_Px=Q38_5D9~fC|&e zr(oLh>AN|*f=QDZ>))L=iYh#pFL9-#fT?+JfdrIy%6e|2$<`lQgYY}Dis~fj8D>#r z*Dprlp_P?8xidSIoFGDc12r8(;)4)aBBo8TzypLy^P=jBqR-l14cZvV(68GK-W(Wr zo0Y$mKlbP2Wty`O2a5F0Gq8HHnphEXZ*M}x7r0|gI(2eNaNGl_d#`w1CB3=tJUjy% zBm}6A`R&O~7>zQTOnf#Y=sp;B%(n{WDwUZ>=WD5R8k~s{7G9hyyB;%o)o9bJ7VH@+ zPY##A>g-hhhFtkF=Ql~oKu;)76>k3Iy?%(M;|!f*rdo1G=>QrJGLvM!o)V+ajVd#G zUo<_i=&ocdLbV7bCXIr@G04G zk_;lcCgnl&8%(1*X;yfeY?Q^yE;o>C5kk@365%*3o}mFPQUuq`s0sm-n3MC-gG_#l z(+eHTg@e}AXuRB<*z7Xnzi5JfyNJ}ZB64ZioIA&o#GVs*7w(HGW&q|dwB<1YQfnc& zC^W^&gV-Cb#2}(;y}7xjiBuA#>XJopbBg#V_yqzw`b#jN+QU5%ARz_qo|00+>_G`$ zyI9}*jSVepHlYWe8eq$fLydL|X6AUihOMT=3p%_I#|Sltq&*(J*Ud_;t9S zjwq4HFHZ)R2)L`_J@-K|p(Fiy{O)3D)|=^-7$U^V zkX1B#Ux7NbUlwKPzTL$ii}GKRh9bw`ORSjI*Ve+jyYsQKXv@pX+mm=J_O@!bZ=F5t zTW%UkX^L8J*`W9Cgvc~WrB?HvDrjc=c!U{oB8K4>$$``UhLX5J|n*pK) znfzSuZORFehiPb5mR4A}s2?+69W-Glh(JetC5)O-y zdcq=cSw-1&Kzdk&NDE<|kzIVb0aQaBT+wWB9UT?S>wbt^j4&lIW5BM}I?$CVKEp{P zsbE+7nD;2v!D3>$%hjYKu+(Pl-u$Y?dt>Mnne?Wc#~DP2toT;U+joFnlK{Iqd)^1S z8|BF}(kVEnPpVAOL*ctMjH~vUl07R8MWaEbS?$96UUTLPRqs&uMwLfT2H*=Y$8LNU zq6Tw$2eM$~3u1IID;0x225(ht%_>RPy^mCxi$#aDKw077Yt{EEVO69ybCJX%T~r!# zEJQ*Gwu*c(v;i+2Yzyux`p7}1lHO38>RyEu%@A3uiXU%zaMc%h2H!U++TV1u??Z1m zlvhQu5Tzmq!5ASO@6m0MnTR{rxDOxYRJp!GoOLVhOQ4#)m1dHs@F`b~yCrQqeOPq{ zN%%;wh)dcjf5Rq4AsD>9MFtEGTlawl-MycKryxv;4M#PxD}+Y?phSkk!bpbr7y~9+ z^G``5=+K@+gPPc{HJZ;3*p`<41rxv{P5qFEw`@=?h&&kOI1%p%|KqS~{>QKZ7GWq1 zK3=o;gD}ed1T4v0XcnuQig>>wHCXDuGIeDlWa+dmLjTqyY+8p9tj3ORS-o{vAp#Kf48a2q(nxdSJw{XjH+j(`7kEO9fb=PXes~< zYqhC9@fzHDN1g(i3JGBsmq0tmLZi2K6RpkGSBHrV4MVmk9yfk`+?~o z0-BAo9(PZt+t-cKyTc)aun9GzV@}<$Zo>kz^JYMlpq7q0uj2t3z_1|ZI)Q<~L4QkC zSB*F=gQbp=y=C<;|EYfjpYTBJLv=elyTvxbqG)cb##U?ZJjmpvb**rN;ZFx65BvPu z0TTlb*we(P$}sq%hPJqZ|9y~Ay;N=>AMPldD#+2B+r=)Yh`{Wkm)j~bEmS9UKfBJX zB=peG;M%JV5Xco=d&+jL6kgE2kBXx2=%71&myz+o-B<;FtCWWLLxuUM`sAs><@w2o ziB+6+W1=ciUg!6n?l&oWyqZ;exIGA>Q}Rilmjp%YpH6)1ozN+-@fI()KYU znj6bRYH#Y30sIuu%SVcdVj1CWI=SX{%cVx9pdKmy)1a}vRfGmZ~$t+~5$^+IoL zdPeJl1Z~e9Dsm zO^omLP8zjdq<`1MM*2sVlB2%P-@6=DGg9`Km49RE_iq)%M=g?g_IkPk%K}#Wwg=j3 zmX?XxeRCORXYAuT6^=VbjjM8N535K!S%m-MOYzsjtrvZMtFyfz;R7_bFY3R6Zu05V zwl-H&3yX5!>FJR{T&_D(ua-eZiw9QqpkE|!4BM7Y$QNQaU%r;NxXi*QQaCWDT1dq^ zi%MwZ!@xCHUB9%+0qk*emy-=P40r^LWdLjo#k#oZ?+XBwfYKK3H$M{o7Q~R20@(~Z zO#c&o1zs`8c@PP@%fRILXIGf&K(gCi6|R?XeYNQ>m|+MRU)GN{Q}h&yDHJ zenn(Zsf+lIQ%(Z(yA&y?0DEH2JS_ZYel|cf3WB(!Gyl|j1yT#x#GCNSxcylcK2TaU zRraQTi1^+FtUPdJp&b9$x-tLvck?#@w^{g~18{|+R#r&>Xm<1_PX3?FHr#jHK#kLD zeH(oz(f0`WlnJP?45{&EM$KRL{!ejF1?+-m7=@?E-t!v2k$Q6B7Y_Yl(-Ffe9;aZTvfT3}9!xI}DHO;P03}Q0uo&ctvvw(lYl`zdegaPyWx~sm~BUbuJL8N8Q z29{V)9<3lp@UpQnrnq0@{RF@z>*d5B`2b+c7wAAD37Ze~uo=79xT~$Vhr1%tyc;Ca z9h0p4WZv^747$m{awT@#avX@5-|@v{!UklM29rYuG*mC(SI5d!qi05k8GEcP!)A^` zXcK!hEo9AW%Potr)(cSOc|*0GSC@<@^E?}kdlNFCP|@mXPuX4(n1+!8;>`ljc^_DG z3OR>8`S3V?tM-l>g81}r!@~+Ly~AY4AK8w1=pAJ*Rim{%w$n;aYB_??EOhx7BwWtg zbR|SB^*COzsT4+AHrAVq5s6OP=pDwFuAMWB6*=}cOR^XeJ1Ln|q%6f4$ z*Tbs6Y;gfRj)<)-ri**wfw#amdbc1|eeC{5ByYk#_ zFv%sg8?na-G^;j8_~`shJ=S3)Cp<1X4@#o8ABB5h`QFyQC(Ji(S#q#OdSLh~W#ZWy zmHC9h_(f3`Wtl^&fec;PGjp%rr;iNcl?w@48SD32!Z}S-H$2R$%aymIQWx;V3vurr zy>#fD$%>W~o%XzU)tp9Ez#?n5CAsj0o7 zg*#x4Y|a55cPPnuo(^V+h{o92*~K375t-6?(k;861+iWg#=D=@#PgPJ$KnnQjub*G ztftA1pneUsePu%a7jwT?SK%}Bgj;)ygnIZj27S?IPW zEU$<(G%z~I;C8v6U~x9B>kw-9 z-+5crX$?+!*mx6nbltvuJ2#S%|J={wa>m-BChcXTMdPLpkxfzk{5se7Y1=OdD(`DY zXzgeBi`3FO8^b_+(d8_@vDkP2hPLQgs0%diX+DMpvSrzRWyZn1i*$&_p?dAh3X7r% zGvfsiO2Z7`h8M9~DD28+f%M*yds?8Oq=(a!V$xQKr0`%_EQ24F?Ud`PsBvervslEy zSj(~Gv9)U-n%d-Ilg74*VQ)h03uHgH%foWwZx7TSt77EOWQQ_x?i-Bnw-2&j*yBsA z%-rDBm^feNcGc~g++LNR9M`>gCsm$QF}XKV8?K}9KzPK&qNNij*5N3pVLuORc4*3i z=yBe@+sruiqsAZNE{ExoRQmJIv8RFd1s*f@)ESv#8uASro+3t&q?sjVPKEt*45_broWsvtLTLJ&{Y!N zVVbIrG{H|vDqes2qGswz2F*R%#zO4 z-EwhVr_iEYdfn!JQHk+es$D~}9$KtfGU2CJ4TXMcY#C3di;bAglD6OVX_F&g?QqG% z9~64=J&%YDPo%PMa4hIP9iYirp7D}g=yW{#*kFy@o|iI>G3CL1qoCY+n$rYb9B82? zB47@;zKd%3G{vBdISq^2e;%a?nRAD{~2WGv=n_t)fedbTdRPhkMNHwP(gZn}rm|Db{{N zpB)^eeOu5!?qis1uX=TXHSRneO0^vzNO{%X;=XdPDpkZrRAb0}0fAvOG~%@fP-X&C zXq32kxL=mXAK6L@wPFeAJ%J^QQdY(Ka+j?nu4StFTM)5iv7w&Ry`tX193XUNM$mKRNV<_2Giu2^5N4>RXlyXCLq zmaJ)d;i4U#rrh*`EVE1Pg1UMb<_f#Awyqqv&TXw3d@}W#RqE+=xJHRwmxOmDV7Yeo zM@G5D&diu$=X(O_l--QT(xtX|(Jtyh_u!M3<`$)&xjD{nr+ON`<232Oq@nnfoDT!> zg4w<=Ub$%?YQi-FlfP{Ix>8>N{+lt}hRC^*0DUKeTE;x*%K(JoI{h$gO*K zA^5p?LgqS|ep4{N8;B>{7T<@H=U0^W-Le9zCFGqYNZJ)1Me z4@C379;2WB_(Vv_V5yZJl);0jMFa3k4O7Nb7=JekJeSG2@A0+zf^bH6Qm^ORdE3R8 zuHdUD;wp9fbMG&FEXI_|o^5#@B6F=Pu3JY>CS8T=G#*wnw}%pQYR=4DXppwHH`$#N z?Tp3EcJQlQex5DNwyeE4VP1#h9m77~TJ7uHC%jraE;fwnXV4_xt7U#4tiHOiIL3*O z7#_)kLRsFF;{TAk94S~7SVt`yn}9jvFU z8X~H}Hj>oaIlOXIk(wkQfS;kmvYs{)u;}Sxzakl)7)BFoI==Tw)2S=O!@4tno?>w) zho&u6LTa=or*# z2fvWe%UV{osP@Vm8n4^u_3J9jNV@qEqe_b(@eMcgsSrW+mPH+ODhkZDUFqV>#W3RS z>dGD2y9g(fhQ2VCukk*#e$xvbN2??(ke_okf2H2T%eR(NMn%OrtV&WV<(QB5Y*4Xm zG5@u0|E4NZcK<@8=2gLD%34luHPj_5!J&O=Z>p_PZ8MQMi}>YhDf%ZSVnh>M@r$j{ zOQwY{(!+;fmg(#1m(B*mMfqMRb!(E74EQ7$+Og_9eKKp?NQPM*Q6u=lmOhjOgai(i z2*`D_KKBKQ5$BajsTdfHP3u&WTtVb~3{5IdDVG6r&F}I{+LJOS2S^>u@tf)zcE<^SMuxqjQ9jyK*gM)t;_DSJ2~4{FeEJxe~HW<@(C$ zWk=Ya&L-iWzj5Kf(+adTBbg`9*fo6;(Grw7A5nJ?E4!a;A}@yEUy3GQRWRPxgg^c` z&_7M@RUV@3v)V{+9sVgnymX~WrF#E$QD^gq(5PD7%gXzYZGCuZcds0XN(bzh8m(s; zz9>7dTF{s3Yla0oH&!=CELAZ4r7pd3yH|oHj{N-jsi*6; zT~A-rAOCnOxu`0um5VU7lHWfO%6wUKzHmsgp7P^XmjLIOqudRKN}lXNuvX2`=kZ2P zuMZO`L+f_U$Bm^;i}}Aq>SkZ8TEE-2tV|+85&HF!x!Il(XY%qbyOy8{O<)NI_BAG{M%R3)aw z;?|p5w2CEzD_}idKY%6zU6r5iOWs4ixIbE#|02gccP~<3b*?8a+Myv&=CmMPBdwA? zTdQ#aX}08E&iLuBnkilEDdw5Hx>8D>3p zfHrPauiTz|lHP4DTd%z3zME$^@G*M5bjT++g#NuunQvFp4DtBzP6*DT)X=8l(^F%9 z=dwj3ywhH`DvTwSxk8c3+p+HX7%?9A3UHOP?D2H65VR_^vluzNBvp;05zlJY&)u!- zjd~NP9vOEJv|1HStQ9#|lFgxk*ruujMKCM~agIKu>66na9PHg&>bc~x`*8My!8$*i zLaocFx$BThaKM)344G5CL%sWIIky98ZP_KG?nC-wWl1}`(!=#*Jl@>ZNlrcC3s8`+3-yg@XCnGM9C`=72jC!;O|_1ZN4eXzWwp}C@90Tux3+}$B5U!#pQJZ>tUW62C&*C_ zat(?_!|}R0STWG=v70SHP{pVeA%kvDlFpWhJiTBYp(khnyERxa=tt z>ONz0Wvc>LuRRoy*=Wb-@FQ~G)H-5)`^@`s#n$i_PvG87eA zhr*-Tn&V#D)So+^+!|4O)g>H!pTF|dNkuP-ewJ%Ro|j6$b=m7w;#k!m=@GvL(t(qj z<5>gqY!fc-PzVk{=Gz-CmUCoJize-@{rKJ^U&#<{CJHNKfpVC)dxGiC^FrpI zb5&KT*jl+eN2Ui02E|8;nvO??JC>c;gB_JQui$)`6HmSDzArA^ut0UM$jcJ!3nkh@ zsnFHFy|&EY6*MubAB>ilgM<*>yY-Uj$He4$WSYnmH`khcRm7~x@dIch*DWU5I>%C?t3eSkSE6 z$&?U+g=dmI%S;?)d#HJKq?7md}8M5O^hx0-$n9F+FqQtW)SpU1UZBy@*&*z5mjqn(N4CHc5mBNMlAoCT zn?T%m{&D70LmKA1eon!M`BPt72gkF~gNFJfMU37!lsm=X-XzD(amD05NYkIN{y6dp zR=1|2o$!q*;yK#4{3%Ac#xJ;&Cb!tE51$K0e-X=XT)}B_pZ$9KR_d?p*gtby%hh!1NISP)qPu+)+N~ z2+UORn1^3|47cQ^Yo1N@omMZy2oDeZV6eXoP0y+B&}Fau8C}Ix2H~pgJ%uNbEzI_w zdo=bdJy4yIIghTP$Lnv>7G$5O81*E4B&-72=LcSQa4mBb}xv*hYdiW>gDn z1btMl1KXed;5Z^$1)1eV5!=-CF2jOA^}X!q{P})wSQk@myLIqZ^)bB5PP6Di14yc? zmt_uE^Ra^j>=>$z;P}|M{qh)!ji94JB<(a} zL0G;s$vciYIWm#LqrU!>a&>hEzgX%4Q~xT65SW@DvdHqeY72Bcgyo4JKFJa!ok85& zM|X&fexPnrZ#T-l@-m%0n}>cIow<(kcln!;s$S=isRD3xT-^#pkJTkhal3Of>gF*o z5)%?A-Hu1Z2Q!1YdPq<{*McPNd_8gwKSUk}6v^AXB7Kmp9V z#HPxEZE;Y8c9^?_^Sj)0dYU(Nub6ZW4~U?>r0f8OD*EE$^4d{GhT-S(MDY=Rul;?r zL(ZTe8c^?VE3i^jFl`=;xH;%@`!SnZBgU=o#Q{cUhvj0%#-c)9=_~+rrfj5evbuCW zCK|%95KKP26Q#|@y)=DXd2_0p3u4O%k_Dpxnqxl|K&s>%Nvl%x#otj2CEqVENAw~U zC7omS>3%1rUTo9xK1WzvTf6i$IC5a7f2$O4FhK}UPvaT+F`uPVoq((B4Ij(9_34-L zdZDiV@;Cj-F^|E)l7cdw*a8u=P2qw(OT@}blvyj-L96R^p&6_=XHis@+CB#7U|-P7 zY1b?E)mO;oE`Q6le1K9V4bp~|yb^9&R9}Z%6Z&nql%|P@*Ihcl4Mpo?1!Q{jx|%2Z z$!mg&G3amK9OsmQ^-rCHo9W#1%YZqoB!5@pjJUX_J8|AM6m`|B-UkN<@6_N%b2|L| zxq08dZR?7lQ>5&14X%t!m@7%L%xkWG41QeV=WhXIQkPd$#NHyNYCU`o`Sy(`v^cqc zaDF$Y0F6xe9yI~6^B82!C|hhsDpTh(i}S9~oUyY_tc(Qm-e*M59r`4s~Lbf*iZmXSotni*Es1=d$$44^&&gSdBp&J@)s`TesdTS%Cz#;0(q zAW(=TEI6U6SSCpfs$j?_r;B~EsH#5Vn+iUGJTfMxd}P%9_$@6x{lF?HaMV9L+Ei9h zZr!)Kg>%Q24ihA7v?}8yV23`;4pe#wrM<2qW4|d)>yo-{aT*7mRxvhhZfq<*)cdCO z;6C9oM6qCHV#22&F4cZK1HYq#CYkp2>lr8p`{T!*`y+X!+d!0gd7mzAZmmU_tye=I zpnNWaNx%KJ{P8O+Ic7>wxq@6l-{d%WNBR*5XFr}3nt_o~=TpO_8r$lTvQn?3GLm+e zmBdY8;4p9(b1gwxa~huGJFX}sA7_{huFRxup;DwQ2j}XRh?~85WK>m0 zVjX4AjGQ+>`7Ebrx2iNdURb?croflg9Zg)9dX&R+#JZ#AMmUS|`2)zX@*LthN}KqI zHJD2FG*)C$WIMXaJ1NvY4@{3F z(*_)7FA(H@V@5V7OB$XAWvhJ|csVrmgIjsZ%G`p*Iy`XljhrpwGaNA)nIqnN--=r> zP^)mbi(GSk>HWYuaDj$*-sD_Md=EJaFsKSe)~qfaaGl9;Li4TZ=w=M634FJT(!1V+ z!ywn$T?)y>x$F!S-lo*#2;H11(@b8gUP+2B(1hM_n6RA8b^j7f7|mRdpfgM;2XBBT z4vuhXPE2ZKWI;L77dTC_;jXgonSH`Tyw3Z>3Qb3ipmujJ_;1JCim0x_PFBLk2*Grko$B!SY$>x1W%e#+p z1Y$IHRHT^x5Hr_jPv8p)s+CDN7^j4myJxyPh(z_)y9+<6VBC?r`k~0rfE=TO8>aJI zK^k@*2%N$i8^nI$rm~V0Y&^jQwH_!ieq07ZC*L9G`R}Z7OfW>O5F*J*AQ;#vFApl) zYHX$IKW+r+RvC>&WfOMK+dk*=wRh`@yX*iFT6mP5vO91J-s;X5R^D<3f}kL`xgn0j zda4R5zJKU`z42;@^E}JTT=~hiHy6(%nm+d9fRob%J@a&g@T#ao!>-nd4$5h5DG%RG zg}`%V36Uy5nrF1|LYvo3R1hoEP)k565>xB}FomDjtToo3`RHZQR0RrDBvSDqEiWdK z<5rV|QwDAokZ5W~ceQ1Hna2*)0BJKZU~tJwY%w9dSaNAl(-CRz)z#JB9HpCPpQH^Q z3WN;MDG9hq^(&7g_j~b-{Wus`SaK2O;g!-3RB%#w013esOJsF?JEY`)`6l)4TRYQT zXWE5}!q%3$w%veW|C*2Vy!Guo>WGR#_{=wR$~!yfl8f$r58Q}vuWFNenC0T&c*}#u z!^}=Z3Zkh=O+~ju!=9d=E+*a~#A%Zv&NDJ=iA{qiDeDwk?&Kim>6xURzU|hR#2cO* z&8$AI-e5_zNmSa{po50CM>Xj>ISMMh2Dssa!fpeBT(qQdbsW>;7^JS_HkWbGGvXrC$uLm=Z^dGbZcJH{5`YGohGDs;mb z-=EcBUZei5465asG}%o@h5WNtD&$Q=umVb}lR-=PWelEpv%CvxRxe_o=*1rKdzmqc zJlz_t)EU0x%v$!5`L6mEJm>BDcAG2wG?ts2rMo@Q#Tfk%0)@cj^Nnb`j#m61Ge5Fe zv#U4x8&^l|z9Fr2yjvYyROPsmSzE7XR+c*pFVewc|5hg_gkl;S8Lu-H3+=$afS6 z5ks4JeCw;bA2|LPnimc_=mo`}Bk>_Bx07v~lFSR{NaMPiR?h7_Vg_XPZMp{UjO1%F zBge%FUFgdOClr=@GRRv8_r6r4sJVT)juq?n<2jd}_F)@=I$I}Uvx)}4B)5}FR~Da3 zEOD^*(a#Z9i!lHolx$f@)k%!SMuCwYX( zYwi!o{)ia#JZf2eZ!>uZsQo9AD{27!=Y zTGEzoWgG_AHPhg*hoCB^WEw?h_r1F}=x9^x+M_{~lKWzP?WnVN&CKJ?#Ds>q$6}6W zPY>h3)Olg=?2DdQFXJGmi(ysW==@{9Nh9+ECvXb#JI`9E$JvqONdjvur~aFA%|T)v zH;)W!5(X4fJv5XXJ0#to`8cRbB2>CoRoN}9O z_N|rm%(u(-MfT2fADmH_ibYGhpo~Gl$qZLE-k!4qEJr_e>%On?^BdN$3zh%B}jv=bs(?ZcvvxYxbl%BQ2WfqdM9sBXn_tD z!I~W1?~UMsl-}vo1J0vT@(cO(ex0N3V?Nf6Ilr!@Df`|C1M`NwxR)#gcI{-itXBap zTtPMZ7wsoAj%P8C_+Qp&xqmx3ePpFoC{>yC)@B~{%j)#Pm(bC5KjLsb5;ONanBRsd zf)9#FrUUMyd`=W72itgG1Gg^s1bQ^3@j7i}xYC4|$j5l1ZJO$C37YQtAf4R?m5PnI z$3YG5cM*H}&=J?=@s$E&(X5Wt*XRc(t7)MZ#-A0F9OhB&KG#)q$&NoQTPh!vVcUz2 zj_#PM_Ft8ikqNnP*WPS5;V;wgGPLk%s0J++K^?^gL7rST6&;p{*_Uk=YD6<>WIzJN zvQ#w2T1pd{zUpkyqa7FY!~0rnL{Fy$@Pb_`bK%#hS(hh7G8ocyvKzCg(y5F)3>B~V z=BtNkH$!e&&d6&r6l>e+*7p|qPMtNXryU2YHF+mqO&l7UuFbINb$!pH9|N_c%#%Z( zHFrct$wkv)zj`5>oBfK3rr3*~`Y~3pC@CLOs-yk5K(G%-G}38IvCkLe(q3r;AKGe$ zP&5lL(BT!`hs5>Cx~GL`HrqL)>m*f=Yto<+iuDdYO(WW)xCP?(VXA-CTqDjK(jS+E zDcRX}WBY!)TG9u5PC^u0fqI6*QH>vA6|f+ zeZWW0UTMk967@_6DXq*T^E_f?ypARnHW~uQTkiucFtCe7%{KL3+JK+3 zn8}sRkCye=v#Z`12=Y%j+9>ONzt86x646IT2Op*nFQ}35E(DXkpm*`T(057x0#fYq{_MN7`e(sm$p^cnqb$F zO+xGZD1VX@D3j6J5Z&G?10UUX!&wsLE$0limoF=`^*Cr~G+758LAVToF|FS5-8bx9 zRM;)A?Ci5XjZ7l+I^X@$Dayb1e7yLZw96dH?KRQxM6b&)Fpt-$H-^cpafPq?M=JW_ zw$m&FdO@_*kI4p0%}4-&HI}@lTx~yp+Z&K%?$W<c=P2K6ns;pX}A?%rL%7lk@_q0KXHzuzsSK8u*BI z-6b@g;3r9RjnsTLn+!okWR2%#WwP6h@ZKVJs7BEV#siTg zuS;R|Q$La}^ghPHrJO`wUf$EHR#6vSEQ|XBGBNinytckH#~iy(Air4z1e-Z}aBMx?Z}hbgCPB zN+DMg&P>r}c`V*s-P#&C8(Ozl*2^pW7@FW2wJ}yw)|lFoukA4$$yI#Ow;k? zwdjNJwl)O26T|556iio(#*5$_+h7q~!{U6kDt= zaWDBtW|eck3612&*o0=iyX-9pa?v8sMjdn=QT6lYK+LZWGr_p?5 zOr7p9@5E5{TvI_&u^^sB({X747gsbXa%Zq66S?y; zfZeyq%MD*0{QuZ{>#!=n{#{VIq(nqOLMfF}DFF#ZK}n@Mq`O;UiwcNzH`3i~xH`=-qqK9{HE`Xd}pEk zF|tUxdwwf5j%y3mcfuFSi4$+_EOrmOD!p7QL0`6=YhAI=bIbiUv!A1owd&!j zJWY^)hmc)aOG()MRddO4_9Y>vZwZMHZED^pCT|{+*i7_#J~aCQWdhJYo4dUw0I$W1 zE=yg%5DV3}r?DCNj4nav5kUl=1==|$_h_ZF*v>FRTZJ$5bbnDtQtvTDHm|zG46{7- zP0+~(Ut<{Y4FHab`JsHaS0u4p2xMr;j`k}XZtB!-c0xnogQS~`z2gDliMie+8z ze#7uriU`t%n;j~j#r9cR!bWl`$F~-f*6ZZOtHvG`1;QZ(V#V3qDBy}|D;KHd`H1XQ z6+wA7HHH)~xqeS{Ua77&bCU~q))44UV~HtmE+bh~;ux0J-L;<3SH7qxfQw>e;n z*Bvplxi72t@F1ZqpSr8Cf^R2KbP^9`tcg!t{cEvb>S2=LYBk~UMZdQrQ(IM*lJS^4ihFS8M-IldaY>uk10u zT*GyCdtzq$*?|3#Vwn9CuO5?PISJg_{;S@im(b4uIVuKU8wUr_c_yw&>*fW$YEBa{ zvLT`Lr}hEQL|ND{U4MpDT%yxtLGq7(^yb3qikxFP1*V*sia0Hd2Y#yW%txlWKxT{AFPPuxnpJ5-O;RsCK_ z#>lPQuFBtn`=;~e=K5ZnAbW33ZD=`wHnu+X=C9QM(({7UCQ8)U*mv)8_iR#9-(k}O zQ;i+yE>!LN*#V*HS+5itpJbv`VmJ!N4t$8`1b{sKJV2fn-Ii^3vuEFg+gI>y+UM1- z2l|dO{AGJX_>fu5Loa zy*U3Vz$CuPpDi`PR!P-fA*~$B{X$++Qgc{Pn>9Wz?v_NCMs^-DG&tdIR+62(sEq4= zHHE?WgH1BFkpiz4xBFNMlIU*wh-t-qv#nwRf|iD$fF_0sz9OTKMv|%E zyN5q`mmBMj2p%z?PEQSIBx@9CZ^lPNu=&zBnTRfVY#bq1RdDkv!z(H)a2zhjlGvpF zk^1{g{9Z*dLdr-v^W}$1cR+=-fAn*##SQA|=JsLSn?#{o1}FVHRpRwJ8;_V<=Rt0c zZecKpn}HNfR6S6LiZxE+xRdrN&RGp@i@kD^W3{%VMBB{#Aclo51V57&gNRG{PRlIG zqgwz?odA1YhY|mvOZMA2E&ki;vENX)Ap2KtMXa_97im!U<9uTLTJ1WRUw;+Sl#GPN9?;zcwcy4AESGZZ8qcDF+78I$*WxTu#&4rhqWRRDZ)re=+*47$K zO$-mbt`Ca;M@kPxa7(eNYk15QGnli28%T)o;eQ8sb0m6@I@`JQx}W#f=(714qSm)u z<`cWAGyK253S9o$a|oESfx(`sQMjLSylYDGQ;KhA3uN703IMK0SbbECl6y^M>a*Dx#!3@pl zch6ajv}>O2-=+mick*k?hfCPbE55j2=w<;nf z|4O7i1Z_NB=oJX=$h(FZYj%BcK^!1qM_Zf}mx{6@wSkDLtLHMZWGzQUM9FSfJjW`T z(Kr^Ik^NG6zi!U>f;h`Q6Fp%j%f#!CKJR`alDIm>+1_e1yB>>VsL6w@5wqriXkzTxq zDxl}LO2+NblVqVdGc}8UI5QLY|IV2~y)!sh95?JWiA`Qp($w@pPu~8N?UL5Oz)wnO z4oD*Fb7BNnRBm0cEkwDoc#Cp@I(uWo(E*US z5VM|9s~6i}AGe&piQ+5)cvd;qZ&gVAQ}S4H@`bS2$U6}~;CF$z?KNU&7jD&}sqUVh zk|dpYR+$kb=l?!kX87kHy3E{ZdX=#B)!$Ug-_)4p16+hD9(&RcuV>?4aiKsIclQF0 z7dX6EVmcT<02ux#m<4%mK>^twWu2ns3^ObbN;JLBC!}misY$u|R~8DTN)$nMq2_vK zd>XUIfTE0DCT#->5n*BS04`oE{NBw=U*CtDmsh=c!)k2>pGGW5@3-1g35rY}$-VTr z={L{$|yjmme>oHG+lasWt{UZx{2Lo+KEx^v2AG zP&_}>lmI1QKuIppxdsYONH!@NoO9#Phx^}DU@p$WL@Mw0CJ!J^v0j8rWK} zrJter48I353;ac(-ZvX1`*HE6HBbwkzN-vYR(oQQ{%L_ly7VNTRue ztj~dN4ZRB_;*$eqr9qN`ENA5WZuu+$?yldRL5H4p-)L;Nr+r6mg0<-$->powtF_$( z1bl>(FwTGJiWEK2Nv+~6iIX-bwJ8ym50kE6d>wnZ6|DNWp!N(t0UKv`M5;3nd)4Tq z2O}-35ASB8cw3^X;Q92nYyrTXwC#2*eVNy;QhQF!N`mCG&&)~PN~L=+J}C)!!|e#! z(DUct;%G{MxokdO4F)vfGOu6cqd3sqoVzY6mWCH4_on1O{zCWJK2~|bzw}}?fjBTB zZOK;5_BcVt@=#iLc=f|bZOz*+?&J*Axuw|z#?l1-lMQE8E&Lx84?k$qjXZ++FC`io zeSDIecjoP|KEB329=EgV>RjuvVeR)N7M)eTa@-6-65K?@XZPwuGbE=Sfr<`PrqXs5 zGdk_fGK2wcNcY-IlxrpO>Gau1QTo|}(t{&-}db%oj&i$Dx-@=p949|ccZf%C<6ZY;Z4NRKySJappeXXn4Htc%Pl6UfS5;lZ!onSA zVWlftlza!e?RS#z@Eiy&vSu9)%^4uKBi-gJb+;b1$2%7nogEPnN1yN!Mbr48Pf{jR zQ;p^NIKc3%JUlN9_v^a_~+72n|o^ zSuS-(QI-U+#~g*7?l5+a#=g$@;V|8c!4KWri_uZ5mbq-T3E(|%#Wy0TUz7%U0b)l; zkH_K=HqR4557B#hBT9X1)|7?tv+Yt8pIemvKIRFsAm+MdRwQ5#r<4^6&pO>W^UY|e zGkfQ_$P@jdWo<1z%_=!bAf$2jUcJ|u7T*gq?Lwk=)XJG{>1A?}@JjbAf~#JKF0Kez zV^|oMT&S&Y^x6t~cl>mC(g-hqu~T^Y=46J1Bde!NB6nlOvw;Bo^m@18u?6k|So+S$ zKj;^$21VJI4w_c^469afof>o}tms;RG75;iYO$_YJ31o=YA{KDsWPNPILtQ8m!?kz z+!2L$YXl>X*}hJ)XPjIOHVEA2^!^#%Dw zDg*htBRkVX=1*Os*Gn@Q%Ii*(_5@SU?Bq+!40qleM;_L;q-P0g`9vNuwRp|U-8rF3z7EuX$hNky-N$#_-QW%zqhB(Hg#SQ5{7 zXI=igRRw1VhSIGXI;m+=-{)tc)BQh1S4Hjxo0XXfo@=0>u;@UnNtAGe)K3A@MX4}f z+;}qNwr?)k$NrKpo+&Gf*gc_vvY@gT|25aiQptV}f2Ge-<30#$jdr62s}h*)7tPOYIF!K{*T~^ds15L<#cJakpaxGJgDR1ivW{~>NWvK2HD`DlHwqQdA#0El| zl&xt=#*SHyb!YSTamuoxSH`dz#8LWX^tPDSt7Q@zGBfb#L(GLbohB$aoZ;p!Lh*S9 zOLUu2*VbBjP)ZiSRGa|+>{vmM8n}lqZN6M-7ja86P#Yu<6OXYYvEs6~D|IAII#_~z z&`4^WL*$#1S&p>rLPkfV=A>9p4Z&sSUqBcjN9nLYrHCZ|-1LdvWyPrd%s#f=ey)M# zEn1A;RZXb;>E!%u+!GP^1GMWBwj4Gm3PsBHn@VAXRkKgZAfn5k$8_C@*+uW-z0l4L zC((X#8;|oQ-sg9()ulIixD_nsh{moSXd5bZ-u2uG92+cn6Q(@s;CxK{ys}JCP!Iu& zJay%+Jy&i*X(e=NQ&Ih8+V;Hyj&RV&S14Jk3+qR31cHD4{eixFfBtd_5`>@r={85~ zt5@3n{ikmhq@<)6fmDBXnm;D-Oo1N7ujdvhIZ0FQ!F{W-;vSDwTKh>lE1)N7Lr?|& z=Te0=$-fb76ddAi#hRBJXHH<}FE9zD`+r=sS*jBGx3h>JO`>mTrcTn;;dgmxwF8BB z984E-Rh;76A5q4bgd75Hk~Sbobgmh4VZps|z(5l}zj|TIP=?-*7`)YCmF!=+TG1vS z;IQE^e*A6q!Ogz|;kYbqP;bxsDe2!aJS5RQo;rUfNDRqsc1k88_r0)scWO&_ zdHI2LV==MBQ)x-br~(aW+jg&Tp#S~=F6v@PA&Y3Q&}># z0>iUsLX2EoosM=Ocqla+#viTOe*nJq&HwnVVTa^~J9-n^sYI2;w5VB7ty(2g?h8`K z)1$?@?w0yLGN^H>MR$Hw}`k9K=uws*Z&?A{r2q>jhcLmEH-uSnYpB^ z7bI|cJM^0elj4P@LxB8J!d7g$BfcY9T)!_B{o-OkzP`OAR9Rv}Zi0bs%XrVEk7Q-A zwg~9y)v9YLXt7hx7pj$YR3xFqjlf6jN2&T|@_v6pAB44Cv+%-n#WO51d~i`sG2ZsD zGurFc!Xg^imEY&0uszU+-^J*Ou+Q)2h;@YX=j2NjOrZnF0{AxfcU{EX+ADO4z zDQMjrRk1b#d*k7e$fjP^^eCJBBwqDrh(Ggr9Q)N9e6!1%m~q~s`2?Q?ZNlc47RHTa zMf7tMyw1ka;vemNmM|R2&sv9WZ`-LA>smG0m<~%P+h#!%x>Q@?-7tvN1czGC2IDNHH`x^^;QUDSb{-A=q-+ru+(OY zFc76l2GdS~G<{{3zM0yT#DNTGpzz^?fE?o0ZElG8&a~crBq}fwNbhZedm%>AlcDG6)|5Dyo8=A9fVtGASb(iH*g;=bKY6LAFkix+p` z6sef#xVR#$lbE>leUV@{tlb`7n*0-JKrqREuaZZH(fQFAtHjkCBCtE%)N)F8MK-v# zb%YLMv!XJ3{^?<3Zu;GW_E0hU4_LXmcYUn19(q|F)qY-ipu5^Yv(?nXKHCFg*LNp( zi#u}rkYBQh4xW8W)2Ef-roD5zzi+>J6*9S>4&OH0W+lyzy-VuHj&^q0PKWrQGEUk$rlI%vd4Y@Y0)NguWGIQBBZNJkuhosr6czQ5kfOFw zhJm|xpV6aX%FBmkIB!nxOPe{5cI?v#zA+xoQ;{1t*RE=GT;rV)Fn*j>*xlP3p4)ME zTuGZ_s%9as$Vy&WnHi|Whb1Lhu_*Sz0ggH>a%y*a#!dk`kZ&(9F8<*%jlfu;Mx$pv zzxLp@DdS%$kg&M8yLrk*Q8hJg?QPGaH>PSki3VGzG7CJ8ccE}tooj#sP4e$$`yQ+b zO-*Jh%3$=Pqa!=`u*z|qwnnXlw)-ie>*gsj+>Ox6_+(#v#>x0c9l$2s6vOTeN)%j( z(y)&9^gwhxqex;|8!3oxMDB3#uY8>|9QeAmeL}$5K6XFNu*v(Zr?Av+;coR>65^@P zlC_R~WO_Pxz257B@dG*|9l|QFL!Zs@SvBVY(ftvT84iXI#L;CvkF>Ns7kI`^-!9wt z#Bre1x4ouLt#zi@E-VMop05Mi^MzL|KbfP!6Foqpw~MqfsyLPP&GS@nmvU^G_T<*BSU3oAiqA-%LW$b3=`@GT9W1&xs2nvDY z(DhV2-WDyhhTuVciK&e+GzgtUP91={ozd8(anlIwmO)v;Vd-cXJr|wlkXkp(#TI1? zKqb_C(H}pw=6MrQ^wBH$UQf@+0Bt3l^0HDP1=ukJ6znC2`!m)Nr*Dp9m*7joDq2>) zWOduC<_&t-HJ?Gd2fNbv)!`Kt@S}IBcFkU%j%aL-c}T$d1{%7>xOzp9sa81 zOF9ljwEK>GAIBOeSBlXm?7g|LgBM9yy9^WKN&ICJADxqR7J1c|^cql$$lTmj<=$t$ zlqPPcd&r4i45G0aPtT(Td_iHA?{gzV>rwpnOXGXTGT-}>?6zMRby4(3Ik@=juTD5-c7dq`x9g=9TF>$vOwuI$NWreXs_`AA7Kbv;Kv|JmP9*?} z&2-OYfWE(op(ydj(Ann=1G*b9sEoGDmf_J-Z9cG zP}=3o!ioZtH=WLC!j#S^Aspl?OAt*Df}2Kj2ltT&g6?@0*~( zONPtcrq!t@X>Gd=_VbcKP~%* z)@%F|_nyDlPfe*FAo?!A47{xGb+>7J(XCG{q01^N(#PIvDe0S)Oc%~mh#xQ#{w_-V zSss`UE?+`?us6!4)jrSJI;x^yxKF@Y)Bw(6LlIrU!R^^ciX-Z_gcdV3bM+&+xIi4%mI<^kLv`zyb!1Sz<8)BUn%B`*@H1cb!=fEdy7khYE4;Qp zT`0|`Me@iP%B3kOSGLE}xE4OloYgF37SG#vTNwG^5aYY7N8wx-ITMZDTGMIsBW=;J z!jIXUs*M)n6B0pkB6sTcqT&q}eUL;|jmQqL3%1b0ymXLoNK{3Bl7^AdqHsL1;4aA; zfFH0%j#&-q}#*$q3kDS~zwPK^`uPwtq;(o4R(w@(-5Nf+D!Oz7h#^Z&K*I88=d!I!vSU)RBF7R^`z_V?X&KwJgCj zj@$Na;=9+$PuP_;ZO*D6I4qMK!8ffeN;3BHM?6Lw&p7yIwvDSd&v3M`aEK`lv{Yj3 zZ(^}DB|o;}`)g}MYdp1fhT=CCT|3{`G}68om>hAz+{fKb(r|7cu@~U?;o6;TGbbt| z6L`oKc_g<=QrI-o$Rr>ZE9)p|(kEKIIpf@(5v_f5RO>)UV_u{z$wtO2Pbh3+$0Y)f zcW`iEzMyg@vU0{%#dCX(uEW=UvEwEV9S{mx53SuitF+)zICk39W{lQx%1IozFjk9w z^l(Q{t6&1BD- zL2dabE1A>_jYyA9S&DU7-|HVD0Kvm+Il;!_HOIKppH^FU*6L;XtHE5Q`VC?tFC#m< zPx|SWTR{ES{nyDhCnfTVs<)G4)rK}2mSzecxJ~=Y#j;t)?|AMMR9YUHD#%rA&Uq~V zkXWy#aqsH4`|*AWb{fRzXiB_cZWI>q@gsh$(OXxU)#GV*x-mmI|7iQYX;)`xg3FgJ z=ro14OS=`dfPE0ad|rNG-+~w31+zATW0w6m)^h>rq5t+j1h5K zS%9giORvzu_{q%KX72;T4!zXJS)SxqueIIcVk$ga)ox61=xAqY{~k)zs9WGBrOx%pjYSI!&_@e^R}@ z|818Ufm1ox8W`C)=~TAPt3ZmJ(Lr*sBs#o3+48b3Mywts+V4B?FIHK{OfTm&?8!-#a-C^orQ@KuR=pPjIRx6q#M zk3K-NJdakaNl7bE`IZ$lW5ZGnt{eb$iZ;L_ufJDQgO- zrwsN!Vv&+5%H4k`$Ah*#JnA`0aTR&A-#B3pXav?#jmSA!_sIax>d8j+nNno6jL_cI zSTnbGJjJKKTKH2ft@s1tttBoj;7>{KBv@6ACO5A(7Weh;_I9WketC3Bg+r&MSLn>l zFKYg?Dt-8EhOY?p8=u9P3C5h9h!!(&X`>(*I5C&tR|UD7M4nq6g(%tCg>Bl9 zb*n1L5G-<*qorH7s1VS3K2#AtHi2}nU|9ce*4K1PsJlX8iCI%_FS!1H8m6a*9E`ts|5nBS;Uj#%KQLk_S4udvM+?Y<{mJxbqG%~G<($ahuFM7Z_6>Kkr0H*V-g z?M*sLZ;=Iy+!{qL3!u<~n!}SvMeY`Is|>_Eg#CRbt#Ko<_rFeT;1~cZ_Jg^kx9W7jLs#MXjq$10o3)b=6qU7SJ(ZJcyywJ$c2eq-*)yU6UcnmKU6%D)= z3iPduPWKOBkBZj1TXaMaE5Qr7teoL-aa8@@y)P#6T!%)3%Jt2Y->g!O7wh>vI{Bp! z=rq`N=%As|X;Mtj+;8~?kqvy6SwU=@0)U@6X zL-!gsCt{Jwu0rRCLdWeH)OtqmJNX)~2kX0VDvcYXYMaQMC0?)QC)8{zii#bD+xTnQ zLY<7~iI>A`Knizt<&64vL$B`$OEHj^XG%YhRv9nLX~U2af7o zp$W42@olDjEx|Ibza;xO17e<%-e^{o2V*!xnDBcL7dAZmT%dOavP$5nG`iYXg`@r;lmt4|JT^JMQYgI6>uQxp82Bm>pcY(Y1)HUZ3 z6}nV-bep`|l|V6D(B(9i-az^zm~ZNJw9k=K_pnM_B}@7Q9|2}rV_EOxaOMfhW{2Zx z&MtSIKgp#$5T({>^H0$1pdY6U)H~0tm}d!JcA7aQp76)t9aa*^$QN$ADru8fv^`*I zw^yO|IbFZOvpm7}Sn+5+Tn^7l3}T>j{`qAAE*`!sC5mxHOSdzMefyA1F4lQen|tPJIdW3oHjBv?8sHh>mI5i4v@`qM{z|G_;=-N@q##+nqy~ir@hc8_ulavT_jacMODazEA8nny1?v|+WhKvvjn6|_Y z%JEriXGhj3Kv={fSl|U7FC!G1V7ie?~6p0U5u^z`;*#_iiPpBWfcgSFf;6kT8fv9kXJ_+Z>X` zSm^E`HY<}S-Fp+Eo>PzAJsVFG>Bco}X<{Fl)ggOqy z8Yi+8HSB*NROft%)a>V!q0rowas4LE6>r4+7=>h9$j#%ZG(`DJcBjE!M!w>j``rPF zW?kI%DzJ7MPoX*I2Z;Iu_;FpGmDBBSWOBlm#;Wdzq2J#us6Cg4s2){k&}<+G{E}D^)H41ih zwxY%@omy>oNX3%sU|DYieNp|{2Q6A|laSLPYbs3hiR!X0&s9Demi(m@G0L-};KmN} zXuj^SMb@S#U+{hzhakcLBVD5@aqi4dh?v>dMu*JqK3m@eBT>nO0S)YUelEBpt23%o z%_v*6a~FgshC^T}*SYw^9X;AU8J?PKxI0}d)v!X8o%G5TR-&!Gd*M62;<)5_Sjb6| zBmieSvipV)V@QaMWZLZUloO}3@t$8=YA>jq;!w!E!F-JU4x|wPpSXlZ*=EI1C2lS- zf=?9Pis^G(kHV zOFU_=f?SOjDTDVnDQ9KZFGPt5emnY|Azs8>t`4l0dg7x_=2w{n8|g_~a3eJ0IUByD ztN=U*wl$z%dp%qy}vIXR1` zRqfE|F_jn81QVI7t7bFQ6ce{QGOv@SEb)qSV0MFqZ8i$Zm6(8m%^H&3TtE@*Jnc5M z-&LquEuRUTLK@y#Ly-;#EmSJj9nNo$SyOYV2z_nU`O*>{1v=m{>{Xet1YSIQN*UI5 zd)T;&_uOBd*mr)oM;C>G z>c4uD|8g~^F`V`DPe&qU8R28_RVyx+PD+?+lRvMtIUqQ&wQAGkVlu< zh*ZOVMT=0yX*b_Ys7!q2b1@H}e2vD5LE)?TS}8!{*lASJSDTavm7TI>YjU@mJN)T5 zoVgS2yj%E2@*|!ZVz&e*ffvrrkE|;bqNyt`es0w5))963Gr+Jg=bey}=*XQ(g^$(&dB!IfRotP=RwZ?N4y;sz-b{6rwM4}4bR(D~H7{WpSQbmOmw9ng@=Chid zKl+qdT2nOg7}a0^B+%8-?=XCnGE$6C!Stvb7`W2j)p2#zi`@k{-#{_w(VvL<|FH0v>fvQE zT{_O2lAEhe`{oy^vp)KK`KPGi`E}})7%g(R{b!m2ysA-qt$)-9|5+IVh_*SR1jZv* zSEtThuFQ_3B^=LUi^VQbE}4@d4ujw2jDAnBh@Bm%bdf-LDhp;n4*@m#UMwtPkx=-#4on* z^LY)5cSKPo-k+McBaSCebFKY%8u=WTXlBobdF44h7pqijAdPje$&b_{BcuE{OaVdJ zbF3k~Hdf4MHtnJtaPgFIEbf@$6>T2UF{kZsv%k*YRTvVYgSD9Fk99Fo&L3Pr&3hIa z&Uwif$fDU<9v1)60{DFjZZhy@4%u@4q_Rjv!JTof1dq^dT>fawldTT^K%62P_^+%IWcOvov*p3GEk5LG}7Ht!%B(~!;=XTLHdn}>n_-8 ztc*=f{ZWmM9Jxt<{%DB&1I4hgh#;gMsg@hk4??sMzQ>`pLURs6{9X|K>!fzQmWE17 z_Lh%1Uinf33@1Qc+&K96v(A@|R0M(nfE1Us4{}0LGp-I#I?f@R{h{*)V%jO?yzA#B zAj5=Py~O(kp62%V)&ApL`oDLS{+BMfkkx8Nuq;zL2|(|M7sO?G-uRFEH#04 z=^V69@*Uj4_RW@w0D2=@)PdISFxm819W>M(3{d%E7eJ>@ZmrDu0sMdqkefHf?NJ$_+O zF8X-;Pc4`o?E}+Oskk|M@a!#JyEU@9f;PHd)yrRY41RvyD&zu+9}SbpCb7i=yfw@5 z389M8pPjv0hHbxn0MqkkiIkzjxO+gH;{<=+v6D-|cf(jt_wd)}?b?~M4(XrwT$0IF zM~jMXcpe&{BBu38HRdBDf$2m+XaIKgc~%M4JFN+JB^5O=0PrL1fk3Exep`r^w6Y4~ zoUwacX-dg*w7Hf)he`tj&-Xbx}G1kq)Q1!wV(O&@{J@jRUEasJ`DTRgF z!0^K{2|*%yJ8>A5=g1O4yaz_7zi@4|vgl+purb_+ILTl~R&7dUjsCYH82dj~oA!TM zZGK*VI8H#BrsGal0;BzsC!>m{YefWnVnML_BghMaq`tukWUg!7uznsWZgW4jOpJ(x z-`i}oB>Lzf_@<)i^v5+oYWSy%VX_Z4LTG7jZZ(uXI=h9?_k2g?m^k=u#C20lPtQ3g zH#cf##wGmG*4J>S=WlD3jAFhd3E6#98tqsa%$z8#(K@hXeTL9fHz$DGbb>A>fBl

vjw0+>6w`^cvK^8U`Ap@m}o~vL@;9D5QQBdV{X4%OmIK$3jS;8w#+HbrjH@9Uq2rO>Q47Ifpf0Ry0N4&qNa)H zGWdj_spT=y@$Qhw>#q5c%nDq&Kn6TTO&`g=8`uz+E4Wg+YYCvcA4Bswa6$Ach`-Xj zyKa*Bu|SHkp*{X&e=k!7mwjmh0oxpa81)PKw#s45-8@@#%hyDt5St3E#lz4l-b3kxW?cy&*0$2?TBpVw_bouXN!~kR6 za#_+5$S;XzVM2*W{vNuHI^_34>HHA5>gwM^F{s!R^92v;kTkgJ`rkv>QHQ*rlb;{L zf)d^Md&uu^@TDd5UneSiaLi>3np~x;ip6uV;U#5=J3!@&X z!R&X#v8o@mn*rb=EO)Q34q${|lL%EcyFK(Bl3V>X+SF12!1e4{ldfkcenP?NUs99Y zr@C(ex6_}QgaT3^Qgft`lW*a>KCZCV7-e{|%TAD^=JpiBOJK?bl;}6mHHPt1aVix; z`B5D%yhXdfV77K;q};@Pr$f(yq2UX;G#YwdViHZk08@dcDfKphWAv#(;5;fiOvmI= zPra$HiQh#Tl$tOwrBrGr63nAXm-CxO&>9w3S@CRWE?<1z)Vm>6!)dkvkm^?@%8dcb z)Sh6)ND9ZUirY9uh+tT4_H`7w*|@gli1?m0(|`RzBfl% z0FHNLEW|DdflpTN?B5YF9e7%6wNd9$30D|f!$;RFl0T1{YsyhqH=HEAxrGO=CKfOW zyRoY@yW+L6HfkNhlI%9&r4-*8&Mb4Ug{bf?9md%6%|2A8%mH9YGQZE-)I$B_j$6!i2&T8?Y;88urarfb~Fa zp-PjKVrz}13K$xexI$HD(LU$j8&U-3Yc)B_a74@-v~#vqKGwdMl>*Wlh=a0PGu^xv za&#ub*Md}St1*+s!IgwV56Nb8n}aN2>7PsPzr?!`e*{^vw=fQ;X8x(KfUeaQmYyDw zB4^SwS$%8KOQrw|Dx-nnHG0Wu;3-YgtmkmF@XJi0`e^M;;)M4{kkU&suP`dI3k&g! zBQHXDEs+0#=4sjX@abWODZC}Npm}$8ihzAfd8qjgH7?uU^X+zGlPJIhl^5R#cyRvT=;ZmiRmp^?__Tarh9PXCQ zjHJuc9{r`B#IT42M$?s*Bn(Y>PWRe~Occ9@RpVmJ!O&`H_^u^>GKU5;IeBDHF0V+k z=OX{0IU@AYX;)c8(b*z|n=o#Vrs`Pyys7$f5)HzJz~-lfM6oV%MB)PwR81#KH>GW+bv7hfqR~i0gXLIx~;Hq_$(qLf02`|fd*xi|F(F-L83OlYEUZzu>| zArDD$PY+ye?NYhPAWtd!w53mZ>OHEYeVU$1VM6_#p7Ecz8oLE{2~xcbc}xKbdOZx# zr?98`^TWH~{y?@3xPUJGCJ)dp@fbBhb3@q3g3&q3UX%dLuxs=Nq|Y%S@9;oFI4z=Sh?^aeXvo%AsE zazd@wl4d*q>$g*ir_EQ!ojN@lUaQb<6R#wTbS%zjZ+X|99ceXK!Z}FBpi)mSLP~2; zJ9D#7y^4;HR!0MC~-B?-AR-r;{SFfjP60sjF^F!?wT##rEGZJM7SRfCZ5@Xov|;%Kkwyoo69GPt&0?6njNfAQkLj3z@Wxpi zX~fmuXUXHvMPA4o2ZgZ}y5VyROkNyx(#>Y3;y|BTZ)Q}oXNwc~D#+0gE>U_5bW+qT zYjFz9#zlSA6iYCdP~##RO@`}^n&%4}H)XG*Vnl;}6{-rbnJGWKDld$CFmT6gre)h51vHp1=ACjtiok!m@td5s{R= znPna2HG1gYsNOkum_7{sQ*~fEha&^Y61t<~-oV(HN$+b=a!l%N{rAWzDCGYn`=eRD8Qi_-s2vB2nhVW1bhdoVqOzSPYBD_yXdlOw z`h_Vb`s2Lag+{Ud5%C1PKhF+j$ws_D6%y3RuRG5&w)b|H!LpL?EA@yV*S!smd)_D- z37thuLG$V~uW`gs7vEt04d9Fb_Bh=jhXR6mrLDU?vSh9`zMXntU5)TYpAM18>(a|K z55^W%3f0*+>x48$3N@^E_Vyf0O@6$|$g8c;+U^R>5DY@?%bKu z0WCZyEMy`nb9cwLgS)#7nu8atcP^bb%mS;75Udzpn=xR~5%`y>xSt;HZmcT*t z;o(xiB2gT^>dr@>ekZ5cFiiZQ^iaY4{Ev?ODhV%p}oM%M* zR8U~lQC5js(q#iQLZgEXOE(6b<4GSP);A;UdV(rt+QJ!!y={~t-Q|1APsydBAZ zO#J`L$El$NwQ`h5z)=5FKVO9M7lslPL%fU4(A^L|G5o(I5zj)WN6?dW3jO~R@&A2^ z_;#>2|9|MCh~_SZomWu4u=QE4KX2#JSrH<57AF5i(>+1Cvhwl1#nhe1fT$Pmk8Yj& zH4f5XZtH7Dh+l%-!=0ylAbYGOpk*gcNGN9Mukma+i`B5DzRX}0hk)#Wk)I39e)=x- z%Tl;pw})@`4P$~11_BNp^}PbGK3dl#HI4YhVI$2lj4l#c)?kC5PC%7~&@flmsL}H+ zJ(Pa*`?fV%>-4#yK{2nspee~5Bm+hGl)Oki!(K$^uqR4AmH?s(_*ZYgrm;t#{e zm@49-;srVW1{6HpL}35X0+K0EDQzcND#$O~^=U1AR;mXs+4D>BzF#Ju3&}pxeBgF4 zne{cP0A@IaA=iakNhDbVrbcCrxP+T%)&V&`la4iy_OU88kVk3z0O zy%CY!T5POHJL@LP=0Zh59>$C3V+V{XOGGg_8s-G)SiO5CO3u2RY|}Y1qCFlX`$Sh^o8K0N8ZVUtsqsucx~o?)H<}Ap2DPX#vTy93 zOqFglXBoh#H(>>PKeIIHKpv z6_3`Py&@qL$sC>1n>(I-NNH|S>-?hV4{_>hdzCmAT2v3coLY1YyF{#h(MV9>GvA;$ zKil&&pGslv8D}XTM$c(2)?jTY#DCj1wr1ou%d;XP4|HbkU{*gCEd_*c2UK94rGrj| zq9K})l$*SQ)q61X3d-AMsMNCL31!c1nA4^fn>VwBf#!dRnQgA|?E#q6ZEx&Kc7^1e z@9j|((-AjSlC6C-ri9mPtS2rV)HC#inhlmsJXoNsN``xM^Pw3vf9-GR*3j{kkhd>; z7CiM*i-CuAwBy%WQ3%uMNyq-lswdT?ndGLLL8l4K?FN@x>4)9u)RxxH9{xK6OXd0o zTCVRc682IVjniS?Q_dkp*LKIKx&+V)Ifxq`{2H6z?!b@T8Che`!6PyfM;M6XvgJ<4>Yd)wWMvmk;oup|G-kSc}R8LG57O zXhr{SrkNybTUoRILMdm)o2@LTL(y%O@57(bm6G|e3SQii2__lZ%-yX>-45qWpTx|D zCeg|Wb--rg^xfqXpS%EA<1D594M*kJl4haw*$@oFuX2T9XqghqzEmc&3H^Ds>n@vV zncF&%BTco3OQUUlo0^PkbZ+7ui)>f!JMt&T3m*qaqbb$QG*RDFZHejHWH z5>Cr+u@hX4l*^zLzCNy`<7hflMMZe=wXAWYWvG--IqN;Abr%hz{?sFQl#Hxg z^!?x&j+~>Z33lpi?;w8}S!cQH{dQB+AFu@hLb|yp$u8XWc`!JGx*8g2Ig zM>?e4L^w<}>$|kGljV*A-IKx3II;sN$}^L??y=ojLH`?VZy6Wm+J%oQ(ukl~h?Iax zBPk7{bR#)**8tKTf?&`ojnduSq9WZx3?G{qVtu|UE_S+8Nn?hZ|%#c$0=@86Uz0BhR;65E+T54 zr+Aq6>;^1>Tcm{D<7Gqzv$I~IF>l0B4`vtX7@dD9yy5tXzr`3h8K5ewy|dU4f}hvH zIhKcK<$2H)fvBt7uQStpMHiu@ynaLPwt&Q4hH2Z&$Zt+pXQb}|sEQ-Gzr9Mtp{Avg zRa8E_T>MG7GHXwQJrWID%tQ1^cj3+Y!dGGV8MaI;-0B1gt8F z0=)IHdReXs0qM$yeYv&wqgNyTGk5g53O@VE@Z$xMI3&u@2}+Bh5)8cXx;`ZI)W;wh z5FPa@EFG396AaN6NEloSoXex_By3%$u)}!$Yt-S??1(C-L8lz`QZ1*(9g(bX2P1yR zEY64<5P#r0NF8pZ7SlJPN5~Rv&;(veKE>zZX?!$=p$Tiq(lYVdmX5OlhqMPsq<@W| zzEyyFDx>hBY8i&~TYB4#e&;)*zm_XH<$5C-LXJKMk=q#rRfd^dowU^PASQm(?q_xq z%nCX6T_5qD9?PwLDB6{>c^r7AYR6vN=D}x9aaBD#1GI}@mz?XRreTpf&uD`h={I|u zOyu8NO;zL$_NLXFBv=(`k%v1OWi53+Kh?eyUYm0l${(&>_r5+AGgH)J_XZ=eX5CL< zIlUz-UM+m{bgPWU@{)nw^s=MNC!T)#p>u%@a~#<^<$Mo!BLi)4ofzib;C-#OtTofl zZ=6M)Jb@P-gM!i{4KxJxr}j1HPuSs>50zNqh}OpXBe`RbJ^tgd9QpOZPqAH<_4%82 z>N~`R@J_CJ7VyuKW>#GI`7L(cz*>a-L%Rt6ikbT(ylhtm2yB07B5vZ_&`73Fk4lj} zB9JPWDgI9JBYZ0Yy5y(kbi`a{6GfMIk7qt-&3_1Al9Cf^oHRvMW|X>glSHIUD&Hb| z8~;UZz0*>9E1WLFRB~aHbT+Cqc_l}~Zue;GcOpx2xYzri-%dkFJc4d+ zKG&SmxX8ZA_=v_6H=vz_eA?z$Ofm%v%W-V}bK`)6#|(y;q)g-m9*XobNkjq3&l+|y zPsh*3GI@5#ei3xPQtysLue4GVv#4ZhsxSy<)IN<7$XXSslL_O|wqwVG6E@hbJs}?Q z6mqu`0G?#Zv>v*j?BaEXRa7f97V}+x)xUo7GkGhw;Ina_Yg&t98gtl)&_$K`+6x}N z=J0{0>^J4KV@=(hi(iYmg~i9a8?43=s$0jE`RII2HZOPc!K_+e%GC0d=&+!Ih^--7Hh+{bGr9Oj(zTpzGqj z>oi;_$0j?PM^}&mi$G`?vnrvZF-lj+s~$%ov_fQ=HZu$LosRprA^C-l7y-W&SCl8S zythL_qT_b&#vi8<6-n)L>pJZl^%kiQgycR(x$Up3?$OhD};3N;&) zREsqGzk0$L>N9%9h=(nw3oNU=>8qOT;vBerHymlFSjG*H)&^4!?`buzh_=ggMsFqA z7S&%K6FDsdMMb8;uRpUowQVkhL&mqzlt-@B9oM&-{0>VtoX@S3CD=U3U~+!m(9mGi z)tt64H(v#p-}(HxL#B7xGxLyp5ObvG*0^OJ{HSNg8Og=JdtpPPP?tD^7~2x36)<|Y zO!BJtt@{EdkI@f~ezx(}y3w0$)r()ekH+(t3e2UC>Bq_~-=}AoNQfHxndxbV4N7yc z4yPXN7EPMC`z9GKdtJbpSKN#7)5TEF#ef@! zuy*;0%BBf7kqA~8YNXY3>vX%Zm9O5LLC|4%PW z0(Yi8R%KA%j>eb#BQc(R^hWXx|CQ&P(S z_MuM)9fD2UHkGt$H`HavF-Z-!*V^QZPx;m~D?9I7FCcf)ippVL7o+_q4__4|avVHT zOIRv$8?)~1T&2vCKPe$bY!mU_6>)b>N%F4qoY`DbPN{55X*d&VOhdOQyOrYNy3^EE zbM{NEaN%Vq)^APgOS54-CbjTTN+1IAgpP@nhAQ9zvM4{Fv7d#u2w8p;qL2c~iS!%4 zf{=Ay+S^5!bfAFQkxLI1FoOe6W7I;=-fb$?)v4ZRir<=Aem)YD)3|i-tdIDlW&te)qPZPZN)2kWI=ts-~%B?1X%oX2?b7idqExI4hbOWY6qNy=?{~1QEC^G+gjrTw*LRv5H z6x@2uPNv?;ri;oLQ?KnjPc#@)Z^NeQnoMXkgPMe==b(_!M1e)e3K!EHr{iMHQB}Cp zk>xh~5~7((Q2=6daWw^IFK9%FQ`|%gPfpYEtCqfXNu<0T@JI7~9qxum@^K4`@kQ=~ zR&7qyYhk@+9}%`6LE-X}Z!cT3zkU@_jl&WdDS#3ArYX@t$WzDnz*~rTYEF>^XvUaL zASn*(J(F-!bt33~n#R$dWPQ=;4D+VDecYsoaHaG+v&37!1{rUbp6!@B3YnPKh zb~~*gO#_a@!7d9Z0#7uQ&{de9Tz@2Gvp}v*keK1neF{Ay*7FG!l|Mg2uQdYJ~ z_nY#c`2R#0UU>={n%8V>Z15YOJ_ov6e^7?nGLR6Ka6V3-J&C0n_4V;G`!*-QxQcl9 zZr{f=?Vr#TkFGR0K+VL-l>4}yu3bsBa*)ivf0kyEJY@<^g=uX)7U(7i3Hwq*9vF{(6)&nVQ@@&*(Z&FKDZ>%8tnCGY*WwjLlJ*}573i2Z3%AgIXI zY-Ru(EsY9`_m=4{o}Zqmx>9jXH-|vV>IEXI*vJIr=0}GG zcSgcnWY+ii?+p6s<7}=;F?T_NTik{=c<=&VIUA7n>I^gb)#UiC{kQc}8-LBvTC{1F|IPhc zN=}M@)i?Nd5*?&^1_sWl`La-PA?2>aCiw@u3n>ycuFXOI!fN;Wo~QBfOn$dJ8O%(s zlowdzwhH61U)(GcysgSgO?kWU$&!z-5u~$Wq*Z5BP_xLg(r@@H?$DS^;2FEEus6@y zhjuoH-+F5$cEc8~OB-XQPLpmVXBK0x@g95$%zx(%6OZ*@OeYdc%`IhPY}pV2QZRsn z(wQsVE@F{QMOs=o#?}p4H!;n3dXlBHEBx_AL3x zI06BBFoI^>c|XDPKBGieGR;VPq)6&LU;4e!I@|rJLS6FeSgzYQv^cLKSpiPEk?}&8 z8JueE_BMTAoxBinpSKT_*D4)t`|AfuBddjmV&oK@!Y1HKClog_!|FeUE2dpno*nXR|!JDh8JA|Yk8 z85Y1HJ>yirr3vYSIZZ!iM;yGv>oKn)V@fmTgC2MdO?wh66kIrQ2qoDk)KAPROP+bktA~68rujwNIdqu<{}m|5Pt5^$D{~ z67)}>3Aj1L#>Y=4-^w+1B%kDFV$y!}XqA6M{A(ZjqYd{!(LBF~Ru;m-z|Qh4uG{1k z%5OQZ8U`CU)JC>QrXu0euKKz3WgNy!t2lvC8}CE+{-Th~@832_C*SWyoELq!kGEG63&TXFkIm~9JON$FGUUgk|SZ5<$9Hrjykjx@P%{D#rV z0s2OFaN7@2qaBxFGj_Bj2I!BM?Ccz%6VJgnb+V}aSP(Vg zee4_f8%;+E=oW%8rN0wkSeFJ{|4e{!5M=!jBMlCAN50VJqV(};5>~<9QVXs~Iafbs ze`dA8%Hl4`9m(e+8EulknJJsF@R_C23e_nsP@$s)T$`IOSMi{C%-ql%Bh>XZOn-i_!b(=yjBYLTLR*HK=dl z*&DWQjIGZ(iypM8Go&?C)>(>rFY+jEh3XYOAhYHHfeRW?Fn#Ihc(6J-;+fIdku`eR>ZPrW^2_^1uGh#3^ zLwF+e+3@_P?CC&6*|$5R^slWgsTdUS&XM#@&3MX*EBhKnQ+B>Y1 z)4w@67l2V|QOL27j}IBrU>Sd$XMSjkk^zk8_024X<_N4uH7c0t|jr|kN8*y(U!s*)|^sj?O6BDEVYdSNqAsX-#!@%^k zu>xvpCzQ{4b0YNJcvV4?%ZGd>Qs9~F^8kz}u}Ix!Olw)MP}8N`6O3n(7ewVBe_q7R z8Eb$E>YRLh?6%x;`uO;l&;;XBvVG=qo@e44>nW9!wgl^FAO$3fN$}`d)r3Ezq$;oAB>@rEX{mDA`0U(z3)u4sD^sR<8T@GSa^G-D5=-fzJ0CZhr zcNfm$VbAYL9Zs9r&e21FDy;qHic3&`@WVn%-qKC|6*;S=mD&2d>c@?iVKSKKk(D)H zD;aM?3CA^G<|nBF3E{VFIX}ST940vz$9yC(Do+UGZZ%wy_5Tp+b;0p|k_&NvuP`}i zu)a<91h48Din6Z)W4Q+Y_I!jfr^Iq!`3ACm>3(}^e|OQO zg(Claexv5v@W>Qv(TOC$;J=VN1@d5>C!ok2=Wnw)b(z6TfYgxP#M`#&j@YQ6u>Q2e zDqS8P9yW_137*Z-A|%^MEvq(yVqE%3GwRzbV)SnegdeA10yjJxVxMkgI7XCttQemj zEb|(_Jf5d4RoEYW02u!`4j+j-9PR|}Veu0#pLwqJ98X`AI_2P)$+8qMTe{7ABkE#2 z-y=0#3|gHt>b*qyGA0r@N4q$;VwqTqY;7n4h0!s-V9>v-zFo+x#2(8dPytR2*~6&< zLn|uw9@Rjqs12)=4Hf?yXxgzh>{{!cuAhixjV0-#24(;wpW?e#dn>17W)j9J5eU>Hyku=LuVD(-$vaaOQv&_V~I@Q-YHe?NJu{P0E2eE26~kK~a#v zV82@ZQ~Hc!lI&gJ@2jztWjC;+7vuTntSSNzG9#O81%xY|-Ue^9CwX`snPRQFRgsv2 zTGXGrAC?ZkvpuFvbVhT84x(!<8)}cnVR=CE?So^ZLnLM+?|~{gBULl1$q@`5`Kl9s z7-}_kv(|a)g#C*m0)8t~U>yh`f28>fzp)9PujFL|?k}A4$>}Y4=V)nR!(^O1gHF`=uWiAHP9R)# z?6i?Hl$kbd@s28*tZGdjv}bj8owDRZTN@&X%oSEieEN6DWK{=vStP{+?1?cUYx|CgVeHbym{ zjO<`Ve^a6q*hnYhZtiII&dc0xDsg7oFHfMpU+#gfgKwhu6wm47gK}m07!`G zQ^TMlm+cGph4wb`&pWCE^$2u>g{2s$5B_^C`89is$IPzOQxSdPm3DB?*ze5$j-8kt z%&6#f-@hK4IHT&PgKxpPh2D7GnU#U>guYl=POx3hGN2lif?!0pEXfD>xWfq`V z67I3{GuCc6I#yay@oNwUx}3X4^r9|gicVS zq8G!zNo?xr*u75O!EhJLu~+bTU!UG#g2VP*H4V0KXy&*6Ek`I}j`MWD+T-f!?^lJ1 zz8K-(t#`(A`4uZyY%w+phNqAcGC$p?FdlRg6kX=veIi6~y}GjeuKli_@`fg$ zOZN(<(*&Qal$A^3o!lSYjQ(ii)(gpgRqtRSlMM^xV{xoJwHPS~%Y_+*vQ;YC?FPSK z;r|N3rU(mzrYC$mSL@mGZ`75;-UQ;+?|)|p!e$m^*m;!;gEBUtqH<$nH*ity1d=+# z-Rn~k@oHRAgs+xp*EuES>o$p~7HZP?VRA;pH}rVV3o}hqJX;ce6&$e?0podW&Zivl7ys zUD9>wcWwq*?YOb$hjo^!NyhgW7+gh$h80-lK$OP%a*xSw^lRYJfjRuoN804l1nZNz z;N8zDmv6jWCJ(KOwqFtrtrEVg+d2sZvMN7k1M&XV0w}C9CUZLqN93A2p0oGzo4Q*% z##D^xTo&=~E;Amdq?|+I2$-a%2|#eA>AbsWzSKr%Hh&S!556R{MVlbZ#Xc=0b^XA& zj+ONiP?qgLa8L4RPXQj7{kltQ3O790d@&2-bv!rlH;BWrv}Wh%i1-a zQ;L|vB2I$$6|wt&3V(i%{eo3r+dgJ0TUB(cv!^E_!KShMAe+oc=RA!dt6{gpk_}Y8 zkeF~WW$Ac}D%U-xJ~vO+jTGl8V|QQq6sLGC*Pq-AL(1|~SsFbxJS1c;#pc+pVC*Iy ztE=#>>K-_}C~uwqLao=^ACoMVQ!t@+`7h*q5F(z5V!{cxb8V{}7t~BG4-ATfkLWF{9!)iKwh_ zig?72IZpd{>z929akiH!%rfN)Zge4t?V5WV)5ZQY1}<z@l~Lr+*cek z9}*c`nC;ZZ2+w78_w9+fThYLCI%D>yGvCm|04j&8>M5a^FZ1n*+>xc|B4iQkxZ*vi zdc23$a#LPnWoqB){?feCr`@F2@+l?z!U(7c_o6eLz~)A#rrCi zDra?L(cJkEu^GO4c;9VGJ9OdZ$L)F|NDIN271!Zo6^(!Y=UhUGXP^fjrVv{;94RT^ z8}{ydCfyGh(~yDac(Y)H;L#7P=|pB73DnZ1Od7mNwQ`q9Jku*;Cu}Keet*Y1K2MC98q`gwZ$Do=@fzx8F>*$!e%}#@NhV0c{ zSB7VFUnEjqU<~!*er891Q#>}kg2Tku`P%cOEZd%N^guiaILNU+M5|1Q>6`c-iHkY+ z@~g}#&UTqWli)_d>;5nFgu(Xv2(c?s2dQQi1@-b#?X_F5wCZXJr9mYc)ebN$RjFgm z+V!ZRLVJSDiTo`ES`x;cd|jKHBr(+1Ri0i4h6`J%Ukb(FsTWO=A&%`HhLy*M^dS)U zpD`dV;2&1JaI#U2?{ZfBfTxeJIQ^_S&W)XG7ru;X6&bG&)~BdI#Wdo}Xw%a8;{3cB z@jZ&bx)&uk)ePRO&o+g4ulJ*P`|JKFez#RoZo zBgm&%k8Op23_4@(E>%_?98`q5eRdODc^*;OXBs<(aFVNMYm#%{q4u%-- zvMOtllaf`|ea%lZ&wni~+<-XzVt9Xb5QuEAKse*Q!zvb;$E#%b&DX%1bijM>WHM~% zx4-Z_+KqDy9qT8b>*b#T4zJZ#SOGzXIgpn37H%@v}1uI6QGLO1%71*KLl%7capISvmGw8Zcr&HnQ1m zJn`!Oq}Qw!*t-z7Z&`KzrlQ`PDYLj2uDM3(SEQZfLHIkjALYE zBIQkvpP9*VbEtlDxgv@kKy_u%`$!rX6z!Aae69b=DFmg2KV9w*O8R4J%1kOM?t!UX ziFdA}yWM%n=k+by)IYG4nub|9Cs>W?COPfs@B$~Mo&@?6FVV5Eq4>xvWtCTqVVwNZPu0^ZE!w+@ z^#vBv4}B`KixspAji7KL5PeT+tuVOy)?EO_Q|y4GE@ofp$y`(m%X*_a zQ!o(jnm9c~9#-2`h($WG25f9PO3b$q7QwOqW zHKq$gcYYsI@a3Bc0amX_uTTX*e5m_j{o%v zTI?KpGg;t%rwV0!j<@D%c2bS8K6KU9pa$DPzX~%{@Wh`V)oY4sj33uLUT#&HTr`Bd^;m}h z8WEkmkw^}$s+Yc9K{7nHQ!NouQTdk7_0L}LERJHZ8ShdjP1VBd7(Jci)*0!BS3qby z?iIJp=uzhOuUH&{ZWSZ|B!GlsJE5(=Fk<_U(i?th(1>z_7q!I)RO+9bA`;raH_4}s z5EVnp3JAUnVp;(23jUC;TH6ZSAWT*Z;`m5JDnE*^%}Dn?b7r>M6E>;doL;jgG7N*sB-+ z9g?L4?*eTJuyXaFl^esj@L#2(SC9zN>U`pV)ot{O!A8e|>^T3vH3%e-2$7?m+<&E# zSRvy&KN{(pf8QFk`X1N<(Pbv5k=j4ESF!IxTXSFK8y8)~@Ue#}-Z`fDf!C zcY+u$bm`42XnRZKIXHmE{Ko-z9I&h2J|*1w4Nt6yUH$KMjsnF2#IGdj!GCWUaI6RZ zfdy^mEdSmfJws4PC2?k!g+j*FpCvv8a!lo9Sq=YQrB5*6(ZDBaAmP$~-pCe^0}BS- z5)c0KQCvWtsp9R@0LS0I5NE-Dh>rM|IJdjLk z6D2;y_}@pM78($wuQWOSWaHzXU;&xL7r;a6kKWxKymm3~pkcJREN(%u`iCVgr~KtX{aMJm z+j5Q9knsMDbknWnr|d%ZPjShh2Tp&#Fw{SBqTZ=YGyUprf1?T0VU^7ExD=C2;G)#b z3R>Iau$rQSdG9{RnJyP7M2alj7S`K_)^Bf21auDTU<52IweJg^S5cFP4O$91#iKE~ z=PrCs@O~y+=aj%F0Wmydgk2(QQ?H)-2X(#g8)}530bjE(Oohivpp7#L7K&5WcP{We z^};aNmb$}ki<9#IHYKi|MKlxQf6)G7Q=CBpv$rXV^g9L88jk zyfWENVRxIobhEB$)yX@X1eR;LFh_DB{R7#Aq?aQ1l%p>osd}P4&W~SuQlF4`H zX|=!_xuyMN(zEui0erc=xUSv`e8(m1>VW~a`+Qk70(yzS!U?Na@M^zw8zdn>P{Y3H0*~jIcU`Bddq9Am`8B%D@&1|#-__Ev~9&q+Av0< zt9`RN9c*=Dwp=}WJ}`waNm`Q4nbv%gVt#NOHIpI+L@f)YJ={q?Zr{*(MI8V}gU$p$r zx-*rjI%ZiB4j~`x`+DVA&kIZ#NUeIz!YOkOE|uoX#HrF(C5WcA>8@<^;COf+pO z(`)$hkFoRW?S9fjLFNRn6I0SIYoLkQ;JsDHP#}yFFt4<(Rg$($630q~U2dn6-7e5L zjq`9h=1zaBmXQtbcF+51DB!BsHl1AD)1SUqrJ;;d-_5k!F6%5g`5?h~i;rAlW$tod zAxFrmsrF6d(S;2)WjjrZ_uA6zg;g3yjLPp{9tukd)>Fvvx0K? ziQ|M>+~G`-(HGPitYXOHsD{in36-$bJ`XDl>mUpC5@^&FtdEDwQLwgn+)VRHMP^6D%Izlc{QH-4Z3m5IN)sY`21NPXX*oHB1`SD!Tk~ldM}f}EE0_u1 z=iHu&f{6Hl)E?OOWP;K6=q0Ixma>eFN0YKW-7!xs(^WBQd@~vvqkTBSNl$%?{GMAMPn7T_!s;>7HKCSLraMiA+lh(q1TD__l7-s-ghR4; z;38x1xkcS0Ce^lVkJW(Zobe1F5uhM>-$uFYZKOulq*$pv&qXbbaqffl1Mji(b&}Ha zr*^}u--vXY-7-Ox-{gt<++9i zJsA8G1z?76URxLgI#QIIGm^dfx*w~tkIZD=5}dd7d{<#9_;7*#g7(?2D4(_80*kOwnJiATf%#LL@r;g!O(4`!2j z@xQ2g_T+Ek44sG_%p+KXce=c2u5>N+aJo{q>RRB#x%XV4gX%2}gnP6qVmkf)di`v=@8RbkPaFDKSAps9db}P4o94)RhoQki~{un|5|@o=*%u174*OI z%UoywiR%9o9u}D}G8Jxgg(#bI(B|6YquL|0K6NgzVULfG8zDhzu2kAODhCpJ!Vj-~ zKZsi!mM9Kgsk^3LqSZM?OTrRtdf?mr7RW;FjFtp-D6cS31+da`3A^9!xprCZp%>oT_ zoh9r9E2m_FZwR_6AKoGkBP_#6R@XA( zTzkSr?8>PCswVC4=D6cKdS4;UXH10U)`yMp@iHg+QG8>{FZi#`w|9ru^D1>R`(L=w zrW%3cYKHz9qvm>{W8h@ee`4ls5HqFziJ6xuef*J6ohQX$C2paao3G5~%uQQm%wL}R z9kn`l&-Cw<5$z-*c|)_(%2`LAwfeXIlmG3UNXSWXkw}8@d$VHv zGSBK#TOw%D;Gsd=p;OQ(VGv}HE4ck3Lih);sn4a&x)OT;@er*2 zRQc;VO-S0?#8=y(F@js;{(@|Tf{hbyUNWNlqDUpWLv*2Dj*C&~79@^g0Or%Ve)0OR zg1{(GK}V@*oxsXK|5%q4MqQ*DE%Dl3^i5BjUQR9o*!7s3n}<)<9WL9wx#*!9OXdw78bTao zoyuHCj&F|fXtxn)sQRFxLQ|JT|Zo%i(yIAS<&hVS1x+NqdC$M1TIpKY| zP5TYa%=9>%YRlQ7&+V*49P3uTW1ZvFE6X=0^F$9ot1McB-SiPviv@CBgZ+lh zwFJQi33$Wp6kHbYS(^A;2AYXp>jfpqR#3sdZMXme!xJc^sFHZQx#KQ(BO zNn(4ARSt|R!?~y3U|2PCZJ`8FQ$wTF3~B|HQ>?>`pcKdZP?b-G2QO5Ji|}_Y{NqO) zHYck_&^1)FN#R3sKdLwQiB&prlKm5o(J4I*D-;hvVP0G*H2yG1u&c zz)=0V9wj1DQqm|lQNOKU<%^3Z#Lu4~ao>2(VPidJRq`r7!s5NAbNa_Se+5S;sVTQs zbEvVwJpQM?bp3uuG5L%4?wW9Y-0Wl>Yk zVQf^)N=-R^cyx3|RYpd}O3n?7lXsd!iDTLe_t@Tkcd?9eE*(z?!n0C<P!!1o1h)2AkX9Cyux;_$Q`^Xjb1&{i>r^wN{xwtyWFZP>C-9xuNVz2sq z`-Zmm5l07bq8v-hesDioCvdreaaG-<=z9&wM|e0S0A-P(v-R+ZC}qk&&&?fZ@C@qm z3oD-0JU&EjNda@yt}i-_7MkDJY#N6bWMEbBK_u`W^E@5$wHUih0^U{{t%1_6uQM23 zXX#w$``b{PaqOncU~UWA;maBnl(gJ7m(#fdrUqB1)fXr_IMWGEMpLtpyGX@uT;S7J zcWad^&=;QhPDSk{SyCGZ5U-!?l4zX<55G<$b@UgM^=augh6ztyy67=5X zRO)=!ER6R?b^X!u6FP$HFdWt;gzBWEA)#%E&r)2~E6+1&8{a%3`SQkL2Mjc%nYlgG z4Q{@xr}=J0=NK&sL5>1TARX%4{i)h8nWCypRC`LTUNe5M&fbA7#}69tLzNZiHU^}= zU+!+ZtbQ+yy)+H+F7t#CPlPuA6Oa@wee?)iYo`*N>*Cnkhk;|=E~A5fBpv_2Pf-fO9(>~)+TFhOU#(Kt#9Xn_@oYskiZR!) z9q#G%z}1K<|5>rh!VMZsLf$e$p-=e0rexhlyDcyM@Q7aV3HYh6$|u>-QdV?Zh^8fF zbLICU3K>LqQ((c+-32X_f8V*iy*->NgqN!x?FDqN9zwAH`n&Xp;1q21!Br15;5nM{ zoBzA2Avu(@qQb!_B*}|mrbR_7vOE!fZh9GVF zRXh*Iyd_0iIC#vaeC-b9y_wtF>7X7|=V;0CE&^uLsVGiLd3jiM3d-zupe0aa*YmAx zpTUFN-Q#1FX3^1xIS+7yF+Nxa@W3^1ej!#j5;zcva@kBh={;Y=$XhR|mBR{pOeZh2 zmzaOPO%-Q7dDEi>V`+ug>v)Kz{UjKQkz~U~*geG0UozKkdk~uruR#7hfNy{r4bZ(f zA*=agInue@pGHkdDYALea+nS*C%lZ|YMz|=%W<1n3lYpc`BY;}1Mm(e3v^rZ-ifJ9N$T=y z=jP@4m0==MT+Z}&np$KU(9}uy{)k_OZ+UHD?Vj0R4ms|moFb5$QQyC#)odUV(Ax5% z2~-Os_%@F+>n~2EBjUnukB-1ddNdu9`S*Hh(cnr;3XVzMNB!T>Hp!VUe7$H&#tYH5 zfQ1f|0yD!Ou(7!KxkKziz!fG9jzHBfO!XNQw+BnO%SHwFK7;cEGVjD&R(XdTk%44h zZ?G~=6EBR94bCxZc5^LJV?+hwiIdKkH|*Lo)K-0zgL88q2tIZldRuDzd8@>PehyxB zgeK3qd$MAh0!&apG4h^vk->m5S8V6O2H*Zg5}$N_>H%}j#sS}g<%n)xZ(4_fan8bO zUQyrlD#5*LEWAr-0tS4SeWLT_gL1>Z8%rrgk@k&tU#GlI%mu1Mf>(R^j%?3!|D2ov zP>Ket=t|-f_b!?)R=n74I_wxjxT-@4w&lK_=65|jWnhCcstT;%lWO5mtec)|3m%>Z zA+GayDTx8NbpX12cGdBvg74Z8-v7?pC?i4J9ATwKmxqQmS< zfn5z4%o3xz{ldWQym6tjXe|ewelT0nmDdLNAIT)L>bwDksT11`@lw~$`@kONo}==p z|IVD_#o@Fr9bh}(vXYltJz9EFjnBJxAv9$6c6&Ea=tATEW5@Jlw6B>WTBpN#3&m6+ zI6dE?1D|yUjno^4@6vx4>KD9_o>@@SiR9a=*A5+R+*xcg?oDpkZNXx|M@QwkUVal3 zA9e^ZSI+9lE8=H4Mm*NJ{I7J|oeQ&{S+K39^)YsG zlP_qh@d2A78D7a5Ju5C$FC9ve*Kh9VH+D|I|BMb%Kbv545)Yh}S7_<8kAFZ|0`yB* zne>Z|=s-GT#nQ*TQ5y_eZ{FNh+1K`M+9{uHW*fz-yhok)I_r_RD%LnH2NKC7wkxM4DCiv>7xdJM7-;RFBE z`Ui=J_l~EW8=0ohev!J3|Ki(X9_H>i4*dh=6%TKMW--Z4l@3t6@xu9m1VtDQIavmU zrV9eHopqov7s{s^B6Oin_k~NPS5c*DTxdCr3au@trjia3Y#!byDcOyZm6v~T??s;8 zS*>MJzex5YeAPX_VTboUpDq02HTzRuPkvCf3BGoEA9_L8=jUrmD(S@}?J*GBKUM>2~hK8p@_lMj#8&T?rg1CITprg?*8Dt1mRsASRmmbIuVVv}rwNC8@{ zKEgvFvq=-{{s{7bCbWVL9oMqjr7AmA760y4$8A*CCyQpZDb)NweYBZ}|CEEA3$}LH z|CHB`y0JQ2Xyz&e$P*Ck(SN_nQjUuVimKMA^1Bk#!D-Kunym47bM`V0BseJ)WQ);8 z4?;mA&o@nM$@V_x+s(m$&iJ1weYY@Bne4+jI&Cfg-kMCt|KDszK!8afJNG-??GLWk zlVb??v|nKas#DB{BPk1ovY?#*3cG>0PXU^Bsd`uTGXFq}DNwwbYrx8Zgh!wR6I`<} z$Y6w9pp^XY3-x&0cLH6uL{>rnO!SE@K>SYbQ>MwDa#GT+JFluH*R6|j*PwTI03VpP);$KUTnsHq-0a*OO^d{lO%_lZ zs)+zLm~bS%2XTAvs{^iQa*XZh*>Q=M>?&ZsgP`XV4nsOI;R8;l8Fml}x9XX%mAOXT z@(kjHjN8eIL#~(S>Oy&OSnZHF{#OF!|6J1SrMgKv4N^7V zKv}bGJ}6ij)+K{1q*)j{+Z<;VldWPq%HNkT19BUrU<1hF_t^_j*nZ5MDsFu!bf@dG z96d0y&jb8cPXb&~U{p#Zm5&c8I=00|-)E@DyZ+?ADQ@!rdy4x9RhhtNz#knRPFZHs z9o2d(VR}PcR^`ax+->U3{kijpMZ^ zZ^tL?exBQ=A{25MEr^ld%`tOQarUyC2us_qkYXKAz!7C(Lq~aAI&G`FQwV+hw z#HkO}HvX=dM5uUV-lhouci~<0Ed*s7ZP|a+UatO%Fbll$cKq!dlIwgp<>i&5IXvYU zz9K|3rpA3{bfaS6w_K|-@$ZD|afe3UU;fH)f!pT~^8vi`^7w~lLy{`c082#7m2*G# z{V=U?zekb>jG2H&keP)=l;^NYL`*XCM`pEcW(1ZZ1(kp(AVtuCSyE8MBOi!!+GGp| zN!N~B!)#9I8GbZnQk2Xr+%huY#I3Ut2OlH_q9F4ipl||%j1K5SLgQzxq@ix#{^VjyAkiLb3jd#>>aFL^ zg21dPCd0k9HQJ~7nhmPBxS1UQ2AgCYWFhj86};?w$sKYlDpU}jJ2_qkFRS7Tg7*vP zAZnRU-0aCibtsmt@rMiH2C#L>{k)2QZ#`%9alhnTXpt8%6_lC}VrmP!yVp&eN9uNX z9tu5!Ra)WS%|#4zRmd+We&!V;MIr}M-1gtxGXBE$Z$w^^0jS3k|O>jmCRCJe<)bSPQb?Z0(28mNx8ioXgGXKsdr(r^eMNxc>e`n^(# zd3vDISqX<_WM=ae&otus86rC#J%f_eF&a4D7igp{K|-U^vd&Z zFb2;u5tLunCK|IA{@pn~8{oi!k7RIM2?awN%oa?~7ucUB$6Osa(3hzMO~4B6*a3=v zH&=5F*eg97|5tn89Te5p<*Nvi6jVem8OcFFQA9Edf@F}KQIcfIN@~CykRUlrPECfE z&;&tpkko`GU1>mQk=RIP_Gy&+-Kjh8%~ZYjX8w3oNm)gQbN1PLueE+*Z68A@%ZFY; zG7L^ZLwTAgJvsWSIj|zd5KFeAzZa>wI6(H%9z3TH&xZTYUQ9qUPM z{P*ZMjvj$$^_w?u*oFCZxEmE-zIe>@I~d#_V!L`(8DMD@+djMMnNZ~}2J zA7TCjk=DPblN4^LIhj_ETmy(Hm{e*sG13QjREz8e$+EP*01@8Hs}SKZosZOp7=goR zP~Qw~+dquspjC;ViZ?(zf0V7H8U#xnzKkC9!5aPOW=r>bDo$MkQ!xv7WAR9zMT?C6qXF_bj;RQnExM4`Y>HmX^Il^PmCjWrPe8!!v zW{Qn9_=@w+$j@)ew|vR7je2^R{DB=cUje|(9!wzyX@861heD`-)i!xnN}Y3cT^sGn z48yO|hgJ2vTMBkTI(fP`5`#cwkVznwlW?WCS{VqIlb_*rJg0%t!Akb1C$Q%K$dlu4ptsR(Lza~7D zkH2?Wfy+J{#(dtt`KX~;=na9G&SKvo z5R-wm$f^Tm0%&#~p4+f<=gt9C&K5+Td-zyuawNd6PWt@$c6eMAZ^WN$O^r1XzctIn z)4hFttn>4<;jyA)`2+g{KibK71O>64W?uC3Mp{Jw84X*QF|)YW58|uZSs93x- z(re}8OwXG0qRzN|S$VT|by)^0}_oNOdRwVywMHqB*_jRDe zU*GW$9DdGxs|%p}aGD8u+Ge2Qz-9*0Cz?a2pAvV6Lnr+Nex%7R{MkAo=|ixnfwiN@ z6I6m=5wG-V4M4)imq9Yk%YXJUTwBtG=Q%=^uS^XIfLlzxUwcFR?i21%K#0EQQZG*O zi0@xC*jUVqazs}ssj7M)c1EBozv(sLr1IAZanRL0zwCL(h8vEeyMFFEOq2mM z+>7q9BD7@`v)5z2EOJD$@z-J%2x!CL`i-|&)gqq(1D;lvTCXrfMC|S?dd)neG3~Xb zCPb7~DBb>Cz&#Yv4{Zk@K>kl3M^y=JN@!9bHE#R!1%J`Rt*G=#`3+zcQ>GBbq&T4~ zt-D^VzE9p)3c*wuHY^hJMJw7X+an(1uliKRF_DPV8B%jlGW=Y_d~EoYSdos-$E{4P z&nbsNf9myI2|LY(BC$i|^=&A*_)fiW*iL0C-~`1No7fvJK?#q(uJ|Qs&S*X!{3>11 z^Q0Bpt>nOYkD&8O0>qfVBt4GxFYZ*CWUHO+PGp2wI$W_XEqQ1_%j7d)(cPqZSZN$C$trUB;Of4S9Qm0)9v$~!GwZ75wY9gW-vkxpaeC6r za`)4^(|Jgm@?@;7F9bT)crxMM#RXJ_sqf_<5^{tHfPKPQ|^YNy+l>wsgJ(HD#&K2hhbqdNg zvXVFWJu>Nw)2+)}o#(BfgpsEJT1y}pohdj5OOA8>JK}t~-J9qVm@!W|HQMq*WS_7` zTM#`uAA_&z&g>9S_0KBboFxr6-xG=HsMw}18CmN#PYNo*N2OGDkTr8WPy^=CJ(?TV z7{~C07}UXuoySd2%VaakR@iJE^5*BlEb)~z5Nm@+jXk>nUTr8tRNhPCus6m-O54Z% zfe5isS(By^0$gW?*jc8Kw{($Qj&R4m;Q{uM5fkP?ZBtW$5g;9inmC&+B7D7VB9|BN zK1RSWm;v+%AYj*tp(?J~Prj6?LLyB(7kQ(1cdvwpn!mI3S&#@1i~W!cGt|_~389UR z=WD$C!eA!KXvVeC^jJ7GVBwKq>s_plImrrYSn_Q1jamA_=s{FGGU@Tgj`cmKTIl5N#!o=|Fb=~o zXJ2%Xl82C|54M}Uf#vt0ML(L<-AlvFFtPwk)GGKG9pWyty6FqHPEKLfux+=rQ|G`Y z5iky_;>C$Z=qS`w&gDO0Qc*yu9V>lsMw2ZIuxiBwC|=tVdG}=RZG+gWK2a3yPKPyl`-!sk>qW#Jt4%ykLD<7lB-;3 z@4%$LR|^dfzbjd_vrX?TWQWcZ5)aIKUF(D7zxumnAl2dPZOjMp#S4p}$s zcQ=4`q83P8Q_x|18EgQ&pw!EKb4O9FcXHw6RcE7?F7vP`<{vAd_8DZWSePx<@l)|3 z`N_Zl30c62vHj=nBVS|#oNJxuvWr@rN(|QLTtjyVy=4p6X+I_^#pg($p9_sy>Vn~J z7ZQ11p?vj(7gG>c&2R5Z&gsr*7JhVi@F0{@di%!1*4V7%%(>az(_lbfpX%w1xMlx3 z&`|yz15XR1Pgza%y5zk5HC>_#Xafp>4hK#g+bLr_9#3MtUh2ZgU#V|7GObhcy*Kxr zU}%Ygj-LoE7a)qbK7S`JFn|hhqwwu)O+!XZ?lG@}ZOv#5h1e_ad4j;j zl&fw8AV8*=5vVACqoIifWt%SHKsFq#2KGx?m+1* z9s;bmpuevl`Mu1E6YI+sOXk1Vf5G9j%%QsK)Gt_&aP9MeN!=lVrzi0it2{~FjqAPl z3Hs)?MM;-ip25Sm)fQsQ#FrMX zB*unaWTX5e$80gr$&TFgo!BZ#<@7tFnMy#caTgyIELM+MDtz0f_(O z{VkdqHG6hle$b7jEFvNV?g$X2Pj$#z| zeBBNMRAbY0PIL>C8EZy{mG}A@P#S%ctp!G1WjEzFfNHO6%dU|Sol7Xid3yYq>6jeC z=DscM5tEIoMX1#JF7T{wh%dD(3nEj0s>TW#6chzvGiR;0zL)k`ZLiO-=9x{V{q*?x zg3fB98lg0_)Tb;Eu1LkzUbwWCxLfB8laem*I!VQg+QqlKpYqHOZtG?x^Z{EQKc7_dcybAq(z#6P>8!&g>E+S#wsub0-u8-pYf0VvkzDw`%>^?}ZVodAK{m&yGzjmt!%r z@wJ@v*Bu4|7j3f=dFwVu##1vHvr7c3mL){zm9vZ*CON{r>W^0?Tdk;A#&Sb2J8HnWziP7Kz7Q7&E;` zlq9T+)LDkh$FHrmyo^(G38em(7XlOQ&mFqblE^-}*Nw>cPF|X1*i14t&PU{VR~ZY4 z?yU=U6zlH0^%$_P<(nJxm)dki#G;HwwTo)}S|}dxSHc#mD$2`WmDJ!W#641&xFeup zGOq)%;p2HQ_oE1S>-T18wmm3A>zsBHp%N*g|5liO4$HzDG>5bqJ+PQj$b8l~~&NNgVt~m%= z9~oE@d2l5>%7r8|6NoQ{dUK{gFtXY)LEK zS>3=zV&?pa#t;cz!~C;TcP=2%{AOafQ#^u&p`f2A->{Tix5Tu&2__@jgd>-6-)dx) z+I3asA)e;|r`$F#qU z7@84kk#BGJY%4ICDRCO7Ngd5~B2!jn%v3Oy-p6Rg3VFOvV*2oUZ$urIJ~wglfKmpi zOElS}6f2-iZW7E+s@)XV$0H!$3}nW;3Zr7LW?@CM z?C5SfceLx|;TXoV4l3npab4oU@vQ^v&(x*%RC+)j-txxd%94PeIxJd$&0&yXRDsFl zeit06?wnUpfSRmB&gr@434e;W==yVUX>}XxydbfU^*eTqzFkr7rnam=<>sx&xEWa6 z@}G@6mr{X>05tNzP}bEctmcc>HYne_7r6TaQFrdZcWMTtLr5JR@20KVy1l|NTgiro zx=Z>GBTSKVh=a5f_6MFgxV-wE@H8zW*eb&hc-c{?R(Y5TjIU~4#6QaD6h&P`K- zXOmJ2N>MU-z>Rc{q-dI>S%Yf-4M*RyoMZe?X9 zYLm1V?Swtp>Hg^cBZg!p?n6iYJg2@#;pkcgzDNyx?q^-JR9 z4gkQR|b}pAG3PN8qtBB%yu&4TH^y$6a#53+9}zlaw}kT z)3fpe7Zc~Iyx}r>l2#uY;!4q?**NBbEe;wxA2W)?p0szGxVL3pxeP!EUj!7vaO6%j z>f#v$0sq9w9LI4E1I4W;6VI&+6(k&M=SnEH+wOlO%u1g3Nibm70YPAa^z31o3!S>C zq^<#G#y8ew`I#O|rDg)`W5N&8)G5jrFFFj56v>Z{$};<%{&1%R4=SDt1IFAl4Q__u z9Y!e?vrcj{gVtxRDSNI0*@%kFO5voHMuGc)CLM&^8QuHT2E=vXhi1D)`_Z{J0)5|9v*X2Z(f z=Zm;ho@3pAc2^@Oe}jFh#Po%@Me`-(4&ds;h!hxmwRA0ZN`NF&+*xoCje_r}jOGvh zC^=Ot6OSu-tBZ~70K@$SQf^PmV?egT4L-DnG&1$+_!v7aEiKA;P7Y)r5XwT+_i6}^ zW{Hh$#PL1CVkIv!$^ueLh9!>RRG6Gryc-0vTw&KR(#o?3%;k%VL+!~!Fo#y+a6mzw zc?li!8<8S<8Y+eC395f;f8*5w-PfqpLBGm{90}e+!`+sR$7g6E_=y{2&+@bhc-W>G zs?u0-I9!#OGU)J@1l!MG%FEoy0XR!bwgpr}1?r!lvL!7Z=EG~;fnFDoIGyoc52qa5 ztb4*OLX23nIMq?;3MVw@Qf;Y<6li@WlN2Il$R{j3R?d9v9w5H&D}lTsv+7AZG&Oo@ zTDur|`m=f>FqjBa^@+Z|OJ=?+mBPaJoC~*xLGut200RLF_=1}gbo=sz;PgPtzNR)I z?@oP}N@IEW06m7cy~A?nonznFn8SBAXaY7tXF~iInm^ZP5x0NZnINn%^mVOADlBf) zPu7@C4eIm%Q~*fiWf81U$v8!FoVv5(2Tb%tAe^l#L7vr|56ofnydUXTe$C;4fKsR! z8$T!mox7lN5-hn$u;k!X@0$;2Ik=y0;Ir`XJm~lS^$MAKU4nw3PpO}O7`PI?QM+km5pgBEsVf|oP<8M%=9tCRniXWzjehz3s-%tj0g2A4u{SlpD z1l30>4Kp;D5Yl8O)IXI-LM!$iH)Q9|4kx z>VE(vA$O0Y(ACl=EKbS5;FUq!8Lf3V>9c=FVKbG=|E-4p3z7t0og>>b1~Xe8ugZq^ zU`@FPZmoq35Q27255W{4Z*PLvZ-2RWz0jsJRQr9q11C zp)B&wWLP?~_NsFdD>Z)uXgL6#Ngh1d;4A?^Gdx;L?sZn#EKsfq3vAkooeLh{U&Y{3lAL`qN zV@mZ0pDuHrFfKkmBRySv6pgM*P<7PW(PqLM4pATuSRA5(EN3_ZO{$gB;c)whc@;T+ z_;gAFN~dH6H5I@v3L4>$2Tusu(Gxv_lvyW$ct<=X;XHH+O$eE}UL$$O>1yd5Ndh%+ z3b4oh!hUP;rWE49cfDv&`+Y}oH%Fg`_d)*A1oiO$zHwR@qRdixLt|ndNK!cDr`x0} z-?|mFpY2hux@ZAqS6^=e!0q?91513ffuMbi#N*fO92xFDnJAR?NQGlwM3k$A0YV09 zC=&x6yBAxK!g@HM=Pz6UBI{a_upGMdboP#?q*U%!oC z#q0@cfS%&Fjp}^NHCsEDqAt)wtU~~KM@?eoktD}W9oepGKhRZYCQKpvj;boWJ1=N_ z5si>5j!J+u<0K|P4)_J$3Pt*1B^F6GS%B_5b?T4lO`9pGu4UWWLh(JSHh_?L=Dp3i zyQZceeij(+)eiVbjAJaRz&?7p?5_Y@&i#)8_7B65w)dH>%lQr_ubh3SuLCodwJtZe zuO2{xvxHY@SiZ~Y-Xo&DcD$MA-IT&^-nOEJ*A+}m)H+O0|PpMU}0%3la`9CxU z34;e*e}$kxE}FrwbEOIidj3Wk`)_@|Sibk?3+CvofOwfIm_kqyF`%tjmekwcS1ps;!2xh_RP2OV<=rul531@rz{wFf-FNls zXS6&pq?ElJiu=?%Hr#qZvQG5bpYY@zFy@Ck{XYx?BO>kzv2uAm;AhSvXGy?RKgq2Rw1bZ> z+)aj24sJys9E8-?7R7}t&>6OTVz4uPcVtPQj%X#;Zv@^95=wCaV~#u+}bAO zr4spb%ARu}xaMXQ3YDD@@*e+Ecj(AaB)JjT_XBTI-%(MCctV+ElaN+{;s=P-wF+E> z{>SATpmD4PrUzE32lTx@?aiLhvvL6`&^xRv9q5o+%o3Uu#R;ohGEL(xFE1~dilKVz zD9O<+g*_#@^7PqiGrjZKv5luq;C&C%LFi{YP8$#=zmR;6+eI~l>n1k>kKPr^)gg4!4CVxuR~d0 z@442_)=*`ES`ApYj8vG;kOQcy$XXOLcoyBNsjfI> z_9fU)deMbewyLfc`5m(5Qs)hRC|EJ(K+Q@v-m%+5L*fgL2T7dF__`p9m~IYUDv^BD zCwsO1Kr>WsbHo}mi&X|~>9ghfX$k!^`0?8H93o>}_C3Q<wIwR;|* z3MtI`!mgb-o<%NqZp@P@M<=b4w;m@rx!(-~tz%&e>KmKm$x{_Ax3-7FA|lv<>i@2u z-jITtXAAz&kPR}Al6cVE?cDd1_#;b>3v>J_%?wMuC{Vr5D*Et8LTC{BL2HiaN5YEU z&{+nMc@}~xyfW%G0A%MUb?T+>?zD})nNlN+wIq zYG3I#RnKC|4=`HC2v`Xb#zde-dK9R@>~m{UW}_G|?76Axs=@bDdEU7|X|7gF~OOxCOtqHbqx(7DET9w3T&q zJXm05x?m0E&uuaZIMJ+ihoH@c?R2d_$W|N7}cQaC8N z1A+@1h&^?l3B;9(5b$z7NtB`3%$5~qo z4ctw+W~LtqJgK>d1_l&w{Fb15QtT;Le66 zR=BbH=l9;N%@a^CRsfYbgYY}B-q9p-SmElu<63V1=+RL*qL4S;Qd&&D-!w;nV-tgU z8;W*DDiVj2zQ(a)<8r<1XTqx2O zod+9a_2hvfanu?`Lf)ji=U8#e9c8yt2+Rh~j@L?gRu21rZ0$S=(GSF4puO%8%RROtlmj|sQke0v4r&oaTkX*=S!>kJ?vqtL5z(?C49qLmc0HrTrXn{7z zC)~@R!*c5!w)RWIbOUiuf5W0n3lqN+-^bl9$vTm4-&IAfR>;o^?4<&L$igD>a;9|o z%gdb-r5n9aa{i z&arC5?Jj!%da}25d+@@JIAME_<%J$t9Cdv`MFn!RFHgv-oxKv1O1{2NMZ?7Wpz*wY z`p>)}<9X?)5WEgJQbNSuS5}Z5vRuAQ5F8xr&3^6570rX!X2`pU&)b7YSWfQ7c&m<< zQC=2J_974q1lp49`z{!bzpb!1DBSh>K98_xjLW6ExF2Sb zh{(+346T-SzT?wDmi{FAlKtzabec($_E8gK!vpDcI$w~EI~2$Q`8Yf*^bmyb#>i=? zy#x!vap4f%E_KPxloM86qm*#^kJgG?0+a8lym@uIG$q$VpWw;@rn3IX7A;UnTSSuE2I1 znZMP$0J9HH_wB@xz@pz=agbJdb|n(1D8k+d-00!0Q=N>MmEJ~LbiWId5Zw{tsuCdh^>ge#A zpDK~&QdChnBg~9iEFj-10?GTH<&)W2PPQ2BekwY8zq(n<$|8SD?GW<#8~1{Yy%q;o zTP>93h=%Mmahhpm3!EP{XmIO9gPzo9hz0Gu<>z`QruJ59O@TN6JLf4(4>`bGtBz}} zxt8ITLA*u5?jKHRo%yYkrITyOaFJVe}QK4s!1s^_6Cy+vM+A(-- zbv2)hFx|7-nMEYm9G;r$%kn1u5Up5|lB&4CVr{Rx}VEv2YU7!D+~Wq6)&bWLbJ?yV4`^0T2I6 z4fGfFxFy&x58egRUyuo21S^hW{z2R;Ag-yI_`)n}X(;M3=9iT@3Zg0Dl9$GP=|Vfb%MABAuV)hJO9Drr^zG_`u* zAiU@AAM+P(p!mZ{DtHoo<51x6>morG58fL* zU7_Xid(e*^j|Z}y(R^83ieGoeGGz(yMXsMxjz`8S2ha=9zLX+E^yt?963+bkprTlC zYh7Xyv%hX0=&2#B)^({L+7%9;uQhmp*RdLLKv;J8K{tR-5Y>iMM<1a@|8OyZ2b9a5 WBOTsvWVerjAH~~has{`{gZ>Tqg+o>V literal 0 HcmV?d00001 diff --git a/playbooks/Dynamic_Related_Tickets_Search.py b/playbooks/Dynamic_Related_Tickets_Search.py new file mode 100644 index 0000000000..5a05c4d180 --- /dev/null +++ b/playbooks/Dynamic_Related_Tickets_Search.py @@ -0,0 +1,278 @@ +""" +Detects available indicators and routes them to dynamic related ticket search playbooks. The output of the analysis will update any artifacts, tasks, and indicator tags. +""" + + +import phantom.rules as phantom +import json +from datetime import datetime, timedelta + + +@phantom.playbook_block() +def on_start(container): + phantom.debug('on_start() called') + + # call 'artifact_decision' block + artifact_decision(container=container) + + return + +@phantom.playbook_block() +def filter_new_artifacts(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("filter_new_artifacts() called") + + ################################################################################ + # Only dispatch rplaybooks against new artifacts. + ################################################################################ + + # collect filtered artifact ids and results for 'if' condition 1 + matched_artifacts_1, matched_results_1 = phantom.condition( + container=container, + conditions=[ + ["artifact:*.id", "!=", None] + ], + name="filter_new_artifacts:condition_1") + + # call connected blocks if filtered artifacts or results + if matched_artifacts_1 or matched_results_1: + dispatch_ticketing_playbooks(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + + return + + +@phantom.playbook_block() +def add_comment_2(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("add_comment_2() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.comment(container=container, comment="No new artifact data found in event.") + + return + + +@phantom.playbook_block() +def dispatch_ticketing_playbooks(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("dispatch_ticketing_playbooks() called") + + filtered_artifact_0_data_filter_new_artifacts = phantom.collect2(container=container, datapath=["filtered-data:filter_new_artifacts:condition_1:artifact:*.id"]) + + filtered_artifact_0__id = [item[0] for item in filtered_artifact_0_data_filter_new_artifacts] + + inputs = { + "playbook_tags": ["ticket"], + "playbook_repo": [], + "indicator_tags_include": [], + "indicator_tags_exclude": [], + "artifact_ids_include": filtered_artifact_0__id, + } + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + # call playbook "community/dispatch_input_playbooks", returns the playbook_run_id + playbook_run_id = phantom.playbook("community/dispatch_input_playbooks", container=container, name="dispatch_ticketing_playbooks", callback=outputs_decision, inputs=inputs) + + return + + +@phantom.playbook_block() +def artifact_decision(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("artifact_decision() called") + + ################################################################################ + # Determine if artifacts exist to run through the playbook. + ################################################################################ + + # check for 'if' condition 1 + found_match_1 = phantom.decision( + container=container, + conditions=[ + ["artifact:*.id", "!=", None] + ]) + + # call connected blocks if condition 1 matched + if found_match_1: + filter_new_artifacts(action=action, success=success, container=container, results=results, handle=handle) + return + + # check for 'else' condition 2 + add_comment_2(action=action, success=success, container=container, results=results, handle=handle) + + return + + +@phantom.playbook_block() +def outputs_decision(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("outputs_decision() called") + + ################################################################################ + # Determine if outputs exist. + ################################################################################ + + # check for 'if' condition 1 + found_match_1 = phantom.decision( + container=container, + conditions=[ + ["dispatch_ticketing_playbooks:playbook_output:observable", "!=", None] + ]) + + # call connected blocks if condition 1 matched + if found_match_1: + dispatch_filter_1(action=action, success=success, container=container, results=results, handle=handle) + return + + # check for 'else' condition 2 + add_comment_3(action=action, success=success, container=container, results=results, handle=handle) + + return + + +@phantom.playbook_block() +def add_comment_3(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("add_comment_3() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.comment(container=container, comment="No observable data found from dispatched playbooks.") + + return + + +@phantom.playbook_block() +def merge_reports(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("merge_reports() called") + + ################################################################################ + # Format a note that merges together normalized data. The data will come from + # the playbooks launched by the Dispatch Ticketing Playbooks block. + ################################################################################ + + template = """SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Matched Fields | Source | Source Link |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} | {9} | {10} |\n%%\n""" + + # parameter list for template variable replacement + parameters = [ + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.name", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.number", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.message", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.start_time", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.end_time", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.assignee", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.creator_name", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.ticket.state", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.matched_fields", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source", + "filtered-data:dispatch_filter_1:condition_1:dispatch_ticketing_playbooks:playbook_output:observable.source_link" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="merge_reports") + + ticketing_update(container=container) + + return + + +@phantom.playbook_block() +def ticketing_update(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("ticketing_update() called") + + id_value = container.get("id", None) + merge_reports = phantom.get_format_data(name="merge_reports") + + parameters = [] + + parameters.append({ + "owner": None, + "status": "complete", + "container": id_value, + "task_name": "playbook", + "note_title": "Dynamic Related Ticket Search Report", + "note_content": merge_reports, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.custom_function(custom_function="community/workbook_task_update", parameters=parameters, name="ticketing_update") + + return + + +@phantom.playbook_block() +def dispatch_filter_1(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("dispatch_filter_1() called") + + ################################################################################ + # Create a dataset with the output of the dispatch playbooks that is not None + ################################################################################ + + # collect filtered artifact ids and results for 'if' condition 1 + matched_artifacts_1, matched_results_1 = phantom.condition( + container=container, + conditions=[ + ["dispatch_ticketing_playbooks:playbook_output:observable", "!=", None] + ], + name="dispatch_filter_1:condition_1") + + # call connected blocks if filtered artifacts or results + if matched_artifacts_1 or matched_results_1: + merge_reports(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + return \ No newline at end of file diff --git a/playbooks/ServiceNow_Related_Tickets_Search.json b/playbooks/ServiceNow_Related_Tickets_Search.json new file mode 100644 index 0000000000..f4a1d3fe22 --- /dev/null +++ b/playbooks/ServiceNow_Related_Tickets_Search.json @@ -0,0 +1,576 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Dynamic Related Ticket Search", + "coa": { + "data": { + "description": "Accepts a user or device and identifies if related tickets exists in a timeframe of last 30 days. Generates a global report and list of observables.", + "edges": [ + { + "id": "port_6_to_port_8", + "sourceNode": "6", + "sourcePort": "6_out", + "targetNode": "8", + "targetPort": "8_in" + }, + { + "id": "port_0_to_port_6", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "6", + "targetPort": "6_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_10_to_port_9", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "9", + "targetPort": "9_in" + }, + { + "id": "port_8_to_port_17", + "sourceNode": "8", + "sourcePort": "8_out", + "targetNode": "17", + "targetPort": "17_in" + }, + { + "id": "port_17_to_port_10", + "sourceNode": "17", + "sourcePort": "17_out", + "targetNode": "10", + "targetPort": "10_in" + }, + { + "id": "port_9_to_port_19", + "sourceNode": "9", + "sourcePort": "9_out", + "targetNode": "19", + "targetPort": "19_in" + }, + { + "id": "port_19_to_port_14", + "sourceNode": "19", + "sourcePort": "19_out", + "targetNode": "14", + "targetPort": "14_in" + }, + { + "id": "port_14_to_port_16", + "sourceNode": "14", + "sourcePort": "14_out", + "targetNode": "16", + "targetPort": "16_in" + }, + { + "id": "port_16_to_port_25", + "sourceNode": "16", + "sourcePort": "16_out", + "targetNode": "25", + "targetPort": "25_in" + }, + { + "id": "port_25_to_port_1", + "sourceNode": "25", + "sourcePort": "25_out", + "targetNode": "1", + "targetPort": "1_in" + } + ], + "hash": "fe6211a724ba368888388b13703be77329f2b9b2", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 20, + "y": 0 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 20, + "y": 1708 + }, + "10": { + "data": { + "advanced": { + "customName": "input filter", + "customNameId": 0, + "description": "Creates a dataset without None values.", + "join": [], + "note": "Creates a dataset without None values." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:search_term", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "search term exists", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "input_filter", + "id": "10", + "type": "filter" + }, + "errors": {}, + "id": "10", + "type": "filter", + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, + "x": 60, + "y": 622 + }, + "14": { + "data": { + "advanced": { + "customName": "process results", + "customNameId": 0, + "description": "Iterates through the results of the run ticket query to link playbook input search term to their associated tickets.", + "join": [], + "note": "Iterates through the results of the run ticket query to link playbook input search term to their associated tickets." + }, + "functionId": 3, + "functionName": "process_results", + "id": "14", + "inputParameters": [ + "filtered-data:input_filter:condition_1:playbook_input:search_term", + "run_ticket_query:action_result.data", + "run_ticket_query:action_result.parameter.query_table" + ], + "outputVariables": [ + "output" + ], + "type": "code" + }, + "errors": {}, + "id": "14", + "type": "code", + "userCode": " process_results__output = {}\n for search_term in filtered_input_0_search_term_values:\n process_results__output[search_term] = []\n for result, query_table in zip(run_ticket_query_result_item_0, run_ticket_query_parameter_query_table):\n if not isinstance(result, list):\n list_result = [result]\n else:\n list_result = result\n for result_item in list_result:\n result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)]\n match = False\n for string_value in result_item_values:\n if search_term.lower() in string_value:\n match = True\n break\n if match:\n process_results__output[search_term].append({**result_item, **{\"ticket_type\": query_table}})\n\n", + "warnings": {}, + "x": 0, + "y": 1158 + }, + "16": { + "customCode": null, + "data": { + "advanced": { + "customName": "build output", + "customNameId": 0, + "description": "Extract relevant data and add them to an observable array.", + "join": [], + "note": "Extract relevant data and add them to an observable array." + }, + "functionId": 5, + "functionName": "build_output", + "id": "16", + "inputParameters": [ + "process_results:custom_function:output" + ], + "outputVariables": [ + "observable_array", + "name", + "number", + "message", + "start_time", + "end_time", + "assignee", + "creator_name", + "state", + "matched_fields", + "source_link", + "source" + ], + "type": "code" + }, + "errors": {}, + "id": "16", + "type": "code", + "userCode": " import re \n \n build_output__observable_array = []\n build_output__name = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__matched_fields = []\n build_output__source_link = []\n build_output__source = []\n \n def generate_ticket_link(sample_url, ticket_type, sys_id):\n extract_host = re.search(r\"https*:\\/\\/[^\\/]+\", sample_url).group(0)\n extract_host += f\"/nav_to.do?uri={ticket_type}.do?sys_id={sys_id}\"\n return extract_host\n \n for key in process_results__output.keys():\n \n for value in process_results__output[key]:\n assigned_to = None\n caller_id = None\n matched_fields = []\n if value.get(\"assigned_to\"):\n assigned_to = value[\"assigned_to\"][\"display_value\"]\n if value.get(\"caller_id\"):\n caller_id = value[\"caller_id\"][\"display_value\"]\n \n for k, v in value.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n # search for any link sample:\n if isinstance(v, dict):\n sample_link = v.get('link')\n \n source_link = generate_ticket_link(sample_link, value['ticket_type'], value['sys_id'])\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": value[\"short_description\"],\n \"id\": value[\"sys_id\"],\n \"number\": value[\"number\"],\n \"message\": value[\"description\"],\n \"start_time\": value[\"sys_created_on\"],\n \"end_time\": value[\"closed_at\"],\n \"assigned_to\": assigned_to,\n \"creator_name\": caller_id,\n \"state\": value[\"state\"],\n \"notes\": [value[\"work_notes\"]],\n \"comments\": [value[\"comments\"]]\n },\n \"matched_fields\": matched_fields,\n \"source\": \"ServiceNow\",\n \"source_link\": source_link\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(value[\"short_description\"])\n build_output__number.append(value[\"number\"])\n build_output__message.append(json.dumps(value[\"description\"])) # eliminate new line issues\n build_output__start_time.append(value[\"sys_created_on\"])\n build_output__end_time.append(value[\"closed_at\"])\n build_output__assignee.append(assigned_to)\n build_output__creator_name.append(caller_id)\n build_output__state.append(value[\"state\"])\n build_output__matched_fields.append(matched_fields)\n build_output__source.append(\"ServiceNow\")\n build_output__source_link.append(source_link)\n #phantom.debug(observable_object)\n\n", + "warnings": {}, + "x": 0, + "y": 1352 + }, + "17": { + "data": { + "advanced": { + "customName": "calculate earliest time", + "customNameId": 0, + "join": [] + }, + "customFunction": { + "draftMode": false, + "name": "datetime_modify", + "repoName": "community" + }, + "functionId": 2, + "functionName": "calculate_earliest_time", + "id": "17", + "selectMore": false, + "type": "utility", + "utilities": { + "datetime_modify": { + "description": "Change a timestamp by adding or subtracting minutes, hours, or days.", + "fields": [ + { + "dataTypes": [ + "" + ], + "description": "The datetime to modify, which should be provided in a string format determined by input_format_string", + "inputType": "item", + "label": "input_datetime", + "name": "input_datetime", + "placeholder": "2020-06-27T14:53:08.219016Z", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [], + "description": "The format string to use for the input according to the Python's datetime.strptime() formatting rules. If none is provided the default will be '%Y-%m-%dT%H:%M:%S.%fZ'. In addition to strptime() formats, the special format \"epoch\" can be used to accept unix epoch timestamps.", + "inputType": "item", + "label": "input_format_string", + "name": "input_format_string", + "placeholder": "%Y-%m-%dT%H:%M:%S.%fZ", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [ + "" + ], + "description": "Choose a unit to modify the date by, which must be either seconds, minutes, hours, or days. If none is provided the default will be 'minutes'", + "inputType": "item", + "label": "modification_unit", + "name": "modification_unit", + "placeholder": "minutes", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [], + "description": "The number of seconds, minutes, hours, or days to add or subtract. Use a negative number such as -1.5 to subtract time. Defaults to zero.", + "inputType": "item", + "label": "amount_to_modify", + "name": "amount_to_modify", + "placeholder": "0", + "renderType": "datapath", + "required": false + }, + { + "dataTypes": [], + "description": "The format string to use for the output according to the Python's datetime.strftime() formatting rules. If none is provided the default will be '%Y-%m-%dT%H:%M:%S.%fZ'.", + "inputType": "item", + "label": "output_format_string", + "name": "output_format_string", + "placeholder": "%Y-%m-%dT%H:%M:%S.%fZ", + "renderType": "datapath", + "required": false + } + ], + "label": "datetime_modify", + "name": "datetime_modify" + } + }, + "utilityType": "custom_function", + "values": { + "datetime_modify": { + "amount_to_modify": "-30", + "input_datetime": "container:create_time", + "input_format_string": "%Y-%m-%d %H:%M:%S.%f+00", + "modification_unit": "days", + "output_format_string": "'%Y-%m-%d','%H:%M:%S'" + } + } + }, + "errors": {}, + "id": "17", + "type": "utility", + "warnings": {}, + "x": 0, + "y": 474 + }, + "19": { + "data": { + "action": "run query", + "actionType": "investigate", + "advanced": { + "customName": "run ticket query", + "customNameId": 0, + "description": "Perform a text search match within ServiceNow.", + "join": [], + "note": "Perform a text search match within ServiceNow." + }, + "connector": "ServiceNow", + "connectorConfigs": [ + "servicenow" + ], + "connectorId": "a590c3bc-ca41-4a0e-b063-8066ca868794", + "connectorVersion": "v1", + "functionId": 3, + "functionName": "run_ticket_query", + "id": "19", + "parameters": { + "max_results": "100", + "query": { + "functionId": 3, + "parameters": [ + "space_delimiter_input:formatted_data", + "calculate_earliest_time:custom_function_result.data.datetime_string" + ], + "template": "sysparm_query=active=true^IR_OR_QUERY={0}^opened_at>javascript:gs.dateGenerate({1})&sysparm_display_value=true \n\n" + }, + "query_table": "convert_table_list:custom_function_result.data.output" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "query" + }, + { + "data_type": "numeric", + "default": 100, + "field": "max_results" + }, + { + "data_type": "string", + "field": "query_table" + } + ], + "type": "action" + }, + "errors": {}, + "id": "19", + "type": "action", + "warnings": {}, + "x": 0, + "y": 980 + }, + "25": { + "data": { + "advanced": { + "customName": "format report", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 3, + "functionName": "format_report", + "id": "25", + "parameters": [ + "build_output:custom_function:name", + "build_output:custom_function:number", + "build_output:custom_function:message", + "build_output:custom_function:start_time", + "build_output:custom_function:end_time", + "build_output:custom_function:assignee", + "build_output:custom_function:creator_name", + "build_output:custom_function:state", + "build_output:custom_function:matched_fields", + "build_output:custom_function:source", + "build_output:custom_function:source_link" + ], + "template": "SOAR retrieved tickets from Service Now. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Matched Fields | Source | Source Link |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} | {9} | {10} |\n%%\n", + "type": "format" + }, + "errors": {}, + "id": "25", + "type": "format", + "warnings": {}, + "x": 0, + "y": 1530 + }, + "6": { + "data": { + "advanced": { + "customName": "default table list", + "customNameId": 0, + "description": "Adjust the table list variable to change which tables should be searched.", + "join": [], + "note": "Adjust the table list variable to change which tables should be searched." + }, + "functionId": 2, + "functionName": "default_table_list", + "id": "6", + "inputParameters": [], + "outputVariables": [ + "output" + ], + "type": "code" + }, + "errors": {}, + "id": "6", + "type": "code", + "userCode": " \n # Default tables list to find related tickets. Adjust as needed.\n default_table_list = [\n 'incident', \n 'change_request', \n 'change_task', \n 'problem',\n 'sc_request', \n 'sc_task', \n 'sc_req_item',\n ]\n default_table_list__output = default_table_list\n \n", + "warnings": {}, + "x": 0, + "y": 148 + }, + "8": { + "data": { + "advanced": { + "customName": "convert table list", + "customNameId": 0, + "join": [], + "refreshNotableData": false + }, + "customFunction": { + "draftMode": false, + "name": "list_demux", + "repoName": "community" + }, + "functionId": 1, + "functionName": "convert_table_list", + "id": "8", + "selectMore": false, + "type": "utility", + "utilities": { + "list_demux": { + "description": "Accepts a single list and converts it into multiple custom function output results. All output will be placed in the \"output\" datapath. Sub-items and sub-item variable names are dependent on the input.", + "fields": [ + { + "dataTypes": [ + "*" + ], + "description": "A list of objects. Nested lists are not unpacked.", + "inputType": "item", + "label": "input_list", + "name": "input_list", + "placeholder": "[\"list_item_1\", \"list_item_2\", \"list_item_3\"]", + "renderType": "datapath", + "required": false + } + ], + "label": "list_demux", + "name": "list_demux" + } + }, + "utilityType": "custom_function", + "values": { + "list_demux": { + "input_list": "default_table_list:custom_function:output" + } + } + }, + "errors": {}, + "id": "8", + "type": "utility", + "userCode": "\n", + "warnings": {}, + "x": 0, + "y": 326 + }, + "9": { + "data": { + "advanced": { + "customName": "space delimiter input", + "customNameId": 0, + "description": "Convert playbook input into space delimiter string for ServiceNow query.", + "drop_none": true, + "join": [], + "note": "Convert playbook input into space delimiter string for ServiceNow query.", + "separator": " " + }, + "functionId": 1, + "functionName": "space_delimiter_input", + "id": "9", + "parameters": [ + "filtered-data:input_filter:condition_1:playbook_input:search_term" + ], + "template": "{0}\n", + "type": "format" + }, + "errors": {}, + "id": "9", + "type": "format", + "warnings": {}, + "x": 0, + "y": 802 + } + }, + "notes": "Inputs: user, device\nInteractions: ServiceNow\nActions: run query\nOutputs: report, observables" + }, + "input_spec": [ + { + "contains": [ + "user name", + "host name" + ], + "description": "Find tickets in ServiceNow that have mentioned this search term..", + "name": "search_term" + } + ], + "output_spec": [ + { + "contains": [], + "datapaths": [ + "build_output:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type, score, score_id, and categories.", + "metadata": {}, + "name": "observable" + }, + { + "contains": [], + "datapaths": [ + "format_report:formatted_data" + ], + "deduplicate": false, + "description": "An array of reports. One report per reputation category.", + "metadata": {}, + "name": "markdown_report" + } + ], + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.9", + "version": "6.0.0.114895" + }, + "create_time": "2023-02-27T21:35:55.428347+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "user", + "device", + "ServiceNow", + "ticket" + ] +} \ No newline at end of file diff --git a/playbooks/ServiceNow_Related_Tickets_Search.png b/playbooks/ServiceNow_Related_Tickets_Search.png new file mode 100644 index 0000000000000000000000000000000000000000..91b44f98802de9246bee1444053af4252082b7f6 GIT binary patch literal 51524 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 MMn$?%()jiN0@h-GTmS$7 literal 0 HcmV?d00001 diff --git a/playbooks/ServiceNow_Related_Tickets_Search.py b/playbooks/ServiceNow_Related_Tickets_Search.py new file mode 100644 index 0000000000..1655ad2098 --- /dev/null +++ b/playbooks/ServiceNow_Related_Tickets_Search.py @@ -0,0 +1,452 @@ +""" +Accepts a user or device and identifies if related tickets exists in a timeframe of last 30 days. Generates a global report and list of observables. +""" + + +import phantom.rules as phantom +import json +from datetime import datetime, timedelta + + +@phantom.playbook_block() +def on_start(container): + phantom.debug('on_start() called') + + # call 'default_table_list' block + default_table_list(container=container) + + return + +@phantom.playbook_block() +def default_table_list(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("default_table_list() called") + + ################################################################################ + # Adjust the table list variable to change which tables should be searched. + ################################################################################ + + default_table_list__output = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Default tables list to find related tickets. Adjust as needed. + default_table_list = [ + 'incident', + 'change_request', + 'change_task', + 'problem', + 'sc_request', + 'sc_task', + 'sc_req_item', + ] + default_table_list__output = default_table_list + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="default_table_list:output", value=json.dumps(default_table_list__output)) + + convert_table_list(container=container) + + return + + +@phantom.playbook_block() +def convert_table_list(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("convert_table_list() called") + + default_table_list__output = json.loads(_ if (_ := phantom.get_run_data(key="default_table_list:output")) != "" else "null") # pylint: disable=used-before-assignment + + parameters = [] + + parameters.append({ + "input_list": default_table_list__output, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.custom_function(custom_function="community/list_demux", parameters=parameters, name="convert_table_list", callback=calculate_earliest_time) + + return + + +@phantom.playbook_block() +def space_delimiter_input(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("space_delimiter_input() called") + + ################################################################################ + # Convert playbook input into space delimiter string for ServiceNow query. + ################################################################################ + + template = """{0}\n""" + + # parameter list for template variable replacement + parameters = [ + "filtered-data:input_filter:condition_1:playbook_input:search_term" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="space_delimiter_input", separator=" ", drop_none=True) + + run_ticket_query(container=container) + + return + + +@phantom.playbook_block() +def input_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("input_filter() called") + + ################################################################################ + # Creates a dataset without None values. + ################################################################################ + + # collect filtered artifact ids and results for 'if' condition 1 + matched_artifacts_1, matched_results_1 = phantom.condition( + container=container, + conditions=[ + ["playbook_input:search_term", "!=", None] + ], + name="input_filter:condition_1") + + # call connected blocks if filtered artifacts or results + if matched_artifacts_1 or matched_results_1: + space_delimiter_input(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + + return + + +@phantom.playbook_block() +def process_results(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("process_results() called") + + ################################################################################ + # Iterates through the results of the run ticket query to link playbook input + # search term to their associated tickets. + ################################################################################ + + filtered_input_0_search_term = phantom.collect2(container=container, datapath=["filtered-data:input_filter:condition_1:playbook_input:search_term"]) + run_ticket_query_result_data = phantom.collect2(container=container, datapath=["run_ticket_query:action_result.data","run_ticket_query:action_result.parameter.query_table"], action_results=results) + + filtered_input_0_search_term_values = [item[0] for item in filtered_input_0_search_term] + run_ticket_query_result_item_0 = [item[0] for item in run_ticket_query_result_data] + run_ticket_query_parameter_query_table = [item[1] for item in run_ticket_query_result_data] + + process_results__output = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + process_results__output = {} + for search_term in filtered_input_0_search_term_values: + process_results__output[search_term] = [] + for result, query_table in zip(run_ticket_query_result_item_0, run_ticket_query_parameter_query_table): + if not isinstance(result, list): + list_result = [result] + else: + list_result = result + for result_item in list_result: + result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)] + match = False + for string_value in result_item_values: + if search_term.lower() in string_value: + match = True + break + if match: + process_results__output[search_term].append({**result_item, **{"ticket_type": query_table}}) + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="process_results:output", value=json.dumps(process_results__output)) + + build_output(container=container) + + return + + +@phantom.playbook_block() +def build_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_output() called") + + ################################################################################ + # Extract relevant data and add them to an observable array. + ################################################################################ + + process_results__output = json.loads(_ if (_ := phantom.get_run_data(key="process_results:output")) != "" else "null") # pylint: disable=used-before-assignment + + build_output__observable_array = None + build_output__name = None + build_output__number = None + build_output__message = None + build_output__start_time = None + build_output__end_time = None + build_output__assignee = None + build_output__creator_name = None + build_output__state = None + build_output__matched_fields = None + build_output__source_link = None + build_output__source = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + import re + + build_output__observable_array = [] + build_output__name = [] + build_output__number = [] + build_output__message = [] + build_output__start_time = [] + build_output__end_time = [] + build_output__assignee = [] + build_output__creator_name = [] + build_output__state = [] + build_output__matched_fields = [] + build_output__source_link = [] + build_output__source = [] + + def generate_ticket_link(sample_url, ticket_type, sys_id): + extract_host = re.search(r"https*:\/\/[^\/]+", sample_url).group(0) + extract_host += f"/nav_to.do?uri={ticket_type}.do?sys_id={sys_id}" + return extract_host + + for key in process_results__output.keys(): + + for value in process_results__output[key]: + assigned_to = None + caller_id = None + matched_fields = [] + if value.get("assigned_to"): + assigned_to = value["assigned_to"]["display_value"] + if value.get("caller_id"): + caller_id = value["caller_id"]["display_value"] + + for k, v in value.items(): + # generate matched fields where the searched entity appears + if isinstance(v, str) and key.lower() in v.lower(): + matched_fields.append(k) + # search for any link sample: + if isinstance(v, dict): + sample_link = v.get('link') + + source_link = generate_ticket_link(sample_link, value['ticket_type'], value['sys_id']) + observable_object = { + "value": key, + "ticket": { + "name": value["short_description"], + "id": value["sys_id"], + "number": value["number"], + "message": value["description"], + "start_time": value["sys_created_on"], + "end_time": value["closed_at"], + "assigned_to": assigned_to, + "creator_name": caller_id, + "state": value["state"], + "notes": [value["work_notes"]], + "comments": [value["comments"]] + }, + "matched_fields": matched_fields, + "source": "ServiceNow", + "source_link": source_link + } + build_output__observable_array.append(observable_object) + build_output__name.append(value["short_description"]) + build_output__number.append(value["number"]) + build_output__message.append(json.dumps(value["description"])) # eliminate new line issues + build_output__start_time.append(value["sys_created_on"]) + build_output__end_time.append(value["closed_at"]) + build_output__assignee.append(assigned_to) + build_output__creator_name.append(caller_id) + build_output__state.append(value["state"]) + build_output__matched_fields.append(matched_fields) + build_output__source.append("ServiceNow") + build_output__source_link.append(source_link) + #phantom.debug(observable_object) + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_output:observable_array", value=json.dumps(build_output__observable_array)) + phantom.save_run_data(key="build_output:name", value=json.dumps(build_output__name)) + phantom.save_run_data(key="build_output:number", value=json.dumps(build_output__number)) + phantom.save_run_data(key="build_output:message", value=json.dumps(build_output__message)) + phantom.save_run_data(key="build_output:start_time", value=json.dumps(build_output__start_time)) + phantom.save_run_data(key="build_output:end_time", value=json.dumps(build_output__end_time)) + phantom.save_run_data(key="build_output:assignee", value=json.dumps(build_output__assignee)) + phantom.save_run_data(key="build_output:creator_name", value=json.dumps(build_output__creator_name)) + phantom.save_run_data(key="build_output:state", value=json.dumps(build_output__state)) + phantom.save_run_data(key="build_output:matched_fields", value=json.dumps(build_output__matched_fields)) + phantom.save_run_data(key="build_output:source_link", value=json.dumps(build_output__source_link)) + phantom.save_run_data(key="build_output:source", value=json.dumps(build_output__source)) + + format_report(container=container) + + return + + +@phantom.playbook_block() +def calculate_earliest_time(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("calculate_earliest_time() called") + + create_time_value = container.get("create_time", None) + + parameters = [] + + parameters.append({ + "input_datetime": create_time_value, + "amount_to_modify": -30, + "modification_unit": "days", + "input_format_string": "%Y-%m-%d %H:%M:%S.%f+00", + "output_format_string": "'%Y-%m-%d','%H:%M:%S'", + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.custom_function(custom_function="community/datetime_modify", parameters=parameters, name="calculate_earliest_time", callback=input_filter) + + return + + +@phantom.playbook_block() +def run_ticket_query(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("run_ticket_query() called") + + # phantom.debug('Action: {0} {1}'.format(action['name'], ('SUCCEEDED' if success else 'FAILED'))) + + query_formatted_string = phantom.format( + container=container, + template="""sysparm_query=active=true^IR_OR_QUERY={0}^opened_at>javascript:gs.dateGenerate({1})&sysparm_display_value=true \n\n""", + parameters=[ + "space_delimiter_input:formatted_data", + "calculate_earliest_time:custom_function_result.data.datetime_string" + ]) + + ################################################################################ + # Perform a text search match within ServiceNow. + ################################################################################ + + calculate_earliest_time__result = phantom.collect2(container=container, datapath=["calculate_earliest_time:custom_function_result.data.datetime_string"]) + convert_table_list__result = phantom.collect2(container=container, datapath=["convert_table_list:custom_function_result.data.output"]) + space_delimiter_input = phantom.get_format_data(name="space_delimiter_input") + + parameters = [] + + # build parameters list for 'run_ticket_query' call + for calculate_earliest_time__result_item in calculate_earliest_time__result: + for convert_table_list__result_item in convert_table_list__result: + if query_formatted_string is not None and convert_table_list__result_item[0] is not None: + parameters.append({ + "query": query_formatted_string, + "max_results": 100, + "query_table": convert_table_list__result_item[0], + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.act("run query", parameters=parameters, name="run_ticket_query", assets=["servicenow"], callback=process_results) + + return + + +@phantom.playbook_block() +def format_report(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("format_report() called") + + ################################################################################ + # Format a summary table with the information gathered from the playbook. + ################################################################################ + + template = """SOAR retrieved tickets from Service Now. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Matched Fields | Source | Source Link |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | {8} | {9} | {10} |\n%%\n""" + + # parameter list for template variable replacement + parameters = [ + "build_output:custom_function:name", + "build_output:custom_function:number", + "build_output:custom_function:message", + "build_output:custom_function:start_time", + "build_output:custom_function:end_time", + "build_output:custom_function:assignee", + "build_output:custom_function:creator_name", + "build_output:custom_function:state", + "build_output:custom_function:matched_fields", + "build_output:custom_function:source", + "build_output:custom_function:source_link" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="format_report") + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + format_report = phantom.get_format_data(name="format_report") + build_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + + output = { + "observable": build_output__observable_array, + "markdown_report": format_report, + } + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_playbook_output_data(output=output) + + return \ No newline at end of file diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.json b/playbooks/Splunk_Notable_Related_Tickets_Search.json new file mode 100644 index 0000000000..24f96a7272 --- /dev/null +++ b/playbooks/Splunk_Notable_Related_Tickets_Search.json @@ -0,0 +1,380 @@ +{ + "blockly": false, + "blockly_xml": "", + "category": "Dynamic Related Ticket Search", + "coa": { + "data": { + "description": "Accepts a user or device and identifies if related notables exists in a timeframe of last 24 hours.. Generates a global report and list of observables.", + "edges": [ + { + "id": "port_0_to_port_2", + "sourceNode": "0", + "sourcePort": "0_out", + "targetNode": "2", + "targetPort": "2_in" + }, + { + "id": "port_10_to_port_3", + "sourceNode": "10", + "sourcePort": "10_out", + "targetNode": "3", + "targetPort": "3_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_2_to_port_10", + "sourceNode": "2", + "sourcePort": "2_out", + "targetNode": "10", + "targetPort": "10_in" + }, + { + "id": "port_7_to_port_12", + "sourceNode": "7", + "sourcePort": "7_out", + "targetNode": "12", + "targetPort": "12_in" + }, + { + "id": "port_12_to_port_1", + "sourceNode": "12", + "sourcePort": "12_out", + "targetNode": "1", + "targetPort": "1_in" + }, + { + "id": "port_3_to_port_15", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "15", + "targetPort": "15_in" + }, + { + "id": "port_15_to_port_7", + "sourceNode": "15", + "sourcePort": "15_out", + "targetNode": "7", + "targetPort": "7_in" + } + ], + "hash": "12e3e80ae573dc30d6867885c31f876732ca93a3", + "nodes": { + "0": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_start", + "id": "0", + "type": "start" + }, + "errors": {}, + "id": "0", + "type": "start", + "warnings": {}, + "x": 20, + "y": 0 + }, + "1": { + "data": { + "advanced": { + "join": [] + }, + "functionName": "on_finish", + "id": "1", + "type": "end" + }, + "errors": {}, + "id": "1", + "type": "end", + "warnings": {}, + "x": 20, + "y": 1218 + }, + "10": { + "data": { + "advanced": { + "customName": "comma separated user", + "customNameId": 0, + "description": "Convert playbook user input list into comma separated string for Splunk query.", + "drop_none": true, + "join": [], + "note": "Convert playbook user input list into comma separated string for Splunk query.", + "separator": "*,*" + }, + "functionId": 2, + "functionName": "comma_separated_user", + "id": "10", + "parameters": [ + "filtered-data:input_filter:condition_1:playbook_input:search_term" + ], + "template": "*{0}*", + "type": "format" + }, + "errors": {}, + "id": "10", + "type": "format", + "warnings": {}, + "x": 0, + "y": 328 + }, + "12": { + "data": { + "advanced": { + "customName": "format report", + "customNameId": 0, + "description": "Format a summary table with the information gathered from the playbook.", + "join": [], + "note": "Format a summary table with the information gathered from the playbook." + }, + "functionId": 4, + "functionName": "format_report", + "id": "12", + "parameters": [ + "build_output:custom_function:name", + "build_output:custom_function:number", + "build_output:custom_function:message", + "build_output:custom_function:start_time", + "build_output:custom_function:end_time", + "build_output:custom_function:assignee", + "build_output:custom_function:creator_name", + "build_output:custom_function:state" + ], + "template": "SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Source |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | Splunk Enterprise Security |\n%%\n", + "type": "format" + }, + "errors": {}, + "id": "12", + "type": "format", + "warnings": {}, + "x": 0, + "y": 1040 + }, + "15": { + "data": { + "advanced": { + "customName": "process results", + "customNameId": 0, + "description": "Iterates through the results of the search notable query to link playbook input search term to their associated notables.", + "join": [], + "note": "Iterates through the results of the search notable query to link playbook input search term to their associated notables." + }, + "functionId": 1, + "functionName": "process_results", + "id": "15", + "inputParameters": [ + "filtered-data:input_filter:condition_1:playbook_input:search_term", + "search_notables:action_result.data" + ], + "outputVariables": [ + "output" + ], + "type": "code" + }, + "errors": {}, + "id": "15", + "type": "code", + "userCode": "\n process_results__output = {}\n for search_term in filtered_input_0_search_term_values:\n process_results__output[search_term] = []\n for result in search_notables_result_item_0:\n if not isinstance(result, list):\n list_result = [result]\n else:\n list_result = result\n for result_item in list_result:\n result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)]\n match = False\n for string_value in result_item_values:\n if search_term.lower() in string_value:\n match = True\n break\n if match:\n process_results__output[search_term].append({**result_item})\n\n", + "warnings": {}, + "x": 0, + "y": 684 + }, + "2": { + "data": { + "advanced": { + "customName": "input_filter", + "customNameId": 0, + "description": "Creates a dataset without None values.", + "join": [], + "note": "Creates a dataset without None values." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": "!=", + "param": "playbook_input:search_term", + "value": "None" + } + ], + "conditionIndex": 0, + "customName": "output_exists", + "logic": "and" + } + ], + "functionId": 1, + "functionName": "input_filter", + "id": "2", + "type": "filter" + }, + "errors": {}, + "id": "2", + "type": "filter", + "warnings": { + "config": [ + "Reconfigure invalid datapath." + ] + }, + "x": 60, + "y": 148 + }, + "3": { + "customCode": null, + "data": { + "action": "run query", + "actionType": "investigate", + "advanced": { + "customName": "search notables", + "customNameId": 0, + "description": "Retrieve a list of notables which matched the given search input.", + "join": [], + "note": "Retrieve a list of notables which matched the given search input." + }, + "connector": "Splunk", + "connectorConfigs": [ + "splunk" + ], + "connectorId": "91883aa8-9c81-470b-97a1-5d8f7995f560", + "connectorVersion": "v1", + "functionId": 1, + "functionName": "search_notables", + "id": "3", + "parameters": { + "attach_result": true, + "command": "search", + "display": "", + "end_time": "now", + "query": { + "functionId": 1, + "parameters": [ + "comma_separated_user:formatted_data" + ], + "template": "`notable` | search _raw IN ({0})\n" + }, + "search_mode": "smart", + "start_time": "-24h" + }, + "requiredParameters": [ + { + "data_type": "string", + "field": "query" + }, + { + "data_type": "string", + "default": "search", + "field": "command" + }, + { + "data_type": "string", + "default": "smart", + "field": "search_mode" + } + ], + "tab": "byConnector", + "type": "action" + }, + "errors": {}, + "id": "3", + "type": "action", + "userCode": null, + "warnings": {}, + "x": 0, + "y": 506 + }, + "7": { + "customCode": null, + "data": { + "advanced": { + "customName": "build output", + "customNameId": 0, + "description": "Extract relevant data and add them to an observable array.", + "join": [], + "note": "Extract relevant data and add them to an observable array." + }, + "functionId": 2, + "functionName": "build_output", + "id": "7", + "inputParameters": [ + "process_results:custom_function:output" + ], + "outputVariables": [ + "observable_array", + "name", + "id", + "number", + "message", + "start_time", + "end_time", + "assignee", + "creator_name", + "state", + "notes", + "comments" + ], + "type": "code" + }, + "errors": {}, + "id": "7", + "type": "code", + "userCode": " build_output__observable_array = []\n build_output__name = []\n build_output__id = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__notes = []\n build_output__comments = []\n \n \n for key in process_results__output.keys():\n \n for result in process_results__output[key]:\n if \"comment\" in result:\n if isinstance(result[\"comment\"], str):\n comments = [result[\"comment\"]]\n else:\n comments = result[\"comment\"]\n else:\n comments = []\n \n matched_fields = []\n for k, v in result.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": result[\"search_name\"],\n \"id\": result[\"event_id\"],\n \"number\": result.get(\"notable_xref_id\"),\n \"message\": result[\"savedsearch_description\"],\n \"start_time\": result[\"_time\"],\n \"end_time\": \"\",\n \"assigned_to\": result[\"owner\"],\n \"creator_name\": \"\",\n \"state\": result[\"status_label\"],\n \"notes\": [],\n \"comments\": comments\n },\n \"matched_fields\": matched_fields,\n \"source\": \"Splunk Enterprise Security\"\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(result[\"search_name\"])\n build_output__id.append(result[\"event_id\"])\n build_output__number.append(result.get(\"notable_xref_id\"))\n build_output__message.append(result[\"savedsearch_description\"])\n build_output__start_time.append(result[\"_time\"])\n build_output__end_time.append(\"\")\n build_output__assignee.append(result[\"owner\"])\n build_output__creator_name.append(\"\")\n build_output__state.append(result[\"status_label\"])\n build_output__notes.append([])\n build_output__comments.append(comments)\n \n \n", + "warnings": {}, + "x": 0, + "y": 862 + } + }, + "notes": "Inputs: user, device\nInteractions: Splunk\nActions: run query\nOutputs: report, observables" + }, + "input_spec": [ + { + "contains": [ + "user name", + "host name" + ], + "description": "Find notables in Splunk that contains the given search_term.", + "name": "search_term" + } + ], + "output_spec": [ + { + "contains": [], + "datapaths": [ + "build_output:custom_function:observable_array" + ], + "deduplicate": false, + "description": "An array of observable dictionaries with value, type and information about the retrieved notables.", + "metadata": {}, + "name": "observable" + }, + { + "contains": [], + "datapaths": [ + "format_report:formatted_data" + ], + "deduplicate": false, + "description": "An array of reports.", + "metadata": {}, + "name": "markdown_report" + } + ], + "playbook_type": "data", + "python_version": "3", + "schema": "5.0.9", + "version": "6.0.0.114895" + }, + "create_time": "2023-02-27T21:42:30.554557+00:00", + "draft_mode": false, + "labels": [ + "*" + ], + "tags": [ + "user", + "device", + "splunk", + "ticket" + ] +} \ No newline at end of file diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.png b/playbooks/Splunk_Notable_Related_Tickets_Search.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5d66cb71688adf4308897b3e9f0555773d6cf6 GIT binary patch literal 47685 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 At^fc4 literal 0 HcmV?d00001 diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.py b/playbooks/Splunk_Notable_Related_Tickets_Search.py new file mode 100644 index 0000000000..2b0c74c055 --- /dev/null +++ b/playbooks/Splunk_Notable_Related_Tickets_Search.py @@ -0,0 +1,344 @@ +""" +Accepts a user or device and identifies if related notables exists in a timeframe of last 24 hours.. Generates a global report and list of observables. +""" + + +import phantom.rules as phantom +import json +from datetime import datetime, timedelta + + +@phantom.playbook_block() +def on_start(container): + phantom.debug('on_start() called') + + # call 'input_filter' block + input_filter(container=container) + + return + +@phantom.playbook_block() +def input_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("input_filter() called") + + ################################################################################ + # Creates a dataset without None values. + ################################################################################ + + # collect filtered artifact ids and results for 'if' condition 1 + matched_artifacts_1, matched_results_1 = phantom.condition( + container=container, + conditions=[ + ["playbook_input:search_term", "!=", None] + ], + name="input_filter:condition_1") + + # call connected blocks if filtered artifacts or results + if matched_artifacts_1 or matched_results_1: + comma_separated_user(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + + return + + +@phantom.playbook_block() +def search_notables(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("search_notables() called") + + # phantom.debug('Action: {0} {1}'.format(action['name'], ('SUCCEEDED' if success else 'FAILED'))) + + query_formatted_string = phantom.format( + container=container, + template="""`notable` | search _raw IN ({0})\n""", + parameters=[ + "comma_separated_user:formatted_data" + ]) + + ################################################################################ + # Retrieve a list of notables which matched the given search input. + ################################################################################ + + comma_separated_user = phantom.get_format_data(name="comma_separated_user") + + parameters = [] + + if query_formatted_string is not None: + parameters.append({ + "query": query_formatted_string, + "command": "search", + "display": "", + "end_time": "now", + "start_time": "-24h", + "search_mode": "smart", + "attach_result": True, + }) + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.act("run query", parameters=parameters, name="search_notables", assets=["splunk"], callback=process_results) + + return + + +@phantom.playbook_block() +def build_output(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("build_output() called") + + ################################################################################ + # Extract relevant data and add them to an observable array. + ################################################################################ + + process_results__output = json.loads(_ if (_ := phantom.get_run_data(key="process_results:output")) != "" else "null") # pylint: disable=used-before-assignment + + build_output__observable_array = None + build_output__name = None + build_output__id = None + build_output__number = None + build_output__message = None + build_output__start_time = None + build_output__end_time = None + build_output__assignee = None + build_output__creator_name = None + build_output__state = None + build_output__notes = None + build_output__comments = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + build_output__observable_array = [] + build_output__name = [] + build_output__id = [] + build_output__number = [] + build_output__message = [] + build_output__start_time = [] + build_output__end_time = [] + build_output__assignee = [] + build_output__creator_name = [] + build_output__state = [] + build_output__notes = [] + build_output__comments = [] + + + for key in process_results__output.keys(): + + for result in process_results__output[key]: + if "comment" in result: + if isinstance(result["comment"], str): + comments = [result["comment"]] + else: + comments = result["comment"] + else: + comments = [] + + matched_fields = [] + for k, v in result.items(): + # generate matched fields where the searched entity appears + if isinstance(v, str) and key.lower() in v.lower(): + matched_fields.append(k) + + observable_object = { + "value": key, + "ticket": { + "name": result["search_name"], + "id": result["event_id"], + "number": result.get("notable_xref_id"), + "message": result["savedsearch_description"], + "start_time": result["_time"], + "end_time": "", + "assigned_to": result["owner"], + "creator_name": "", + "state": result["status_label"], + "notes": [], + "comments": comments + }, + "matched_fields": matched_fields, + "source": "Splunk Enterprise Security" + } + build_output__observable_array.append(observable_object) + build_output__name.append(result["search_name"]) + build_output__id.append(result["event_id"]) + build_output__number.append(result.get("notable_xref_id")) + build_output__message.append(result["savedsearch_description"]) + build_output__start_time.append(result["_time"]) + build_output__end_time.append("") + build_output__assignee.append(result["owner"]) + build_output__creator_name.append("") + build_output__state.append(result["status_label"]) + build_output__notes.append([]) + build_output__comments.append(comments) + + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="build_output:observable_array", value=json.dumps(build_output__observable_array)) + phantom.save_run_data(key="build_output:name", value=json.dumps(build_output__name)) + phantom.save_run_data(key="build_output:id", value=json.dumps(build_output__id)) + phantom.save_run_data(key="build_output:number", value=json.dumps(build_output__number)) + phantom.save_run_data(key="build_output:message", value=json.dumps(build_output__message)) + phantom.save_run_data(key="build_output:start_time", value=json.dumps(build_output__start_time)) + phantom.save_run_data(key="build_output:end_time", value=json.dumps(build_output__end_time)) + phantom.save_run_data(key="build_output:assignee", value=json.dumps(build_output__assignee)) + phantom.save_run_data(key="build_output:creator_name", value=json.dumps(build_output__creator_name)) + phantom.save_run_data(key="build_output:state", value=json.dumps(build_output__state)) + phantom.save_run_data(key="build_output:notes", value=json.dumps(build_output__notes)) + phantom.save_run_data(key="build_output:comments", value=json.dumps(build_output__comments)) + + format_report(container=container) + + return + + +@phantom.playbook_block() +def comma_separated_user(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("comma_separated_user() called") + + ################################################################################ + # Convert playbook user input list into comma separated string for Splunk query. + ################################################################################ + + template = """*{0}*""" + + # parameter list for template variable replacement + parameters = [ + "filtered-data:input_filter:condition_1:playbook_input:search_term" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="comma_separated_user", separator="*,*", drop_none=True) + + search_notables(container=container) + + return + + +@phantom.playbook_block() +def format_report(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("format_report() called") + + ################################################################################ + # Format a summary table with the information gathered from the playbook. + ################################################################################ + + template = """SOAR retrieved tickets from Splunk. The table below shows a summary of the information gathered.\n\n| Name | Number | Message | Start Time | End Time | Assignee | Creator Name | State | Source |\n| --- | --- | --- | --- | --- | --- | --- | --- | --- |\n%%\n| {0} | {1} | {2} | {3} | {4} | {5} | {6} | {7} | Splunk Enterprise Security |\n%%\n""" + + # parameter list for template variable replacement + parameters = [ + "build_output:custom_function:name", + "build_output:custom_function:number", + "build_output:custom_function:message", + "build_output:custom_function:start_time", + "build_output:custom_function:end_time", + "build_output:custom_function:assignee", + "build_output:custom_function:creator_name", + "build_output:custom_function:state" + ] + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.format(container=container, template=template, parameters=parameters, name="format_report") + + return + + +@phantom.playbook_block() +def process_results(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("process_results() called") + + ################################################################################ + # Iterates through the results of the search notable query to link playbook input + # search term to their associated notables. + ################################################################################ + + filtered_input_0_search_term = phantom.collect2(container=container, datapath=["filtered-data:input_filter:condition_1:playbook_input:search_term"]) + search_notables_result_data = phantom.collect2(container=container, datapath=["search_notables:action_result.data"], action_results=results) + + filtered_input_0_search_term_values = [item[0] for item in filtered_input_0_search_term] + search_notables_result_item_0 = [item[0] for item in search_notables_result_data] + + process_results__output = None + + ################################################################################ + ## Custom Code Start + ################################################################################ + + process_results__output = {} + for search_term in filtered_input_0_search_term_values: + process_results__output[search_term] = [] + for result in search_notables_result_item_0: + if not isinstance(result, list): + list_result = [result] + else: + list_result = result + for result_item in list_result: + result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)] + match = False + for string_value in result_item_values: + if search_term.lower() in string_value: + match = True + break + if match: + process_results__output[search_term].append({**result_item}) + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_run_data(key="process_results:output", value=json.dumps(process_results__output)) + + build_output(container=container) + + return + + +@phantom.playbook_block() +def on_finish(container, summary): + phantom.debug("on_finish() called") + + format_report = phantom.get_format_data(name="format_report") + build_output__observable_array = json.loads(_ if (_ := phantom.get_run_data(key="build_output:observable_array")) != "" else "null") # pylint: disable=used-before-assignment + + output = { + "observable": build_output__observable_array, + "markdown_report": format_report, + } + + ################################################################################ + ## Custom Code Start + ################################################################################ + + # Write your custom code here... + + ################################################################################ + ## Custom Code End + ################################################################################ + + phantom.save_playbook_output_data(output=output) + + return \ No newline at end of file From 8d1a416b74975c58c09dc1de60624a25b253a92b Mon Sep 17 00:00:00 2001 From: Lou Stella Date: Mon, 27 Feb 2023 16:54:13 -0600 Subject: [PATCH 2/3] Adding ymls for playbooks --- playbooks/Dynamic_Related_Tickets_Search.yml | 19 +++++++++++++++ .../ServiceNow_Related_Tickets_Search.yml | 24 +++++++++++++++++++ .../Splunk_Notable_Related_Tickets_Search.yml | 24 +++++++++++++++++++ 3 files changed, 67 insertions(+) create mode 100644 playbooks/Dynamic_Related_Tickets_Search.yml create mode 100644 playbooks/ServiceNow_Related_Tickets_Search.yml create mode 100644 playbooks/Splunk_Notable_Related_Tickets_Search.yml diff --git a/playbooks/Dynamic_Related_Tickets_Search.yml b/playbooks/Dynamic_Related_Tickets_Search.yml new file mode 100644 index 0000000000..5ad47b1503 --- /dev/null +++ b/playbooks/Dynamic_Related_Tickets_Search.yml @@ -0,0 +1,19 @@ +name: Dynamic Related Tickets Search +id: fc0edc96-ab1f-48b9-9b4d-63da61bafe74 +version: 1 +date: '2023-02-28' +author: Patrick Bareiss, Splunk +type: Investigation +description: "Detects available indicators and routes them to dynamic related ticket search playbooks. The output of the analysis will update any artifacts, tasks, and indicator tags." +playbook: Dynamic_Related_Tickets_Search +how_to_implement: This playbook looks for artifacts and then dispatches the community Related Tickets playbooks. This playbook takes the output of those playbooks and nicely formats them into notes and tags indicators with their results. +references: + - https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/ +app_list: [] +tags: + platform_tags: [] + playbook_type: Automation + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file diff --git a/playbooks/ServiceNow_Related_Tickets_Search.yml b/playbooks/ServiceNow_Related_Tickets_Search.yml new file mode 100644 index 0000000000..5cf7e82961 --- /dev/null +++ b/playbooks/ServiceNow_Related_Tickets_Search.yml @@ -0,0 +1,24 @@ +name: ServiceNow Related Tickets Search +id: fc0edc96-ff2b-48b0-9b4d-63da61bafe74 +version: 1 +date: '2023-02-28' +author: Patrick Bareiss, Splunk +type: Investigation +description: "Accepts a user or device and identifies if related tickets exists in a timeframe of last 30 days. Generates a global report and list of observables." +playbook: ServiceNow_Related_Tickets_Search +how_to_implement: This input playbook requires the ServiceNow connector to be configured. It is designed to work in conjunction with the Dynamic Related Tickets Seach playbook or other playbooks in the same style. +references: + - https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/ +app_list: + - Splunk +tags: + platform_tags: + - user + - device + - ServiceNow + - ticket + playbook_type: Input + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.yml b/playbooks/Splunk_Notable_Related_Tickets_Search.yml new file mode 100644 index 0000000000..c94b5a58c2 --- /dev/null +++ b/playbooks/Splunk_Notable_Related_Tickets_Search.yml @@ -0,0 +1,24 @@ +name: Splunk Notable Related Tickets Search +id: fc0edc96-ff2b-58b0-9b4d-43bc61bafe74 +version: 1 +date: '2023-02-28' +author: Patrick Bareiss, Splunk +type: Investigation +description: "Accepts a user or device and identifies if related notables exists in a timeframe of last 24 hours. Generates a global report and list of observables." +playbook: Splunk_Notable_Related_Tickets_Search +how_to_implement: This input playbook requires the Splunk connector to be configured. It is designed to work in conjunction with the Dynamic Related Tickets Seach playbook or other playbooks in the same style. +references: + - https://d3fend.mitre.org/technique/d3f:IdentifierReputationAnalysis/ +app_list: + - Splunk +tags: + platform_tags: + - user + - device + - splunk + - ticket + playbook_type: Input + vpe_type: Modern + playbook_fields: [] + product: + - Splunk SOAR \ No newline at end of file From 93bdcf147e2c83e47f89ff4e6d19d3b582daa2c3 Mon Sep 17 00:00:00 2001 From: Lou Stella Date: Fri, 3 Mar 2023 15:35:25 -0600 Subject: [PATCH 3/3] Updating to keep in sync w/ phantomcyber/playbooks --- .../ServiceNow_Related_Tickets_Search.json | 12 +-- .../ServiceNow_Related_Tickets_Search.py | 2 +- ...Splunk_Notable_Related_Tickets_Search.json | 84 ++++++++++++++---- .../Splunk_Notable_Related_Tickets_Search.png | Bin 47685 -> 43665 bytes .../Splunk_Notable_Related_Tickets_Search.py | 55 ++++++++---- 5 files changed, 112 insertions(+), 41 deletions(-) diff --git a/playbooks/ServiceNow_Related_Tickets_Search.json b/playbooks/ServiceNow_Related_Tickets_Search.json index f4a1d3fe22..f9b8ef0e82 100644 --- a/playbooks/ServiceNow_Related_Tickets_Search.json +++ b/playbooks/ServiceNow_Related_Tickets_Search.json @@ -82,7 +82,7 @@ "targetPort": "1_in" } ], - "hash": "fe6211a724ba368888388b13703be77329f2b9b2", + "hash": "e7ead2bdc6a802950dd37c47b3f4af40d61c676c", "nodes": { "0": { "data": { @@ -97,8 +97,8 @@ "id": "0", "type": "start", "warnings": {}, - "x": 20, - "y": 0 + "x": 19.999999999999986, + "y": -6.394884621840902e-14 }, "1": { "data": { @@ -113,7 +113,7 @@ "id": "1", "type": "end", "warnings": {}, - "x": 20, + "x": 19.999999999999986, "y": 1708 }, "10": { @@ -221,7 +221,7 @@ "errors": {}, "id": "16", "type": "code", - "userCode": " import re \n \n build_output__observable_array = []\n build_output__name = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__matched_fields = []\n build_output__source_link = []\n build_output__source = []\n \n def generate_ticket_link(sample_url, ticket_type, sys_id):\n extract_host = re.search(r\"https*:\\/\\/[^\\/]+\", sample_url).group(0)\n extract_host += f\"/nav_to.do?uri={ticket_type}.do?sys_id={sys_id}\"\n return extract_host\n \n for key in process_results__output.keys():\n \n for value in process_results__output[key]:\n assigned_to = None\n caller_id = None\n matched_fields = []\n if value.get(\"assigned_to\"):\n assigned_to = value[\"assigned_to\"][\"display_value\"]\n if value.get(\"caller_id\"):\n caller_id = value[\"caller_id\"][\"display_value\"]\n \n for k, v in value.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n # search for any link sample:\n if isinstance(v, dict):\n sample_link = v.get('link')\n \n source_link = generate_ticket_link(sample_link, value['ticket_type'], value['sys_id'])\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": value[\"short_description\"],\n \"id\": value[\"sys_id\"],\n \"number\": value[\"number\"],\n \"message\": value[\"description\"],\n \"start_time\": value[\"sys_created_on\"],\n \"end_time\": value[\"closed_at\"],\n \"assigned_to\": assigned_to,\n \"creator_name\": caller_id,\n \"state\": value[\"state\"],\n \"notes\": [value[\"work_notes\"]],\n \"comments\": [value[\"comments\"]]\n },\n \"matched_fields\": matched_fields,\n \"source\": \"ServiceNow\",\n \"source_link\": source_link\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(value[\"short_description\"])\n build_output__number.append(value[\"number\"])\n build_output__message.append(json.dumps(value[\"description\"])) # eliminate new line issues\n build_output__start_time.append(value[\"sys_created_on\"])\n build_output__end_time.append(value[\"closed_at\"])\n build_output__assignee.append(assigned_to)\n build_output__creator_name.append(caller_id)\n build_output__state.append(value[\"state\"])\n build_output__matched_fields.append(matched_fields)\n build_output__source.append(\"ServiceNow\")\n build_output__source_link.append(source_link)\n #phantom.debug(observable_object)\n\n", + "userCode": " import re \n \n build_output__observable_array = []\n build_output__name = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__matched_fields = []\n build_output__source_link = []\n build_output__source = []\n \n def generate_ticket_link(sample_url, ticket_type, sys_id):\n extract_host = re.search(r\"https*:\\/\\/[^\\/]+\", sample_url).group(0)\n extract_host += f\"/nav_to.do?uri={ticket_type}.do?sys_id={sys_id}\"\n return extract_host\n \n for key in process_results__output.keys():\n \n for value in process_results__output[key]:\n assigned_to = None\n caller_id = None\n matched_fields = []\n if value.get(\"assigned_to\"):\n assigned_to = value[\"assigned_to\"][\"display_value\"]\n if value.get(\"caller_id\"):\n caller_id = value[\"caller_id\"][\"display_value\"]\n \n for k, v in value.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n # search for any link sample:\n if isinstance(v, dict):\n sample_link = v.get('link')\n \n source_link = generate_ticket_link(sample_link, value['ticket_type'], value['sys_id'])\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": value[\"short_description\"],\n \"id\": value[\"sys_id\"],\n \"number\": value[\"number\"],\n \"message\": json.dumps(value[\"description\"]),\n \"start_time\": value[\"sys_created_on\"],\n \"end_time\": value[\"closed_at\"],\n \"assigned_to\": assigned_to,\n \"creator_name\": caller_id,\n \"state\": value[\"state\"],\n \"notes\": [value[\"work_notes\"]],\n \"comments\": [value[\"comments\"]]\n },\n \"matched_fields\": matched_fields,\n \"source\": \"ServiceNow\",\n \"source_link\": source_link\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(value[\"short_description\"])\n build_output__number.append(value[\"number\"])\n build_output__message.append(json.dumps(value[\"description\"])) # eliminate new line issues\n build_output__start_time.append(value[\"sys_created_on\"])\n build_output__end_time.append(value[\"closed_at\"])\n build_output__assignee.append(assigned_to)\n build_output__creator_name.append(caller_id)\n build_output__state.append(value[\"state\"])\n build_output__matched_fields.append(matched_fields)\n build_output__source.append(\"ServiceNow\")\n build_output__source_link.append(source_link)\n #phantom.debug(observable_object)\n\n", "warnings": {}, "x": 0, "y": 1352 @@ -562,7 +562,7 @@ "schema": "5.0.9", "version": "6.0.0.114895" }, - "create_time": "2023-02-27T21:35:55.428347+00:00", + "create_time": "2023-03-03T21:21:48.729159+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/ServiceNow_Related_Tickets_Search.py b/playbooks/ServiceNow_Related_Tickets_Search.py index 1655ad2098..027adeb29b 100644 --- a/playbooks/ServiceNow_Related_Tickets_Search.py +++ b/playbooks/ServiceNow_Related_Tickets_Search.py @@ -256,7 +256,7 @@ def build_output(action=None, success=None, container=None, results=None, handle "name": value["short_description"], "id": value["sys_id"], "number": value["number"], - "message": value["description"], + "message": json.dumps(value["description"]), "start_time": value["sys_created_on"], "end_time": value["closed_at"], "assigned_to": assigned_to, diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.json b/playbooks/Splunk_Notable_Related_Tickets_Search.json index 24f96a7272..d471475d5d 100644 --- a/playbooks/Splunk_Notable_Related_Tickets_Search.json +++ b/playbooks/Splunk_Notable_Related_Tickets_Search.json @@ -46,22 +46,34 @@ "targetNode": "1", "targetPort": "1_in" }, - { - "id": "port_3_to_port_15", - "sourceNode": "3", - "sourcePort": "3_out", - "targetNode": "15", - "targetPort": "15_in" - }, { "id": "port_15_to_port_7", "sourceNode": "15", "sourcePort": "15_out", "targetNode": "7", "targetPort": "7_in" + }, + { + "id": "port_3_to_port_17", + "sourceNode": "3", + "sourcePort": "3_out", + "targetNode": "17", + "targetPort": "17_in" + }, + { + "conditions": [ + { + "index": 0 + } + ], + "id": "port_17_to_port_15", + "sourceNode": "17", + "sourcePort": "17_out", + "targetNode": "15", + "targetPort": "15_in" } ], - "hash": "12e3e80ae573dc30d6867885c31f876732ca93a3", + "hash": "97d4448db53d4f9f36897f9da6cc35bd6c97e460", "nodes": { "0": { "data": { @@ -76,8 +88,8 @@ "id": "0", "type": "start", "warnings": {}, - "x": 20, - "y": 0 + "x": 19.999999999999986, + "y": -6.394884621840902e-14 }, "1": { "data": { @@ -92,8 +104,8 @@ "id": "1", "type": "end", "warnings": {}, - "x": 20, - "y": 1218 + "x": 19.999999999999986, + "y": 1398 }, "10": { "data": { @@ -152,7 +164,7 @@ "type": "format", "warnings": {}, "x": 0, - "y": 1040 + "y": 1220 }, "15": { "data": { @@ -168,7 +180,7 @@ "id": "15", "inputParameters": [ "filtered-data:input_filter:condition_1:playbook_input:search_term", - "search_notables:action_result.data" + "filtered-data:search_results_filter:condition_1:search_notables:action_result.data" ], "outputVariables": [ "output" @@ -178,9 +190,45 @@ "errors": {}, "id": "15", "type": "code", - "userCode": "\n process_results__output = {}\n for search_term in filtered_input_0_search_term_values:\n process_results__output[search_term] = []\n for result in search_notables_result_item_0:\n if not isinstance(result, list):\n list_result = [result]\n else:\n list_result = result\n for result_item in list_result:\n result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)]\n match = False\n for string_value in result_item_values:\n if search_term.lower() in string_value:\n match = True\n break\n if match:\n process_results__output[search_term].append({**result_item})\n\n", + "userCode": "\n process_results__output = {}\n for search_term in filtered_input_0_search_term_values:\n process_results__output[search_term] = []\n for result in filtered_result_0_data:\n if not isinstance(result, list):\n list_result = [result]\n else:\n list_result = result\n for result_item in list_result:\n result_item_values = [item.lower() for item in result_item.values() if isinstance(item, str)]\n match = False\n for string_value in result_item_values:\n if search_term.lower() in string_value:\n match = True\n break\n if match:\n process_results__output[search_term].append({**result_item})\n\n", "warnings": {}, "x": 0, + "y": 864 + }, + "17": { + "data": { + "advanced": { + "customName": "search results filter", + "customNameId": 0, + "description": "Determine if search results exist from the previous query.", + "join": [], + "note": "Determine if search results exist from the previous query." + }, + "conditions": [ + { + "comparisons": [ + { + "conditionIndex": 0, + "op": ">", + "param": "search_notables:action_result.summary.total_events", + "value": "0" + } + ], + "conditionIndex": 0, + "customName": "results_exist", + "logic": "and" + } + ], + "functionId": 2, + "functionName": "search_results_filter", + "id": "17", + "type": "filter" + }, + "errors": {}, + "id": "17", + "type": "filter", + "warnings": {}, + "x": 60, "y": 684 }, "2": { @@ -321,10 +369,10 @@ "errors": {}, "id": "7", "type": "code", - "userCode": " build_output__observable_array = []\n build_output__name = []\n build_output__id = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__notes = []\n build_output__comments = []\n \n \n for key in process_results__output.keys():\n \n for result in process_results__output[key]:\n if \"comment\" in result:\n if isinstance(result[\"comment\"], str):\n comments = [result[\"comment\"]]\n else:\n comments = result[\"comment\"]\n else:\n comments = []\n \n matched_fields = []\n for k, v in result.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": result[\"search_name\"],\n \"id\": result[\"event_id\"],\n \"number\": result.get(\"notable_xref_id\"),\n \"message\": result[\"savedsearch_description\"],\n \"start_time\": result[\"_time\"],\n \"end_time\": \"\",\n \"assigned_to\": result[\"owner\"],\n \"creator_name\": \"\",\n \"state\": result[\"status_label\"],\n \"notes\": [],\n \"comments\": comments\n },\n \"matched_fields\": matched_fields,\n \"source\": \"Splunk Enterprise Security\"\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(result[\"search_name\"])\n build_output__id.append(result[\"event_id\"])\n build_output__number.append(result.get(\"notable_xref_id\"))\n build_output__message.append(result[\"savedsearch_description\"])\n build_output__start_time.append(result[\"_time\"])\n build_output__end_time.append(\"\")\n build_output__assignee.append(result[\"owner\"])\n build_output__creator_name.append(\"\")\n build_output__state.append(result[\"status_label\"])\n build_output__notes.append([])\n build_output__comments.append(comments)\n \n \n", + "userCode": " build_output__observable_array = []\n build_output__name = []\n build_output__id = []\n build_output__number = []\n build_output__message = []\n build_output__start_time = []\n build_output__end_time = []\n build_output__assignee = []\n build_output__creator_name = []\n build_output__state = []\n build_output__notes = []\n build_output__comments = []\n \n \n for key in process_results__output.keys():\n \n for result in process_results__output[key]:\n if \"comment\" in result:\n if isinstance(result[\"comment\"], str):\n comments = [result[\"comment\"]]\n else:\n comments = result[\"comment\"]\n else:\n comments = []\n \n matched_fields = []\n for k, v in result.items():\n # generate matched fields where the searched entity appears\n if isinstance(v, str) and key.lower() in v.lower():\n matched_fields.append(k)\n\n observable_object = {\n \"value\": key,\n \"ticket\": {\n \"name\": result['rule_title'] if result.get('rule_title') else result.get(\"search_name\"),\n \"id\": result.get(\"event_id\"),\n \"number\": result.get(\"notable_xref_id\"),\n \"message\": result['rule_description'] if result.get(\"rule_description\") else result.get(\"savedsearch_description\"),\n \"start_time\": result.get(\"_time\"),\n \"end_time\": \"\",\n \"assigned_to\": result.get(\"owner\"),\n \"creator_name\": \"\",\n \"state\": result.get(\"status_label\"),\n \"notes\": [],\n \"comments\": comments\n },\n \"matched_fields\": matched_fields,\n \"source\": \"Splunk Enterprise Security\"\n }\n build_output__observable_array.append(observable_object)\n build_output__name.append(result.get(\"search_name\"))\n build_output__id.append(result.get(\"event_id\"))\n build_output__number.append(result.get(\"notable_xref_id\"))\n build_output__message.append(result.get(\"savedsearch_description\"))\n build_output__start_time.append(result.get(\"_time\"))\n build_output__end_time.append(\"\")\n build_output__assignee.append(result.get(\"owner\"))\n build_output__creator_name.append(\"\")\n build_output__state.append(result.get(\"status_label\"))\n build_output__notes.append([])\n build_output__comments.append(comments)\n \n \n", "warnings": {}, "x": 0, - "y": 862 + "y": 1042 } }, "notes": "Inputs: user, device\nInteractions: Splunk\nActions: run query\nOutputs: report, observables" @@ -366,7 +414,7 @@ "schema": "5.0.9", "version": "6.0.0.114895" }, - "create_time": "2023-02-27T21:42:30.554557+00:00", + "create_time": "2023-03-03T21:14:02.937956+00:00", "draft_mode": false, "labels": [ "*" diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.png b/playbooks/Splunk_Notable_Related_Tickets_Search.png index 1e5d66cb71688adf4308897b3e9f0555773d6cf6..5110524360e69f845267fd9ba6e66dfedae1185e 100644 GIT binary patch literal 43665 zcmd43Wl&v9w=N8Xz{1@fLXhC@?gaM`Ah^5h!d(M_;O_438VC?1!5xA_aA)1g-tT_T z`R+Ym)%kO7-BeK-%-KC#M)&A3p7Ash%8Jq`h=hnxP*5ncG7_p#P|#vfP_RuPIN*tP zat;UZz`#;mTv=9JoLt$--pta*6bgzq!8Ku09!3RyxH~;mSquY{gwG>f5w}jtg|=6t zt|v%mDsJh1`Ip4p@QIYmp|X1}(@G!H(`!le*;aYcSqjRwD|iWgxh7BRLfmoVTfbX2 zcH|3x)b3HwDWn{ed9$~ruqj%aL0xzrd#+Uej$d>Hk`;?fVAmE&8@*-3?4<`PO2sbA zlz7vdXpr!%HtlZheRW-SIHD5#lt-h}xyVBzX41LvIuwXmEa^6Vd%c3$_3i?tx7wt_ObxV@7pITsTP6APsf zA~`v^fRl+CpQ?n^zp4Yj2~t|PxH#}JGrPOHGr6-f**lptv-0xtGPAHTv#~J(B^aGO z?OY5!810;?{{F~6-;pqNHg>XfaIv(vBY*j>p^?3-iy$TCOGE$u_jf-{JuLsDB|GPT z4GS0`^UE7%Rwfqae}5aOD)91@PubGL)J8|b(iWH=pba5bHWn^{zbgD6ul}RS|5R1` zKdQ2`vHjG$BL>*GXC^C=n=G2~l+q=%Y+{AL7ASkPJG zgZ-g{_B#n@hc2JHJa-!oXZG(` zSDMUkBbG8V@3R+%+4<{F-{N4Sp3?B3LqVh0um+eA&5>xpLj%9bLWzaPLcx%K@`gbd zTXF~1FEqM8dLEiT6lgvRD)`5>-b*)O$%FS^kwd{W(Lhl&_~Jo90X0Ds_fQ~z|6>FZ zknP%Qz!Hg&Q_rL}2D5IXjOCk9LQ&9-r z=0et=BQ!-Wf1$Zb%+DPbWo2cRNC$_b`Rxg}fb&Q&4l2oHS=!K#yA8wPf$rhJ9L&zs z~z87kpcY#wVsEgqrzU2`*-09AE5W$)=G{7t-qznL8Ms1axpWL(6ebD zjw2+d3=}~I%|AWQd;q&<4PW=Ds;QOa*S{+>tM&E?P0k?h*4XaqS}j?8op2=Db8?gY z>%LrUetNm0balp84aIZqwS`4R%8;{hCet)KTEN>W_;n*C5nn0%hk^u35TO6BL4f{=kAqbM zp+Ex(P{Ay*4hbBe~jbNI|HSXdDeVPGy`Ys@j0&4)fwbUaiE|G?4GPxoI=cny4q7I>)~Y~=D(UfoS` zsWdcMZ18!X%)VO|P2dlD z=UEDO{=`9@WXca{;jiK}*-l=wmgJNm{1B*M<>KV8-Xj96dRY|C-49hu`{mVL7+{0p z0uDN{qm%XdGrsdP#Jvvf1tf8yrq1A(zfKZI;8a znXGjDn9$IIz`R}M2*sOM1Wz_2qEdJ;cwJpxxg1{!7o!kyjgkvQw%_IOLX#I$ZC!xJYKKvvD=LZ+F^hKEM4T zzB{ew{v1Gz3V(HTGd4vQM?0sf5i#|t_$w*@elevWuH;}X1_-shAoq3)5B9r^2nmK& zj9NuHw4P-s#bnU!Yv2!u)oB~56>8GfUw<;4<+Jt|z7Oeao|JGN zlduYn%09k|*ab7Fcg5lf&HGVSyK9`}xjY2&KAxKaKcPPBY&F_&3ad7zNX!aT=AovHO>r6fB0lSzWlHpZ{ zF-4%JdGLLJe->a!y{4sC0Xr2+4n@Hs!JdN-$X=NK=m)Z7p1^L$4+M+@`nbOsU?}#0 zL!^YpcN+z;(;#3Y<8z4H2MTqq&P8>4v05;_frb$WmDndEx5C8LAh@`@Bjv-6C((1! z4v)1CymN}cT=w`0y&veW0@xDcSvH#tC{$RHo(xzPPA>EI+*zPq);CZT(G>6ByapOj zd@-p@G2IYoco;8qk+mo?R}E0(;zgbO{dfAqjY4N%M;rMY4Blq+n2#-W!?0_jN{`0=b*7Q#j{rNdpEht z>mL=E-4?eXdM2jAseI`vDzr5s&9&C`zA=ljp)13|GZYgXzp2GnjWbWX zOV>VCFKUunf|AQc7yi@z3o-vwx8}w$S*+1;-;k8Pv$J!MhHmIa&Cz0KR|F=<=jzR+R6;wLFc_; zWMlS4(X@<(85uS@`y~8s)6*#ih47?4>RIiBFyDq0G-ls*B_h9kp@&=kGRH1Rz}eZU z)agj#?we9!TR&VD-pTd72sYTvWoC%pis1IB1QWNLJYELSq{MWSj=p8A3w?P>PF|l; zH)pkdN&fNApW6rf*WM&qDgG54;qmX4R2P@-5VPrx+b;yCO?snL&o}joeyOr_# zlD1gb8tptPpLUb+z~OAl9fMQj_F1wk4k2hz?%5KE8WtKooE;ium;p`Y3AhGZSpMjQ z-7(5yfNQ`5$U_7yp8;Qp<^Nm!uSF&HD4@!aBQayP4iESx1XIg=Y_Y!{q;bTW%zwL> zN$Q~wzzbiJEelT}hOge|rfp1HO(LBcPO>hh`)}n!av*yP;6G*&xcA{i7y;kZioX4^ z)~t@EC4~tR=|Ct^+ww3Ez7z%gnVu40ze(8=Bq0I5jUgZ-h{r?&j!v{3l$gbAvS=$H zV@g4ZePx*)0sRjZ7r_y$yzW3JyT1ISq$KR^)dFc)0hgg4*rFld^=DBW5%gslHi(N< z-a~r_zuGoLL%aTy*NMPOdLP&NfOdpowf_VR5_+C08iWT!6YtN*srV^t1Q8bKIkF@$ zijvk&EZBg0a?@UgKtrSd09*}aw1W{WU~tO7_(QEwvEcxp0S$0U z1xu)u0Ii7w4jo|`uQEO$|9z6i3IKEW-}<;eeQ=F=(RdcYZ2;L3YuX%XK7H_qV^0d9 zBZR&z@*@N({Lty^_4h;n8p|KzGZh`u`G=CUQczbC+d6?WD<*b5K#PB#t;NzZmg z@!;@~OqKU~%bFMt@O<9_I&Xi?kOl6q;yXCL0uHtEQ9qQc_Kr>mWSBNUuLq&4qy#tN zy8&JKV$pENQ`cr?)WJXASDH@O-Nz#CSSUwhZ;15JzHAap1f&#k0vyb<`n~}3pjYpP zajUq>%qW3%g2kDv6UAqvEmX)m{d4o;tY+EgiWr_eha38c>ZSP%u$>+07p>?#hGGc! z+eQAx(ju>SjSUt{(bk5+B_9F-8;J$GXt#h&rZ1K+9j8&QryQ^J<%{w5U6De1X>F}6 z=>??8WJ zkU(=w272=qaJYMWDzo(5+)zz-w@0k9+)q*uT;>fr-@O|~4>KHgO-z+on5Uj7*z)Ykzmw^Xmbaqr;QxhLK zkln1StFhy2b-!hyRi(qzHn1pF>$%dM!DE!$I8({y~XpRF(XANK8ja! zg>T$h^p8H<$w|a5$9!hpYhK0&pH^&f_N}cc@+_3J*4M^bZXm-WZ9=v}ZN?1s@co+e zVH{Idli?ZjdcOA&e`{F4fYb~I^?z3QlB`4C?%*N=;N^d-FJD4}g7ITYM5$FV+Y_zh17epHw(>iN8Tf^F94U4z~ySbqeVnP|hT5=CFP!pxjIk zB8v;B^xZN!Gfjaz5(i=!=xTyvG2Qsd&^$<5J_PPS?ZXn9eKIViwIM{t2Iu#0I7qCF zynH#G%mxak8b_jCh`Mxe+ZQMTnhYo*a5hF<3#J)ETPq#9`Vn_NFQm7gH<+z5y?)jwCCuSeK006fX@H6Y5tm= zhNtL3Nbqi$N{kexPAz!CU~#nZ;RMW5L?y-$f18ie{Rvi;EmKE6@O2NTH~QY`VPV5% z^jD3hBD41Qhb>!vZ^53d151o;mqwe`41te$@^e$Ga=yO4weK-4bus`~eiMb*?n;~I zv&6c37}YW@ML*r)(vkIk^UZNDj6&z(_-CiMweW`V(31IKN2ELHmjz>w<2HP1Wy?ByPpP9ikJ? zJ2+V_^Ojx=R9G0yo>?Ap!jHoCdgH`|;y}wG~3Sl4Fj8 zbk-jD`VhRDDP#RmE`@jRwK6+1gLU=Fa-f;4+aj9n(me!XSSS-sp95K_hIk_7{<;pE zdTpP^6B{Yg5zW?9BBnkbAftk=oQ)xcfu|xOf(dfJCq$_7C?Jr123a!$qw{Wb|7bOa zL?aLr^99L0;Em=T1<79^=|HdugS12K`*&}@h*KuNV52@*G(~~6Y@E zXwaYyQe2*C8S?4QkmtH6Ny6vp5Hb)f07N27!Ou~?%`yFel#ht9B^8VhxI#mqH=obY z*D>@sj7E^&e8tSi+Xvj|5Ql^~UkVL0Fwbmt5BL}|a_Gd3#qZSf0sN@&GSc%2i0 zR0I|q3=9C|y@ZHRKPP0(%y*UD6k{bEwwSAm2cwt}!i}#hQe6f&<#$|T`yDr4obrDZ zN>KPz2Vc~JDosD0?#{!g-x03;$A{!W5VAbOh8$+9rL4S1#Bk)CKP!9$^8hPxchw0| zr!eu>S2Rynx(EhG-mVWn(Ts1@N(ee_%gAA@(HRa0x^H(-m3Z7bj80DGXB&VkF99bq zw7+f)eG)0(bq~A;{%|SJ`F(MEnb?*r=?uV^Tc~*I1)@khJ3E8!XMAr~1^1R8BoLOi zPR_1l_wb+4o|yAcx3IKv`YagL-tANPxg>X14poweY~M0Hsw8RECg`SS-pzynwXLqTOR zGuzw}X=#LS0?f0$6NK)z>-{-y0atF=@sFFVhDPE+C2s-xe&C1blC&CALg_DN1 z5|N&s;ad0MK9p}!Ur(Vb>rc1ME;ofopuZHbwqu|$1UUjYq|?6Q?y3%sOtCp!H8IZ8 zOZivf`|ZAQp+kp(g~94ElKsThf=LC#;DHizrFz>DXPhMP85(*VScYjBlrMRNdLWQa z>wK-^2gv`O$I5`i@Z+*E4DNaT^!xYl4@y744Oe6uAj3(N>*a=dXK{!qgw+|MGVaiu zMRe3EDM*ZgF$Mks{=WPYQ78WrUk(So&tg*uHK_M8l{iDkhuu^V$s`=+rz${$0U#qO zY5=yf8q4_z$Oyn*dyj8r0t>)L>cE)un~+BVC@G!=*e=1jQd0j@#b35bDwp>Qcu+%Q zq3<2}@__j0Tk1j<@jdf>b@DS35K9Ny&(8!23Nl`>T#`B8kj+!gPCqE1bJNkK)|sCw z?B|cs(T(R?M}*;}j6Ayk{CV&p)=vw~)xI>h$#hK>49>1H75zO#o)Zg-Q6WyEOok23 zJ~yW4aU?A?;WtjL_}vg{tw_OzaM|Rlyft?EqYCdCHyt)1(h}j5gvDYJlK!8B?ye*! zzZ&~LA}#a?4SsEbO)Eaa7V}^I+q8|0;gZX}7C6ntVW})Mp5cR1dlymwXTiueyK_x_ zG~L~Q&|JPY*eH7D#o*9jS>U;kD`!FS-%VCyDEPUv=!N z?s60t{yDsjYfkxh@KjRL(Oq**b7x{3mtA24#^5&XD9zl29vg|YBZX_#ibQFMXT#Q1 zVG_GHABwOa>D4T^iku>DtJ|!~Z=Qr$?Szw$%{m3Vq02Gjv%79;56y=b53iWR5A$h_ zk47kVFy)(Ose>E4mm~?cq*U$YiCPZ`zwwrSZsXEWt7A{BD?XKs-Gn(fJuaLm8{fv) zCm(BmNMwdDT$%atUa%1*iPsUCy08d&^sqcgiO6MwrqF!6c)ETU?fhogP8ljgJ6S}o zh}}BE)Y`m1^2^5-5m2TwAM@@A+1uBF(&mFmU`mOqtg?v*YMg8r4r(N5W0i-Kio=}| z>)pg^m0y<;vzOP>v$a-&rl<9Il|py)a_`>dhBiMd2%;z?aoS?qwr@G|_ANhcKuR`F z$&^<`A0jyX6eWjA6tAkgr5PblX>Q=h*R56px~5LM$a*acci)NBoll)-uYVFAXmP~|)KU(Ls>3O%bM;Dja z4;b1lC=@*RnRus<7He!}GB9?T$tT)3=^;oMuFOv{(_`|ql?CyHYtQkjVLQrqc{3Id zLCn+P&PqAatUFd|og|qOC;Ajl@M>-Njb6nob5qp)g%MNMy&bQ9@{EdJcO_aru5gd4 z;r5<^&xzm7eK7zZC0XA#azVe3Vf@vlci8;ddGW`7tvlz#fcmVrRYpdtVn=b6xmNzy zG_LUdGY7d*nPN9q)x%4SmaYjq&Qem0Uyc3jA&R8)GsnjN-?(ZW$ z!^f%eCL}Qw6PJ$e+sh{Wktw>i{}oB+28U|d-ro_-}hc_tv>)x}it!W;$Vtl#At(3${Dqmj5|3(wSo7o_uh1BpG z@d-wpqoyjPgRf`~O3uUag@a6*?`O+*s!t)KO!~CNOS*Qx@v6ZNO-v7=X~G{B6G_`c zK6HPSe6&#$>c<@@`sRJ*QQ*pR}Ysrm&%{}bK&;z)TZ9B%3b*V9+~-3-~z9q z=faMY?SZ{Ra{nY6h4mz8moStS0arZ5jH~$J`QZzY&R3cF&4CCO(2B)ib{xq$0!O#B__|YwJvAVeMmqd)EOk$&vSt* zipr#A;ESv8v6zORfj?z|6H{^6x zTY-OI)OE4R>k>?~200)OJ#HN0?LG=YEK+iGW0>Ax zmLVMqUi9#AC|r5UzK|Z^l+*R&OGyc& zY5)irND*lRIpZIZm63b_P#_5jC^38tCRjLten1HXGB~<8t}p;B9}b{glpjIJz{xBL z93bzS=nsHX8XW^b>m^!%LtUgN67VrJZ8T;P0BD>N@I31TMF(MIBHr*D>~*CM<40TdaS33q-dZu#A5hGxa}>Aa)KcS5C8=A`WOwTYchXQrD$boOMneW^ODx_ zkornH%{5wFVUtv0tEq{*;=B{F#{2S?gf(_)ma~2K%bn%WYwSHz_lb zs@!w6)x2!R5PVftK`c%jN;16B;y|7Q53K>ZYJv}atTdct(S0Aaz)M`pVZXXT@xT!V zWX%u}5yeB%u%VuY37=?`A41RP7J+mdklJ{E^T^Il%RWO8>E3fl5YBu@w`4+3Pftr1 zG2lJqD+=KOqJor!1cG?`5~TI&TFBxuX=$5Pg*M*F-Vx%@-A8?HH6JeWw5pAw3nZv4 z@=u>&I`Dr|G`)N6WYz|L`YCFCr$KR<(t`6u9{93`>4;%+2Us#VDhQ=A33VF-yRPKq z~{w$rbD$yW7}P3OF;Hv5?zFvgxXaE zF|t zgGz4S`{6{sy6YNFV{Z0`5PQ)~udqP)Jmzbgo;((UY^?WSb^1F?uclzXFDwe!C!G7l?!9>CDO^b>d?$1Uorl(yftk z(Nba~!5T>c#DuT8(Mn=y!uKs{e?}4>7e8P=T|9wj(oVbb-{CUnbzY~H=z}fy-?>t{s`7i zBX1oKmO%kHT!OeyV}!e7Z{uEDEzis8EDjaDUF=*kZjY0E?^vAO77rvB=%wR1mzw46 zQ^u$zYx4Wq^Gqg3S&g^D&w}EFk_~xKfwhnd=m^gKsnNRJ1fkrzNv+$%Y{%SJ{~w&dwA6{TzS&u-e7p_sBy{ zD0p#%ltgv(L?^~$_~>yqb)|1f!Y3#gGau<9B^636TbAGe1;a)8!fLv3YHg$aaL8^J zM^-XEQxsdAffbh%N{u!`&WrT>H6s0!Zb}!{Wm|Go$Jbh;!MTRhE_RFg8bfu1H4zOB z@8I~EXT@l89gt_z?&O&a8$W;4uSgH(r#n-EYZ_sp$hS&aZ)P;NF3Y8PYM`O(*SbH9 zRe#8)!&!Q_Tt!-DZxLR$FpeqQons;ML(HHSM;oILxRfV*=IdeQi5{>Y3VTcYaY0Oc-S<;!F+7t35J{M>^ynq${j6f zAlttvRBCa38vs>b;~ABHX=B4|$wh$_TiYQ{ol-6D#qV(@LKU?6zj0?yUY zskgSwr#euUzIS?*&q1$%LlYS|5yOkN>1uBp<{x+@)IS0zDGS2O!%)?t-c^{A+q*c+njoyc>iv$G4E#SYJ?wvASD;cT`L$6&&cH$eTq|3}W()itJq`C-SzTrJh3*xUBY?lGAn)w_35i%UzUBrVad z?QRI9HKN}-qL0XfDLxFlKSbBn@=0)vrvTJ4s5Z!I`;MQe;*l_!k4zL(d!WAW9d#PV zH)D$c`^A|Fo~SIZb5=TJ;#m8(%S)HG`?SOT$ahQ^huKuYuHVMF9Ub;ho@ab7NAlz7 zipBj5Je~>CSbfv5vAS9&Z_H#9ydO@%g`YQ#2%g(de@#DPDdvGe!nnk^if&{PH>u1W z9vFhR>%K1Q(8BS44C=$#4s4k&(+Do-vPcDFQ6$Az)!?TvrtVGp`^zn~0%3^#!tU7q zk@G|`xEoScLG;jh5!YP6GCuGAHq&#+(q*MlYwX-{F@@p7`)r>_y3U)EwNiEb6p(rO z)H~*G+Slog;jjG`qo4ND%Bu_NCj|67O2>^#O;{!_1mnkIj0=`%_GnHtVQ?{nZ>xf^cZ zZ!reHm2~J2jk#Prw3iuU#mfR`Rft+!mv?OFe)zBxzVqpfkdz<%{1+4Lc_4AW$l&Qi zmzDbg9nDzH^Ybt_`x4Xk_)_zVA3P%u06C|%Z?st#I5>WQJe{%`zBd2dU_WA6gTCr| zBM2--rolkzB4Nm&g3EN@Oz^r8ljP23)I@O@nO}6*omt^`F0Brj+iT&~+~RD{WUr8~ z|K_{d*c80*-TJ)F`(}1pmyVMy8F{|3j|1mI`L-|=H}f4zEpKhQ{XI3~M~^z}Uf084 zGw-UqPO7a8?^vC2Ihk%!%`@fgA9oZMmFE3SFiZ{wZV?8b<@=i1O3mVM6JaAz6-obzGtaFOSX2r!Gq{|1o>Y1eN|C`L6VH`75YoYcm z#D|sBIH;nvmDdT8a0GHbm@;iyoJF~HrZ6!xFA^*LRe;j?RrMUw+1AugX!voBHB+Jc z5>Hj1+m)SKKF6Z+1Z4qn`tPH0A$F$`L-_Ac1n(Z&IwSZkKq|e zp$R!uGu*+G`C&Vv__=*oD*XD<{fT*7ftWs^ILk{4@h8A@EZ`yWolP)myKyHtUb5Gk zf~;J_v$lN{QxdvrxZEw)XPMB>Zd5b37M{e$;_p8o}32)VSr4J62ozFuCCYS;rcEBY(lfa_UR7f67 zlkRu;O#xt*7P?PoRl>3}IzIJl4o{6PC%ooZ!eQPwD>nmy60A?k@5gT+RhauLS2gx& zAevb7ka2FvTl)jy`?fPY z?jQDkzV(D(q7a*N_?K~+63B=wTOwlW2f~DIa z1K5fLkUpddEYthOOEbsH>S~(nho1`F@t)lbqr-iAnp}Z?xBWr0uTiN<*4BUlONFK~ z3fZqey+4Z;UY2rSbxbE-IKiFK%R;QraqgVALK7C>78uryJyXEkeM^}`sK=s`%8A3N znvaymb`e1wGxgd}YFJI2YoVGa3-MfiYDuXT_k>xAOefysfN0dwPe+laF={t>bXGH> zzr3*{urk_T)2H^m;y&8bRKmGVuKPU$@gpzv8b?w?2bg!#rj~we&Faim&hxgFT3AUv zqfVqhUwlyVGtKa>utAlgiaY6!XK{JKKK7bBA6mK-26i7|Y-}+f>sfymx5q9-$D9yrrNx4AA7E<=~x!7uW zRk*=y5PQlT^GVYW#_=pg=rLOUZ<^J2VhGq4MSW>TlG^dHVt4LXft9t_bh&DqZox2& z%<_^l&&Ln+_3nA+z=9DV84^q&vogv=EV7iRZk;-~PDfY^=jHMExwov6cp)AXgZq$R zF~xem-!Q+Le(^s5HY6KB8Aqr!LUeF@^Xd9Q%lfWX+h|xnj&CU$h~^);1)C;scVP?w zcY_FUHx^53RWtw@0)&sxtvz@^)GY;wTvj&fIDjk+#Oq+DKd%8V1c=LXV+e^f0QrxS z$cpqHgw5xQvWFQ`zyHpD_;*b*Z>uy?>}|? zSRa%+6X{Whoh@Yrd{Q%jY41@#9M`sq5IzDk0%nMGAV)`oG3y35CjX1pdwqMh_pw$c zv3TeL9#^`?_bskOLa6Y+iu^^8`%b!Mu*(ui76)@@Z3om>`sZa|?1Ug0d?Z}U!j`n! zuE+33XE3Lc1PC7H?Cswg(4dIswkRMYfCe(p-15ICZvTmH4&jdoW5qg9G8(V{{FuB zz2i{yeo{gzDaTdSgx&r9p}omhMaO)%i0gnT)_^V{Cs%isxFwRU;L5~|T5)!(F;J^onkSD{=QY2`4 z>xbLhd&kN>(9n3cCC%&;;DpZTe5tXtjCBZnK*`@ey)nYi3b#LfF8?dw;H&T3V|xxF z7rJ$X?C)Q_x3#vmesaea?vk4?DA>!!$%EuVET@=Vttx(I;caq1v<~*))FF0fk=D`+ z2bMH8#t1#w5R9j?^V7nj0#vBRqg4_Pn;L*-i&qibTlE*sc1b52;a92yBNuFu!cxlg zppm-ijz!x;)e;?5KZJ%HU_0#rOFUm8y-B&*<7>CmPUJi`RH?s6@ZZ!7%IKhVa`Yq- z`|9-b3#8Ik&t~*yjhE1ho_2%`+q^$i;S$`uBCDZsSO{sdO%KDJ1tCCVDUl)d;(hR-CHLF zZiX-d;FRsu_mVfjjgFV(+9wwW6u^Ms0wtO(%+xV~J&g~99{?)=4p`Ypz{=L;V5dg_ zR(A9YMRVB9-rL3k+|bQF)9o1j2`29&yEjDTg<14zQXxu^`;zREjQu4;Mtn>2k|kVl zekJ@zO)6~a@n8k~CsL22GL%OJqvxHQilKM`EV^>>5W)zO4nR=%_osNFSu8NnVgo&+ z1Y|5(B2NI8#QzM8Fn&Bx43OUdGD|{30^a{nabSdI%`~Cs{aIO=$NRYu>qE$YnGf8u z?>x?>0MB2{u;EBRrhb7x#VO05zT`W5NMArvo&dm}Il^2>X#Qm%0D`obI43;fE0`A; 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%0DKPLW+Im5C5qin~f~-mm(riCV%a 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 F@ZTU;v{C>7 literal 47685 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 At^fc4 diff --git a/playbooks/Splunk_Notable_Related_Tickets_Search.py b/playbooks/Splunk_Notable_Related_Tickets_Search.py index 2b0c74c055..07d7f0061c 100644 --- a/playbooks/Splunk_Notable_Related_Tickets_Search.py +++ b/playbooks/Splunk_Notable_Related_Tickets_Search.py @@ -82,7 +82,7 @@ def search_notables(action=None, success=None, container=None, results=None, han ## Custom Code End ################################################################################ - phantom.act("run query", parameters=parameters, name="search_notables", assets=["splunk"], callback=process_results) + phantom.act("run query", parameters=parameters, name="search_notables", assets=["splunk"], callback=search_results_filter) return @@ -147,15 +147,15 @@ def build_output(action=None, success=None, container=None, results=None, handle observable_object = { "value": key, "ticket": { - "name": result["search_name"], - "id": result["event_id"], + "name": result['rule_title'] if result.get('rule_title') else result.get("search_name"), + "id": result.get("event_id"), "number": result.get("notable_xref_id"), - "message": result["savedsearch_description"], - "start_time": result["_time"], + "message": result['rule_description'] if result.get("rule_description") else result.get("savedsearch_description"), + "start_time": result.get("_time"), "end_time": "", - "assigned_to": result["owner"], + "assigned_to": result.get("owner"), "creator_name": "", - "state": result["status_label"], + "state": result.get("status_label"), "notes": [], "comments": comments }, @@ -163,15 +163,15 @@ def build_output(action=None, success=None, container=None, results=None, handle "source": "Splunk Enterprise Security" } build_output__observable_array.append(observable_object) - build_output__name.append(result["search_name"]) - build_output__id.append(result["event_id"]) + build_output__name.append(result.get("search_name")) + build_output__id.append(result.get("event_id")) build_output__number.append(result.get("notable_xref_id")) - build_output__message.append(result["savedsearch_description"]) - build_output__start_time.append(result["_time"]) + build_output__message.append(result.get("savedsearch_description")) + build_output__start_time.append(result.get("_time")) build_output__end_time.append("") - build_output__assignee.append(result["owner"]) + build_output__assignee.append(result.get("owner")) build_output__creator_name.append("") - build_output__state.append(result["status_label"]) + build_output__state.append(result.get("status_label")) build_output__notes.append([]) build_output__comments.append(comments) @@ -277,10 +277,10 @@ def process_results(action=None, success=None, container=None, results=None, han ################################################################################ filtered_input_0_search_term = phantom.collect2(container=container, datapath=["filtered-data:input_filter:condition_1:playbook_input:search_term"]) - search_notables_result_data = phantom.collect2(container=container, datapath=["search_notables:action_result.data"], action_results=results) + filtered_result_0_data_search_results_filter = phantom.collect2(container=container, datapath=["filtered-data:search_results_filter:condition_1:search_notables:action_result.data"]) filtered_input_0_search_term_values = [item[0] for item in filtered_input_0_search_term] - search_notables_result_item_0 = [item[0] for item in search_notables_result_data] + filtered_result_0_data = [item[0] for item in filtered_result_0_data_search_results_filter] process_results__output = None @@ -291,7 +291,7 @@ def process_results(action=None, success=None, container=None, results=None, han process_results__output = {} for search_term in filtered_input_0_search_term_values: process_results__output[search_term] = [] - for result in search_notables_result_item_0: + for result in filtered_result_0_data: if not isinstance(result, list): list_result = [result] else: @@ -317,6 +317,29 @@ def process_results(action=None, success=None, container=None, results=None, han return +@phantom.playbook_block() +def search_results_filter(action=None, success=None, container=None, results=None, handle=None, filtered_artifacts=None, filtered_results=None, custom_function=None, **kwargs): + phantom.debug("search_results_filter() called") + + ################################################################################ + # Determine if search results exist from the previous query. + ################################################################################ + + # collect filtered artifact ids and results for 'if' condition 1 + matched_artifacts_1, matched_results_1 = phantom.condition( + container=container, + conditions=[ + ["search_notables:action_result.summary.total_events", ">", 0] + ], + name="search_results_filter:condition_1") + + # call connected blocks if filtered artifacts or results + if matched_artifacts_1 or matched_results_1: + process_results(action=action, success=success, container=container, results=results, handle=handle, filtered_artifacts=matched_artifacts_1, filtered_results=matched_results_1) + + return + + @phantom.playbook_block() def on_finish(container, summary): phantom.debug("on_finish() called")