From 04e528b3b152e468cd6322f1b5bf3e5691ec0b16 Mon Sep 17 00:00:00 2001 From: noah Date: Fri, 24 Mar 2023 14:04:59 -0500 Subject: [PATCH] Creating separate nm for sync xps with shared fact names --- CG_Files/Employee_A/sync_dmca.nm | 16 +++++ CG_Files/Employee_A/sync_dmca.xp | 16 ++--- CG_Files/Employee_AB/sync_dmca.nm | 29 ++++++++ CG_Files/Employee_AB/sync_dmca.xp | 36 +++++----- CG_Files/Employee_ABC/sync_dmca.nm | 48 +++++++++++++ CG_Files/Employee_ABC/sync_dmca.xp | 68 +++++++++--------- CG_Files/Employee_AC/sync_dmca.nm | 35 +++++++++ CG_Files/Employee_AC/sync_dmca.xp | 48 ++++++------- CG_Files/Employee_B/sync_dmca.nm | 18 +++++ CG_Files/Employee_B/sync_dmca.xp | 20 +++--- CG_Files/Employee_BC/sync_dmca.nm | 37 ++++++++++ CG_Files/Employee_BC/sync_dmca.xp | 52 +++++++------- CG_Files/Employee_C/sync_dmca.nm | 24 +++++++ CG_Files/Employee_C/sync_dmca.xp | 32 ++++----- .../Schrick-Noah_AG-CG-SyncFire_Revised.tex | 51 ++++++++++++- data/.~lock.data.xlsx# | 1 + data/data.xlsx | Bin 0 -> 27635 bytes 17 files changed, 394 insertions(+), 137 deletions(-) create mode 100644 CG_Files/Employee_A/sync_dmca.nm create mode 100644 CG_Files/Employee_AB/sync_dmca.nm create mode 100644 CG_Files/Employee_ABC/sync_dmca.nm create mode 100644 CG_Files/Employee_AC/sync_dmca.nm create mode 100644 CG_Files/Employee_B/sync_dmca.nm create mode 100644 CG_Files/Employee_BC/sync_dmca.nm create mode 100644 CG_Files/Employee_C/sync_dmca.nm create mode 100644 data/.~lock.data.xlsx# create mode 100644 data/data.xlsx diff --git a/CG_Files/Employee_A/sync_dmca.nm b/CG_Files/Employee_A/sync_dmca.nm new file mode 100644 index 0000000..1a0f91f --- /dev/null +++ b/CG_Files/Employee_A/sync_dmca.nm @@ -0,0 +1,16 @@ +network model = + assets: + torrent_prog_A; + illicit_sw_A_1; + illicit_sw_A_2; + illicit_sw_A_3; + + facts: + quality:torrent_prog_A,A_is_installed=true; + + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; + + topology:illicit_sw_A_2->illicit_sw_A_3,org; +. diff --git a/CG_Files/Employee_A/sync_dmca.xp b/CG_Files/Employee_A/sync_dmca.xp index a08ef81..f9aeb6b 100644 --- a/CG_Files/Employee_A/sync_dmca.xp +++ b/CG_Files/Employee_A/sync_dmca.xp @@ -1,12 +1,12 @@ uninstall group exploit remove_all_A(torrent_prog_A,illicit_sw_A_1,illicit_sw_A_2,illicit_sw_A_3)= preconditions: - quality:torrent_prog_A,prog_A_is_installed=true; - quality:illicit_sw_A_1,sw_A_1_is_installed=true; - quality:illicit_sw_A_2,sw_A_2_is_installed=true; - quality:illicit_sw_A_3,sw_A_3_is_installed=true; + quality:torrent_prog_A,A_is_installed=true; + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; postconditions: - update quality:torrent_prog_A,prog_A_is_installed=false; - update quality:illicit_sw_A_1,sw_A_1_is_installed=false; - update quality:illicit_sw_A_2,sw_A_2_is_installed=false; - update quality:illicit_sw_A_3,sw_A_3_is_installed=false; + update quality:torrent_prog_A,A_is_installed=false; + update quality:illicit_sw_A_1,A_is_installed=false; + update quality:illicit_sw_A_2,A_is_installed=false; + update quality:illicit_sw_A_3,A_is_installed=false; . diff --git a/CG_Files/Employee_AB/sync_dmca.nm b/CG_Files/Employee_AB/sync_dmca.nm new file mode 100644 index 0000000..9ac7d3f --- /dev/null +++ b/CG_Files/Employee_AB/sync_dmca.nm @@ -0,0 +1,29 @@ +network model = + assets: + torrent_prog_B; + illicit_sw_B_1; + illicit_sw_B_2; + illicit_sw_B_3; + illicit_sw_B_4; + + torrent_prog_A; + illicit_sw_A_1; + illicit_sw_A_2; + illicit_sw_A_3; + + facts: + quality:torrent_prog_B,B_is_installed=true; + + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; + + quality:torrent_prog_A,A_is_installed=true; + + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; + + topology:illicit_sw_B_3->illicit_sw_B_4,org; +. diff --git a/CG_Files/Employee_AB/sync_dmca.xp b/CG_Files/Employee_AB/sync_dmca.xp index fc1eace..ef53891 100644 --- a/CG_Files/Employee_AB/sync_dmca.xp +++ b/CG_Files/Employee_AB/sync_dmca.xp @@ -1,28 +1,28 @@ uninstall group exploit remove_all_B(torrent_prog_B,illicit_sw_B_1,illicit_sw_B_2,illicit_sw_B_3,illicit_sw_B_4)= preconditions: - quality:torrent_prog_B,prog_B_is_installed=true; - quality:illicit_sw_B_1,sw_B_1_is_installed=true; - quality:illicit_sw_B_2,sw_B_2_is_installed=true; - quality:illicit_sw_B_3,sw_B_3_is_installed=true; - quality:illicit_sw_B_4,sw_B_4_is_installed=true; + quality:torrent_prog_B,B_is_installed=true; + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; postconditions: - update quality:torrent_prog_B,prog_B_is_installed=false; - update quality:illicit_sw_B_1,sw_B_1_is_installed=false; - update quality:illicit_sw_B_2,sw_B_2_is_installed=false; - update quality:illicit_sw_B_3,sw_B_3_is_installed=false; - update quality:illicit_sw_B_4,sw_B_4_is_installed=false; + update quality:torrent_prog_B,B_is_installed=false; + update quality:illicit_sw_B_1,B_is_installed=false; + update quality:illicit_sw_B_2,B_is_installed=false; + update quality:illicit_sw_B_3,B_is_installed=false; + update quality:illicit_sw_B_4,B_is_installed=false; . uninstall group exploit remove_all_A(torrent_prog_A,illicit_sw_A_1,illicit_sw_A_2,illicit_sw_A_3)= preconditions: - quality:torrent_prog_A,prog_A_is_installed=true; - quality:illicit_sw_A_1,sw_A_1_is_installed=true; - quality:illicit_sw_A_2,sw_A_2_is_installed=true; - quality:illicit_sw_A_3,sw_A_3_is_installed=true; + quality:torrent_prog_A,A_is_installed=true; + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; postconditions: - update quality:torrent_prog_A,prog_A_is_installed=false; - update quality:illicit_sw_A_1,sw_A_1_is_installed=false; - update quality:illicit_sw_A_2,sw_A_2_is_installed=false; - update quality:illicit_sw_A_3,sw_A_3_is_installed=false; + update quality:torrent_prog_A,A_is_installed=false; + update quality:illicit_sw_A_1,A_is_installed=false; + update quality:illicit_sw_A_2,A_is_installed=false; + update quality:illicit_sw_A_3,A_is_installed=false; . diff --git a/CG_Files/Employee_ABC/sync_dmca.nm b/CG_Files/Employee_ABC/sync_dmca.nm new file mode 100644 index 0000000..e7eac67 --- /dev/null +++ b/CG_Files/Employee_ABC/sync_dmca.nm @@ -0,0 +1,48 @@ +network model = + assets: + torrent_prog_B; + illicit_sw_B_1; + illicit_sw_B_2; + illicit_sw_B_3; + illicit_sw_B_4; + + torrent_prog_A; + illicit_sw_A_1; + illicit_sw_A_2; + illicit_sw_A_3; + + torrent_prog_C; + illicit_sw_C_1; + illicit_sw_C_2; + illicit_sw_C_3; + illicit_sw_C_4; + illicit_sw_C_5; + illicit_sw_C_6; + illicit_sw_C_7; + + facts: + quality:torrent_prog_B,B_is_installed=true; + + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; + + quality:torrent_prog_A,A_is_installed=true; + + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; + + quality:torrent_prog_C,C_is_installed=true; + + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; + + topology:illicit_sw_B_3->illicit_sw_B_4,org; +. diff --git a/CG_Files/Employee_ABC/sync_dmca.xp b/CG_Files/Employee_ABC/sync_dmca.xp index 5d3b979..cc9c41b 100644 --- a/CG_Files/Employee_ABC/sync_dmca.xp +++ b/CG_Files/Employee_ABC/sync_dmca.xp @@ -1,48 +1,48 @@ uninstall group exploit remove_all_B(torrent_prog_B,illicit_sw_B_1,illicit_sw_B_2,illicit_sw_B_3,illicit_sw_B_4)= preconditions: - quality:torrent_prog_B,prog_B_is_installed=true; - quality:illicit_sw_B_1,sw_B_1_is_installed=true; - quality:illicit_sw_B_2,sw_B_2_is_installed=true; - quality:illicit_sw_B_3,sw_B_3_is_installed=true; - quality:illicit_sw_B_4,sw_B_4_is_installed=true; + quality:torrent_prog_B,B_is_installed=true; + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; postconditions: - update quality:torrent_prog_B,prog_B_is_installed=false; - update quality:illicit_sw_B_1,sw_B_1_is_installed=false; - update quality:illicit_sw_B_2,sw_B_2_is_installed=false; - update quality:illicit_sw_B_3,sw_B_3_is_installed=false; - update quality:illicit_sw_B_4,sw_B_4_is_installed=false; + update quality:torrent_prog_B,B_is_installed=false; + update quality:illicit_sw_B_1,B_is_installed=false; + update quality:illicit_sw_B_2,B_is_installed=false; + update quality:illicit_sw_B_3,B_is_installed=false; + update quality:illicit_sw_B_4,B_is_installed=false; . uninstall group exploit remove_all_A(torrent_prog_A,illicit_sw_A_1,illicit_sw_A_2,illicit_sw_A_3)= preconditions: - quality:torrent_prog_A,prog_A_is_installed=true; - quality:illicit_sw_A_1,sw_A_1_is_installed=true; - quality:illicit_sw_A_2,sw_A_2_is_installed=true; - quality:illicit_sw_A_3,sw_A_3_is_installed=true; + quality:torrent_prog_A,A_is_installed=true; + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; postconditions: - update quality:torrent_prog_A,prog_A_is_installed=false; - update quality:illicit_sw_A_1,sw_A_1_is_installed=false; - update quality:illicit_sw_A_2,sw_A_2_is_installed=false; - update quality:illicit_sw_A_3,sw_A_3_is_installed=false; + update quality:torrent_prog_A,A_is_installed=false; + update quality:illicit_sw_A_1,A_is_installed=false; + update quality:illicit_sw_A_2,A_is_installed=false; + update quality:illicit_sw_A_3,A_is_installed=false; . uninstall group exploit remove_all_C(torrent_prog_C,illicit_sw_C_1,illicit_sw_C_2,illicit_sw_C_3,illicit_sw_C_4,illicit_sw_C_5,illicit_sw_C_6,illicit_sw_C_7)= preconditions: - quality:torrent_prog_C,prog_C_is_installed=true; - quality:illicit_sw_C_1,sw_C_1_is_installed=true; - quality:illicit_sw_C_2,sw_C_2_is_installed=true; - quality:illicit_sw_C_3,sw_C_3_is_installed=true; - quality:illicit_sw_C_4,sw_C_4_is_installed=true; - quality:illicit_sw_C_5,sw_C_5_is_installed=true; - quality:illicit_sw_C_6,sw_C_6_is_installed=true; - quality:illicit_sw_C_7,sw_C_7_is_installed=true; + quality:torrent_prog_C,C_is_installed=true; + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; postconditions: - update quality:torrent_prog_C,prog_C_is_installed=false; - update quality:illicit_sw_C_1,sw_C_1_is_installed=false; - update quality:illicit_sw_C_2,sw_C_2_is_installed=false; - update quality:illicit_sw_C_3,sw_C_3_is_installed=false; - update quality:illicit_sw_C_4,sw_C_4_is_installed=false; - update quality:illicit_sw_C_5,sw_C_5_is_installed=false; - update quality:illicit_sw_C_6,sw_C_6_is_installed=false; - update quality:illicit_sw_C_7,sw_C_7_is_installed=false; + update quality:torrent_prog_C,C_is_installed=false; + update quality:illicit_sw_C_1,C_is_installed=false; + update quality:illicit_sw_C_2,C_is_installed=false; + update quality:illicit_sw_C_3,C_is_installed=false; + update quality:illicit_sw_C_4,C_is_installed=false; + update quality:illicit_sw_C_5,C_is_installed=false; + update quality:illicit_sw_C_6,C_is_installed=false; + update quality:illicit_sw_C_7,C_is_installed=false; . diff --git a/CG_Files/Employee_AC/sync_dmca.nm b/CG_Files/Employee_AC/sync_dmca.nm new file mode 100644 index 0000000..9d38eac --- /dev/null +++ b/CG_Files/Employee_AC/sync_dmca.nm @@ -0,0 +1,35 @@ +network model = + assets: + torrent_prog_C; + illicit_sw_C_1; + illicit_sw_C_2; + illicit_sw_C_3; + illicit_sw_C_4; + illicit_sw_C_5; + illicit_sw_C_6; + illicit_sw_C_7; + + torrent_prog_A; + illicit_sw_A_1; + illicit_sw_A_2; + illicit_sw_A_3; + + facts: + quality:torrent_prog_C,C_is_installed=true; + + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; + + quality:torrent_prog_A,A_is_installed=true; + + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; + + topology:illicit_sw_C_6->illicit_sw_C_7,org; +. diff --git a/CG_Files/Employee_AC/sync_dmca.xp b/CG_Files/Employee_AC/sync_dmca.xp index 4fb1c27..cbc0edd 100644 --- a/CG_Files/Employee_AC/sync_dmca.xp +++ b/CG_Files/Employee_AC/sync_dmca.xp @@ -1,34 +1,34 @@ uninstall group exploit remove_all_C(torrent_prog_C,illicit_sw_C_1,illicit_sw_C_2,illicit_sw_C_3,illicit_sw_C_4,illicit_sw_C_5,illicit_sw_C_6,illicit_sw_C_7)= preconditions: - quality:torrent_prog_C,prog_C_is_installed=true; - quality:illicit_sw_C_1,sw_C_1_is_installed=true; - quality:illicit_sw_C_2,sw_C_2_is_installed=true; - quality:illicit_sw_C_3,sw_C_3_is_installed=true; - quality:illicit_sw_C_4,sw_C_4_is_installed=true; - quality:illicit_sw_C_5,sw_C_5_is_installed=true; - quality:illicit_sw_C_6,sw_C_6_is_installed=true; - quality:illicit_sw_C_7,sw_C_7_is_installed=true; + quality:torrent_prog_C,C_is_installed=true; + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; postconditions: - update quality:torrent_prog_C,prog_C_is_installed=false; - update quality:illicit_sw_C_1,sw_C_1_is_installed=false; - update quality:illicit_sw_C_2,sw_C_2_is_installed=false; - update quality:illicit_sw_C_3,sw_C_3_is_installed=false; - update quality:illicit_sw_C_4,sw_C_4_is_installed=false; - update quality:illicit_sw_C_5,sw_C_5_is_installed=false; - update quality:illicit_sw_C_6,sw_C_6_is_installed=false; - update quality:illicit_sw_C_7,sw_C_7_is_installed=false; + update quality:torrent_prog_C,C_is_installed=false; + update quality:illicit_sw_C_1,C_is_installed=false; + update quality:illicit_sw_C_2,C_is_installed=false; + update quality:illicit_sw_C_3,C_is_installed=false; + update quality:illicit_sw_C_4,C_is_installed=false; + update quality:illicit_sw_C_5,C_is_installed=false; + update quality:illicit_sw_C_6,C_is_installed=false; + update quality:illicit_sw_C_7,C_is_installed=false; . uninstall group exploit remove_all_A(torrent_prog_A,illicit_sw_A_1,illicit_sw_A_2,illicit_sw_A_3)= preconditions: - quality:torrent_prog_A,prog_A_is_installed=true; - quality:illicit_sw_A_1,sw_A_1_is_installed=true; - quality:illicit_sw_A_2,sw_A_2_is_installed=true; - quality:illicit_sw_A_3,sw_A_3_is_installed=true; + quality:torrent_prog_A,A_is_installed=true; + quality:illicit_sw_A_1,A_is_installed=true; + quality:illicit_sw_A_2,A_is_installed=true; + quality:illicit_sw_A_3,A_is_installed=true; postconditions: - update quality:torrent_prog_A,prog_A_is_installed=false; - update quality:illicit_sw_A_1,sw_A_1_is_installed=false; - update quality:illicit_sw_A_2,sw_A_2_is_installed=false; - update quality:illicit_sw_A_3,sw_A_3_is_installed=false; + update quality:torrent_prog_A,A_is_installed=false; + update quality:illicit_sw_A_1,A_is_installed=false; + update quality:illicit_sw_A_2,A_is_installed=false; + update quality:illicit_sw_A_3,A_is_installed=false; . diff --git a/CG_Files/Employee_B/sync_dmca.nm b/CG_Files/Employee_B/sync_dmca.nm new file mode 100644 index 0000000..7ffbfe2 --- /dev/null +++ b/CG_Files/Employee_B/sync_dmca.nm @@ -0,0 +1,18 @@ +network model = + assets: + torrent_prog_B; + illicit_sw_B_1; + illicit_sw_B_2; + illicit_sw_B_3; + illicit_sw_B_4; + + facts: + quality:torrent_prog_B,B_is_installed=true; + + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; + + topology:illicit_sw_B_3->illicit_sw_B_4,org; +. diff --git a/CG_Files/Employee_B/sync_dmca.xp b/CG_Files/Employee_B/sync_dmca.xp index ac86942..54a70ce 100644 --- a/CG_Files/Employee_B/sync_dmca.xp +++ b/CG_Files/Employee_B/sync_dmca.xp @@ -1,14 +1,14 @@ uninstall group exploit remove_all_B(torrent_prog_B,illicit_sw_B_1,illicit_sw_B_2,illicit_sw_B_3,illicit_sw_B_4)= preconditions: - quality:torrent_prog_B,prog_B_is_installed=true; - quality:illicit_sw_B_1,sw_B_1_is_installed=true; - quality:illicit_sw_B_2,sw_B_2_is_installed=true; - quality:illicit_sw_B_3,sw_B_3_is_installed=true; - quality:illicit_sw_B_4,sw_B_4_is_installed=true; + quality:torrent_prog_B,B_is_installed=true; + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; postconditions: - update quality:torrent_prog_B,prog_B_is_installed=false; - update quality:illicit_sw_B_1,sw_B_1_is_installed=false; - update quality:illicit_sw_B_2,sw_B_2_is_installed=false; - update quality:illicit_sw_B_3,sw_B_3_is_installed=false; - update quality:illicit_sw_B_4,sw_B_4_is_installed=false; + update quality:torrent_prog_B,B_is_installed=false; + update quality:illicit_sw_B_1,B_is_installed=false; + update quality:illicit_sw_B_2,B_is_installed=false; + update quality:illicit_sw_B_3,B_is_installed=false; + update quality:illicit_sw_B_4,B_is_installed=false; . diff --git a/CG_Files/Employee_BC/sync_dmca.nm b/CG_Files/Employee_BC/sync_dmca.nm new file mode 100644 index 0000000..7c009ea --- /dev/null +++ b/CG_Files/Employee_BC/sync_dmca.nm @@ -0,0 +1,37 @@ +network model = + assets: + torrent_prog_C; + illicit_sw_C_1; + illicit_sw_C_2; + illicit_sw_C_3; + illicit_sw_C_4; + illicit_sw_C_5; + illicit_sw_C_6; + illicit_sw_C_7; + + torrent_prog_B; + illicit_sw_B_1; + illicit_sw_B_2; + illicit_sw_B_3; + illicit_sw_B_4; + + facts: + quality:torrent_prog_C,C_is_installed=true; + + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; + + quality:torrent_prog_B,B_is_installed=true; + + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; + + topology:illicit_sw_C_6->illicit_sw_C_7,org; +. diff --git a/CG_Files/Employee_BC/sync_dmca.xp b/CG_Files/Employee_BC/sync_dmca.xp index 831c18b..30601a3 100644 --- a/CG_Files/Employee_BC/sync_dmca.xp +++ b/CG_Files/Employee_BC/sync_dmca.xp @@ -1,36 +1,36 @@ uninstall group exploit remove_all_C(torrent_prog_C,illicit_sw_C_1,illicit_sw_C_2,illicit_sw_C_3,illicit_sw_C_4,illicit_sw_C_5,illicit_sw_C_6,illicit_sw_C_7)= preconditions: - quality:torrent_prog_C,prog_C_is_installed=true; - quality:illicit_sw_C_1,sw_C_1_is_installed=true; - quality:illicit_sw_C_2,sw_C_2_is_installed=true; - quality:illicit_sw_C_3,sw_C_3_is_installed=true; - quality:illicit_sw_C_4,sw_C_4_is_installed=true; - quality:illicit_sw_C_5,sw_C_5_is_installed=true; - quality:illicit_sw_C_6,sw_C_6_is_installed=true; - quality:illicit_sw_C_7,sw_C_7_is_installed=true; + quality:torrent_prog_C,C_is_installed=true; + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; postconditions: - update quality:torrent_prog_C,prog_C_is_installed=false; - update quality:illicit_sw_C_1,sw_C_1_is_installed=false; - update quality:illicit_sw_C_2,sw_C_2_is_installed=false; - update quality:illicit_sw_C_3,sw_C_3_is_installed=false; - update quality:illicit_sw_C_4,sw_C_4_is_installed=false; - update quality:illicit_sw_C_5,sw_C_5_is_installed=false; - update quality:illicit_sw_C_6,sw_C_6_is_installed=false; - update quality:illicit_sw_C_7,sw_C_7_is_installed=false; + update quality:torrent_prog_C,C_is_installed=false; + update quality:illicit_sw_C_1,C_is_installed=false; + update quality:illicit_sw_C_2,C_is_installed=false; + update quality:illicit_sw_C_3,C_is_installed=false; + update quality:illicit_sw_C_4,C_is_installed=false; + update quality:illicit_sw_C_5,C_is_installed=false; + update quality:illicit_sw_C_6,C_is_installed=false; + update quality:illicit_sw_C_7,C_is_installed=false; . uninstall group exploit remove_all_B(torrent_prog_B,illicit_sw_B_1,illicit_sw_B_2,illicit_sw_B_3,illicit_sw_B_4)= preconditions: - quality:torrent_prog_B,prog_B_is_installed=true; - quality:illicit_sw_B_1,sw_B_1_is_installed=true; - quality:illicit_sw_B_2,sw_B_2_is_installed=true; - quality:illicit_sw_B_3,sw_B_3_is_installed=true; - quality:illicit_sw_B_4,sw_B_4_is_installed=true; + quality:torrent_prog_B,B_is_installed=true; + quality:illicit_sw_B_1,B_is_installed=true; + quality:illicit_sw_B_2,B_is_installed=true; + quality:illicit_sw_B_3,B_is_installed=true; + quality:illicit_sw_B_4,B_is_installed=true; postconditions: - update quality:torrent_prog_B,prog_B_is_installed=false; - update quality:illicit_sw_B_1,sw_B_1_is_installed=false; - update quality:illicit_sw_B_2,sw_B_2_is_installed=false; - update quality:illicit_sw_B_3,sw_B_3_is_installed=false; - update quality:illicit_sw_B_4,sw_B_4_is_installed=false; + update quality:torrent_prog_B,B_is_installed=false; + update quality:illicit_sw_B_1,B_is_installed=false; + update quality:illicit_sw_B_2,B_is_installed=false; + update quality:illicit_sw_B_3,B_is_installed=false; + update quality:illicit_sw_B_4,B_is_installed=false; . diff --git a/CG_Files/Employee_C/sync_dmca.nm b/CG_Files/Employee_C/sync_dmca.nm new file mode 100644 index 0000000..7b51e26 --- /dev/null +++ b/CG_Files/Employee_C/sync_dmca.nm @@ -0,0 +1,24 @@ +network model = + assets: + torrent_prog_C; + illicit_sw_C_1; + illicit_sw_C_2; + illicit_sw_C_3; + illicit_sw_C_4; + illicit_sw_C_5; + illicit_sw_C_6; + illicit_sw_C_7; + + facts: + quality:torrent_prog_C,C_is_installed=true; + + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; + + topology:illicit_sw_C_6->illicit_sw_C_7,org; +. diff --git a/CG_Files/Employee_C/sync_dmca.xp b/CG_Files/Employee_C/sync_dmca.xp index a14006a..1a9f759 100644 --- a/CG_Files/Employee_C/sync_dmca.xp +++ b/CG_Files/Employee_C/sync_dmca.xp @@ -1,20 +1,20 @@ uninstall group exploit remove_all_C(torrent_prog_C,illicit_sw_C_1,illicit_sw_C_2,illicit_sw_C_3,illicit_sw_C_4,illicit_sw_C_5,illicit_sw_C_6,illicit_sw_C_7)= preconditions: - quality:torrent_prog_C,prog_C_is_installed=true; - quality:illicit_sw_C_1,sw_C_1_is_installed=true; - quality:illicit_sw_C_2,sw_C_2_is_installed=true; - quality:illicit_sw_C_3,sw_C_3_is_installed=true; - quality:illicit_sw_C_4,sw_C_4_is_installed=true; - quality:illicit_sw_C_5,sw_C_5_is_installed=true; - quality:illicit_sw_C_6,sw_C_6_is_installed=true; - quality:illicit_sw_C_7,sw_C_7_is_installed=true; + quality:torrent_prog_C,C_is_installed=true; + quality:illicit_sw_C_1,C_is_installed=true; + quality:illicit_sw_C_2,C_is_installed=true; + quality:illicit_sw_C_3,C_is_installed=true; + quality:illicit_sw_C_4,C_is_installed=true; + quality:illicit_sw_C_5,C_is_installed=true; + quality:illicit_sw_C_6,C_is_installed=true; + quality:illicit_sw_C_7,C_is_installed=true; postconditions: - update quality:torrent_prog_C,prog_C_is_installed=false; - update quality:illicit_sw_C_1,sw_C_1_is_installed=false; - update quality:illicit_sw_C_2,sw_C_2_is_installed=false; - update quality:illicit_sw_C_3,sw_C_3_is_installed=false; - update quality:illicit_sw_C_4,sw_C_4_is_installed=false; - update quality:illicit_sw_C_5,sw_C_5_is_installed=false; - update quality:illicit_sw_C_6,sw_C_6_is_installed=false; - update quality:illicit_sw_C_7,sw_C_7_is_installed=false; + update quality:torrent_prog_C,C_is_installed=false; + update quality:illicit_sw_C_1,C_is_installed=false; + update quality:illicit_sw_C_2,C_is_installed=false; + update quality:illicit_sw_C_3,C_is_installed=false; + update quality:illicit_sw_C_4,C_is_installed=false; + update quality:illicit_sw_C_5,C_is_installed=false; + update quality:illicit_sw_C_6,C_is_installed=false; + update quality:illicit_sw_C_7,C_is_installed=false; . diff --git a/OJ_Template/First Revise and Resubmit/Schrick-Noah_AG-CG-SyncFire_Revised.tex b/OJ_Template/First Revise and Resubmit/Schrick-Noah_AG-CG-SyncFire_Revised.tex index eef5e85..b26a253 100644 --- a/OJ_Template/First Revise and Resubmit/Schrick-Noah_AG-CG-SyncFire_Revised.tex +++ b/OJ_Template/First Revise and Resubmit/Schrick-Noah_AG-CG-SyncFire_Revised.tex @@ -195,7 +195,7 @@ The compliance checks are as follows: \end{itemize} \subsubsection{DMCA Takedown} -A second example of synchronous firing is illustrated through a DMCA Takedown for a fictitious organization \cite{DMCA}. In this example, a DMCA Takedown is issued to an organization after a group of employees were found to be engaging in online piracy with torrenting software on company devices and using company resources. Detection and removal of illicit data, such as through means presented by the authors of \cite{Piracy} for Windows or \cite{Android_Piracy} for company-supplied Android mobile devices, can be incorporated into and represented by a compliance graph. +A second example of synchronous firing is illustrated through a DMCA Takedown for a fictitious organization \cite{DMCA}. In this example, a DMCA Takedown is issued to an organization after a group of employees were found to be engaging in online piracy with torrenting software on company devices and while using company resources. Detection and removal of illicit data, such as through means presented by the authors of \cite{Piracy} for Windows or \cite{Android_Piracy} for company-supplied Android mobile devices, can be incorporated into and represented by a compliance graph. Only the subset of the organization's network which contains the illicit data is used for this example. The graph generation process walks through as a system administrator removes the torrenting software and the illicit data from the company devices. When removing torrenting software, the data associated with the torrenting program can be removed at the same time; an administrator does not need to remove the torrenting program and then separately remove the data. This example highlights the capability of synchronous firing by grouping the removal of software and data together, as opposed to traditional attack and compliance graphs requiring at least two separate steps to remove the software and data. @@ -377,6 +377,55 @@ Leveraging comprehensive services with synchronous firing enables users to signi \subsubsection{Results for the DMCA Takedown Environment} \label{sec:dmca_res} Using the experimental setup described in Section \ref{sec:test-platform} on the platform described at the beginning of Section \ref{sec:test-platform}, results were collected in regards to the effect of synchronous firing on both state space and runtime. The graphs' edge to state ratio (E/S Ratio) was computed as well. +\begin{table}[htp] + \caption{Results for the Non-Synchronous Firing Testing} + \label{table:DMCA-NS-Table} + \centering + \setlength\tabcolsep{4pt} + \begin{tabular}{|c|c|c|c|c|} + \hline + \multicolumn{5}{|c|}{Non-Synchronous Firing} \\ \hline + \textbf{\begin{tabular}[c]{@{}c@{}}Employees \\ Present\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Number of \\ States\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Number of \\ Edges\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Runtime\\ (ms)\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}E/S\\ Ratio\end{tabular}} + \\ \hline + A & 16 & 128 & 16.334 & 8.000 \\ \hline + B & 32 & 400 & 42.791 & 12.500 \\ \hline + C & 256 & 6144 & 1754.768 & 24.000 \\ \hline + AB & 512 & 13824 & 1942.736 & 27.000 \\ \hline + AC & 4096 & 147456 & 27962.078 & 36.000 \\ \hline + BC & 8192 & 319488 & 66394.759 & 39.000 \\ \hline + ABC & 131072 & 6684672 & 1940664.745 & 51.000 \\ \hline + \end{tabular} +\end{table} + +\begin{table}[htp] + \caption{Results for the Synchronous Firing Testing} + \label{table:DMCA-S-Table} + \centering + \setlength\tabcolsep{4pt} + \begin{tabular}{|c|c|c|c|c|c|} + \hline + \multicolumn{6}{|c|}{Synchronous Firing} \\ \hline + \textbf{\begin{tabular}[c]{@{}c@{}}Employees \\ Present\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}States\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Edges\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Runtime\\(ms)\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}E/S\\Ratio\end{tabular}} + & \textbf{\begin{tabular}[c]{@{}c@{}}Speedup\end{tabular}} + \\ \hline + A & 2 & 1 & 36.975 & 2.000 & 2.0 \\ \hline + B & 2 & 1 & 520.277 & 2.000 & 2.0 \\ \hline + C & 0 & 0 & 0 & 0 & 0 \\ \hline + AB & 2 & 1 & 11239.546 & 2.000 & 2.0 \\ \hline + AC & 4096 & 147456 & 27962.078 & 36.000 & 2.0 \\ \hline + BC & 8192 & 319488 & 66394.759 & 39.000 & 2.0 \\ \hline + ABC & 131072 & 6684672 & 1940664.745 & 51.000 & 2.0 \\ \hline + \end{tabular} +\end{table} + \section{Future Works} \label{sec:fw} As seen and discussed in Section \ref{sec:inseparable}, when unattainable states are generated, there is a compounding effect. Each unattainable state is explored, and is likely to generate additional unattainable states. Future works include examining the effect of synchronous firing when more assets are utilized. It is hypothesized that the synchronous firing approach will lead to an increased runtime reduction and state space reduction due to the increased number of unattainable state permutations. This work had a limited number of assets, but generated upwards of 400,000 states due to repeated applications of the exploit set due to the services corresponding with the compliance graph. Future work could alter the scenario to have a greater number of assets, and a standard set of exploits more akin to an attack graph rather than a compliance graph. Other future works could include measuring the performance of synchronous firing when multiple groups of inseparable features are used. This work used a single group, but multiple groups be added to examine the performance of the feature. diff --git a/data/.~lock.data.xlsx# b/data/.~lock.data.xlsx# new file mode 100644 index 0000000..441d1e0 --- /dev/null +++ b/data/.~lock.data.xlsx# @@ -0,0 +1 @@ +,noah,NovaArchSys,24.03.2023 13:37,file:///home/noah/.config/libreoffice/4; \ No newline at end of file diff --git a/data/data.xlsx b/data/data.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..cffde48cc73360f06cb901e50c2e90244b63f723 GIT binary patch literal 27635 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 U0YqU66V3H?k7+PK% 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