%%% BEGINNING OF THE TRANSLATION %%%


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, (({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }) only_if equal(server, server)), ((eidehd # 2 > scsihd # 2) only_if not equal(server, server)), maxneed(server, 2).
%% R-Rule cleaned from CP-Lists:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).
%% R-Rule cleaned from P-Sets:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).


%%%%%% Translation of the rule rasp_1:
%%		[1-2]: mainunit(server) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_1_1 # -1, rasp_aux_if_1_1 # 1, rasp_z_if_1_2 # -1, rasp_aux_if_1_2 # 1, maxneed(server, 2).
rasp_rrule(rasp_1).
rasp_firings(rasp_1, 1..2).
:- not maxneed(server, 2), rasp_fired(rasp_1).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 0, mainunit(server), 1).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 1, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 2, motherboard, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 4, rasp_z_if_1_1, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 5, rasp_aux_if_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 6, rasp_z_if_1_2, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_1, 7, rasp_aux_if_1_2, -(1)).
%% Policy
rasp_optional(rasp_1).


%% If-CP-Lists in the R-Rule's body:
%% (({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }) only_if equal(server, server))
rasp_p_if_1_1 :- not rasp_np_if_1_1.
rasp_np_if_1_1 :- not rasp_p_if_1_1.
:- rasp_np_if_1_1, equal(server, server).
:- rasp_p_if_1_1, not equal(server, server).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_1_1 # 1.


%% P-Lists in the R-Rule's body:
%% ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 })
%%		Amount-Atom sets in the current P-List:
%%		{ scsihd # 4, cpu # 1, rammodule # 2 }
%%		{ eidehd # 2, cpu # 1, rammodule # 2 }


%% P-List : (rasp_aux_aa_set_2_1_1 # 1 > rasp_aux_aa_set_2_1_2 # 1)
rasp_auxres(rasp_2, rasp_pl_2_1).
1 { rasp_use_pl(rasp_2, rasp_aux_aa_set_2_1_1, I, 1, rasp_pl_2_1), rasp_use_pl(rasp_2, rasp_aux_aa_set_2_1_2, I, 1, rasp_pl_2_1) } 1 :-
	rasp_use(rasp_2, 1, rasp_pl_2_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_2, NumFirings).
rasp_res_pl(rasp_2, rasp_pl_2_1, rasp_aux_aa_set_2_1_1, 1).
rasp_res_pl(rasp_2, rasp_pl_2_1, rasp_aux_aa_set_2_1_2, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, rasp_pl_2_1 # 1, rasp_z_if_1_1 # 1, rasp_z_aa_set_2_1 # -1.


%%%%%% Translation of the rule rasp_2:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_p_if_1_1, rasp_pl_2_1 # 1, rasp_z_if_1_1 # 1, rasp_z_aa_set_2_1 # -1.
rasp_rrule(rasp_2).
rasp_firings(rasp_2, 1..2).
:- not rasp_p_if_1_1, rasp_fired(rasp_2).
%% rule (6)(6'):
rasp_a_atom(rasp_2, 0, rasp_aux_if_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_2, 1, rasp_pl_2_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_2, 2, rasp_z_if_1_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_2, 3, rasp_z_aa_set_2_1, -(-1)).
%% Policy
rasp_optional(rasp_2).


%%%%%% R-Rules associated with Amount-Atom sets:


%% [1-2]: rasp_aux_aa_set_2_1_1 # 1 :- scsihd # 4, cpu # 1, rammodule # 2, rasp_z_aa_set_2_1 # 1.


%%%%%% Translation of the rule rasp_3:
%%		[1-2]: rasp_aux_aa_set_2_1_1 # 1 :- scsihd # 4, cpu # 1, rammodule # 2, rasp_z_aa_set_2_1 # 1.
rasp_rrule(rasp_3).
rasp_firings(rasp_3, 1..2).
%% rule (6)(6'):
rasp_a_atom(rasp_3, 0, rasp_aux_aa_set_2_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_3, 1, scsihd, -(4)).
%% rule (6)(6'):
rasp_a_atom(rasp_3, 2, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_3, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_3, 4, rasp_z_aa_set_2_1, -(1)).
%% Policy
rasp_optional(rasp_3).


%% [1-2]: rasp_aux_aa_set_2_1_2 # 1 :- eidehd # 2, cpu # 1, rammodule # 2, rasp_z_aa_set_2_1 # 1.


%%%%%% Translation of the rule rasp_4:
%%		[1-2]: rasp_aux_aa_set_2_1_2 # 1 :- eidehd # 2, cpu # 1, rammodule # 2, rasp_z_aa_set_2_1 # 1.
rasp_rrule(rasp_4).
rasp_firings(rasp_4, 1..2).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 0, rasp_aux_aa_set_2_1_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 1, eidehd, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 2, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_4, 4, rasp_z_aa_set_2_1, -(1)).
%% Policy
rasp_optional(rasp_4).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_2_1 # 2.


%%%%%% Translation of the rule (fact) rasp_5:
%%		rasp_pl_2_1 # 2.
rasp_rrule(rasp_5).
%% fact (6)(6'):
rasp_a_atom(rasp_5, 0, rasp_pl_2_1, 2).
%% fact (5)(5'):
rasp_fired(rasp_5).
rasp_firings(rasp_5, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.


%%%%%% Translation of the rule rasp_6:
%%		[1-2]: rasp_aux_if_1_1 # 1 :- rasp_np_if_1_1, rasp_z_if_1_1 # 1.
rasp_rrule(rasp_6).
rasp_firings(rasp_6, 1..2).
:- not rasp_np_if_1_1, rasp_fired(rasp_6).
%% rule (6)(6'):
rasp_a_atom(rasp_6, 0, rasp_aux_if_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_6, 1, rasp_z_if_1_1, -(1)).
%% Policy
rasp_optional(rasp_6).
%% ((eidehd # 2 > scsihd # 2) only_if not equal(server, server))
rasp_p_if_1_2 :- not rasp_np_if_1_2.
rasp_np_if_1_2 :- not rasp_p_if_1_2.
:- rasp_np_if_1_2, not equal(server, server).
:- rasp_p_if_1_2, equal(server, server).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_p_if_1_2, (eidehd # 2 > scsihd # 2), rasp_z_if_1_2 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_p_if_1_2, (eidehd # 2 > scsihd # 2), rasp_z_if_1_2 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_p_if_1_2, (eidehd # 2 > scsihd # 2), rasp_z_if_1_2 # 1.


%% P-Lists in the R-Rule's body:
%% (eidehd # 2 > scsihd # 2)
%% P-List : (eidehd # 2 > scsihd # 2)
rasp_auxres(rasp_7, rasp_pl_7_1).
1 { rasp_use_pl(rasp_7, eidehd, I, 2, rasp_pl_7_1), rasp_use_pl(rasp_7, scsihd, I, 2, rasp_pl_7_1) } 1 :-
	rasp_use(rasp_7, 1, rasp_pl_7_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_7, NumFirings).
rasp_res_pl(rasp_7, rasp_pl_7_1, eidehd, 1).
rasp_res_pl(rasp_7, rasp_pl_7_1, scsihd, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_p_if_1_2, rasp_pl_7_1 # 1, rasp_z_if_1_2 # 1.


%%%%%% Translation of the rule rasp_7:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_p_if_1_2, rasp_pl_7_1 # 1, rasp_z_if_1_2 # 1.
rasp_rrule(rasp_7).
rasp_firings(rasp_7, 1..2).
:- not rasp_p_if_1_2, rasp_fired(rasp_7).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 0, rasp_aux_if_1_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 1, rasp_pl_7_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_7, 2, rasp_z_if_1_2, -(1)).
%% Policy
rasp_optional(rasp_7).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_7_1 # 2.


%%%%%% Translation of the rule (fact) rasp_8:
%%		rasp_pl_7_1 # 2.
rasp_rrule(rasp_8).
%% fact (6)(6'):
rasp_a_atom(rasp_8, 0, rasp_pl_7_1, 2).
%% fact (5)(5'):
rasp_fired(rasp_8).
rasp_firings(rasp_8, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_np_if_1_2, rasp_z_if_1_2 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_np_if_1_2, rasp_z_if_1_2 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_np_if_1_2, rasp_z_if_1_2 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_np_if_1_2, rasp_z_if_1_2 # 1.


%%%%%% Translation of the rule rasp_9:
%%		[1-2]: rasp_aux_if_1_2 # 1 :- rasp_np_if_1_2, rasp_z_if_1_2 # 1.
rasp_rrule(rasp_9).
rasp_firings(rasp_9, 1..2).
:- not rasp_np_if_1_2, rasp_fired(rasp_9).
%% rule (6)(6'):
rasp_a_atom(rasp_9, 0, rasp_aux_if_1_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_9, 1, rasp_z_if_1_2, -(1)).
%% Policy
rasp_optional(rasp_9).


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, (({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }) only_if equal(desktop, server)), ((eidehd # 2 > scsihd # 2) only_if not equal(desktop, server)), maxneed(desktop, 5).
%% R-Rule cleaned from CP-Lists:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).
%% R-Rule cleaned from P-Sets:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).
%% R-Rule cleaned from P-Lists:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).


%%%%%% Translation of the rule rasp_10:
%%		[1-5]: mainunit(desktop) # 1 :- cpu # 1, motherboard # 1, rammodule # 2, rasp_z_if_10_1 # -1, rasp_aux_if_10_1 # 1, rasp_z_if_10_2 # -1, rasp_aux_if_10_2 # 1, maxneed(desktop, 5).
rasp_rrule(rasp_10).
rasp_firings(rasp_10, 1..5).
:- not maxneed(desktop, 5), rasp_fired(rasp_10).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 0, mainunit(desktop), 1).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 1, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 2, motherboard, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 4, rasp_z_if_10_1, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 5, rasp_aux_if_10_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 6, rasp_z_if_10_2, -(-1)).
%% rule (6)(6'):
rasp_a_atom(rasp_10, 7, rasp_aux_if_10_2, -(1)).
%% Policy
rasp_optional(rasp_10).


%% If-CP-Lists in the R-Rule's body:
%% (({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }) only_if equal(desktop, server))
rasp_p_if_10_1 :- not rasp_np_if_10_1.
rasp_np_if_10_1 :- not rasp_p_if_10_1.
:- rasp_np_if_10_1, equal(desktop, server).
:- rasp_p_if_10_1, not equal(desktop, server).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_p_if_10_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_10_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_p_if_10_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_10_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_p_if_10_1, ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 }), rasp_z_if_10_1 # 1.


%% P-Lists in the R-Rule's body:
%% ({ scsihd # 4, cpu # 1, rammodule # 2 } > { eidehd # 2, cpu # 1, rammodule # 2 })
%%		Amount-Atom sets in the current P-List:
%%		{ scsihd # 4, cpu # 1, rammodule # 2 }
%%		{ eidehd # 2, cpu # 1, rammodule # 2 }


%% P-List : (rasp_aux_aa_set_11_1_1 # 1 > rasp_aux_aa_set_11_1_2 # 1)
rasp_auxres(rasp_11, rasp_pl_11_1).
1 { rasp_use_pl(rasp_11, rasp_aux_aa_set_11_1_1, I, 1, rasp_pl_11_1), rasp_use_pl(rasp_11, rasp_aux_aa_set_11_1_2, I, 1, rasp_pl_11_1) } 1 :-
	rasp_use(rasp_11, 1, rasp_pl_11_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_11, NumFirings).
rasp_res_pl(rasp_11, rasp_pl_11_1, rasp_aux_aa_set_11_1_1, 1).
rasp_res_pl(rasp_11, rasp_pl_11_1, rasp_aux_aa_set_11_1_2, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_p_if_10_1, rasp_pl_11_1 # 1, rasp_z_if_10_1 # 1, rasp_z_aa_set_11_1 # -1.


%%%%%% Translation of the rule rasp_11:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_p_if_10_1, rasp_pl_11_1 # 1, rasp_z_if_10_1 # 1, rasp_z_aa_set_11_1 # -1.
rasp_rrule(rasp_11).
rasp_firings(rasp_11, 1..5).
:- not rasp_p_if_10_1, rasp_fired(rasp_11).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 0, rasp_aux_if_10_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 1, rasp_pl_11_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 2, rasp_z_if_10_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_11, 3, rasp_z_aa_set_11_1, -(-1)).
%% Policy
rasp_optional(rasp_11).


%%%%%% R-Rules associated with Amount-Atom sets:


%% [1-5]: rasp_aux_aa_set_11_1_1 # 1 :- scsihd # 4, cpu # 1, rammodule # 2, rasp_z_aa_set_11_1 # 1.


%%%%%% Translation of the rule rasp_12:
%%		[1-5]: rasp_aux_aa_set_11_1_1 # 1 :- scsihd # 4, cpu # 1, rammodule # 2, rasp_z_aa_set_11_1 # 1.
rasp_rrule(rasp_12).
rasp_firings(rasp_12, 1..5).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 0, rasp_aux_aa_set_11_1_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 1, scsihd, -(4)).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 2, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_12, 4, rasp_z_aa_set_11_1, -(1)).
%% Policy
rasp_optional(rasp_12).


%% [1-5]: rasp_aux_aa_set_11_1_2 # 1 :- eidehd # 2, cpu # 1, rammodule # 2, rasp_z_aa_set_11_1 # 1.


%%%%%% Translation of the rule rasp_13:
%%		[1-5]: rasp_aux_aa_set_11_1_2 # 1 :- eidehd # 2, cpu # 1, rammodule # 2, rasp_z_aa_set_11_1 # 1.
rasp_rrule(rasp_13).
rasp_firings(rasp_13, 1..5).
%% rule (6)(6'):
rasp_a_atom(rasp_13, 0, rasp_aux_aa_set_11_1_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_13, 1, eidehd, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_13, 2, cpu, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_13, 3, rammodule, -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_13, 4, rasp_z_aa_set_11_1, -(1)).
%% Policy
rasp_optional(rasp_13).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_11_1 # 5.


%%%%%% Translation of the rule (fact) rasp_14:
%%		rasp_pl_11_1 # 5.
rasp_rrule(rasp_14).
%% fact (6)(6'):
rasp_a_atom(rasp_14, 0, rasp_pl_11_1, 5).
%% fact (5)(5'):
rasp_fired(rasp_14).
rasp_firings(rasp_14, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_np_if_10_1, rasp_z_if_10_1 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_np_if_10_1, rasp_z_if_10_1 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_np_if_10_1, rasp_z_if_10_1 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_np_if_10_1, rasp_z_if_10_1 # 1.


%%%%%% Translation of the rule rasp_15:
%%		[1-5]: rasp_aux_if_10_1 # 1 :- rasp_np_if_10_1, rasp_z_if_10_1 # 1.
rasp_rrule(rasp_15).
rasp_firings(rasp_15, 1..5).
:- not rasp_np_if_10_1, rasp_fired(rasp_15).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 0, rasp_aux_if_10_1, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_15, 1, rasp_z_if_10_1, -(1)).
%% Policy
rasp_optional(rasp_15).
%% ((eidehd # 2 > scsihd # 2) only_if not equal(desktop, server))
rasp_p_if_10_2 :- not rasp_np_if_10_2.
rasp_np_if_10_2 :- not rasp_p_if_10_2.
:- rasp_np_if_10_2, not equal(desktop, server).
:- rasp_p_if_10_2, equal(desktop, server).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_p_if_10_2, (eidehd # 2 > scsihd # 2), rasp_z_if_10_2 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_p_if_10_2, (eidehd # 2 > scsihd # 2), rasp_z_if_10_2 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_p_if_10_2, (eidehd # 2 > scsihd # 2), rasp_z_if_10_2 # 1.


%% P-Lists in the R-Rule's body:
%% (eidehd # 2 > scsihd # 2)
%% P-List : (eidehd # 2 > scsihd # 2)
rasp_auxres(rasp_16, rasp_pl_16_1).
1 { rasp_use_pl(rasp_16, eidehd, I, 2, rasp_pl_16_1), rasp_use_pl(rasp_16, scsihd, I, 2, rasp_pl_16_1) } 1 :-
	rasp_use(rasp_16, 1, rasp_pl_16_1, -(NumFirings)),
	rasp_iter(I), I <= NumFirings, rasp_counter(rasp_16, NumFirings).
rasp_res_pl(rasp_16, rasp_pl_16_1, eidehd, 1).
rasp_res_pl(rasp_16, rasp_pl_16_1, scsihd, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_p_if_10_2, rasp_pl_16_1 # 1, rasp_z_if_10_2 # 1.


%%%%%% Translation of the rule rasp_16:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_p_if_10_2, rasp_pl_16_1 # 1, rasp_z_if_10_2 # 1.
rasp_rrule(rasp_16).
rasp_firings(rasp_16, 1..5).
:- not rasp_p_if_10_2, rasp_fired(rasp_16).
%% rule (6)(6'):
rasp_a_atom(rasp_16, 0, rasp_aux_if_10_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_16, 1, rasp_pl_16_1, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_16, 2, rasp_z_if_10_2, -(1)).
%% Policy
rasp_optional(rasp_16).


%%%%%% Amount-Atoms corresponding to P-Lists in the current R-Rule:


%% rasp_pl_16_1 # 5.


%%%%%% Translation of the rule (fact) rasp_17:
%%		rasp_pl_16_1 # 5.
rasp_rrule(rasp_17).
%% fact (6)(6'):
rasp_a_atom(rasp_17, 0, rasp_pl_16_1, 5).
%% fact (5)(5'):
rasp_fired(rasp_17).
rasp_firings(rasp_17, 1).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_np_if_10_2, rasp_z_if_10_2 # 1.
%% R-Rule cleaned from P-Sets:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_np_if_10_2, rasp_z_if_10_2 # 1.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_np_if_10_2, rasp_z_if_10_2 # 1.
%% R-Rule cleaned from P-Lists:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_np_if_10_2, rasp_z_if_10_2 # 1.


%%%%%% Translation of the rule rasp_18:
%%		[1-5]: rasp_aux_if_10_2 # 1 :- rasp_np_if_10_2, rasp_z_if_10_2 # 1.
rasp_rrule(rasp_18).
rasp_firings(rasp_18, 1..5).
:- not rasp_np_if_10_2, rasp_fired(rasp_18).
%% rule (6)(6'):
rasp_a_atom(rasp_18, 0, rasp_aux_if_10_2, 1).
%% rule (6)(6'):
rasp_a_atom(rasp_18, 1, rasp_z_if_10_2, -(1)).
%% Policy
rasp_optional(rasp_18).


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).
%% R-Rule cleaned from CP-Lists:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).
%% R-Rule cleaned from P-Sets:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).
%% R-Rule cleaned from P-Lists:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).


%%%%%% Translation of the rule rasp_19:
%%		[1-2]: computer(server) # 1 :- mainunit(server) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(server), maxneed(server, 2).
rasp_rrule(rasp_19).
rasp_firings(rasp_19, 1..2).
:- not pctype(server), rasp_fired(rasp_19).
:- not maxneed(server, 2), rasp_fired(rasp_19).
%% rule (6)(6'):
rasp_a_atom(rasp_19, 0, computer(server), 1).
%% rule (6)(6'):
rasp_a_atom(rasp_19, 1, mainunit(server), -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_19, 2, monitor, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_19, 3, mouse, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_19, 4, keyboard, -(1)).
%% Policy
rasp_optional(rasp_19).


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).
%% R-Rule cleaned from CP-Lists:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).
%% R-Rule cleaned from P-Sets:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).
%% R-Rule cleaned from P-Lists:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).


%%%%%% Translation of the rule rasp_20:
%%		[1-5]: computer(desktop) # 1 :- mainunit(desktop) # 1, monitor # 1, mouse # 1, keyboard # 1, pctype(desktop), maxneed(desktop, 5).
rasp_rrule(rasp_20).
rasp_firings(rasp_20, 1..5).
:- not pctype(desktop), rasp_fired(rasp_20).
:- not maxneed(desktop, 5), rasp_fired(rasp_20).
%% rule (6)(6'):
rasp_a_atom(rasp_20, 0, computer(desktop), 1).
%% rule (6)(6'):
rasp_a_atom(rasp_20, 1, mainunit(desktop), -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_20, 2, monitor, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_20, 3, mouse, -(1)).
%% rule (6)(6'):
rasp_a_atom(rasp_20, 4, keyboard, -(1)).
%% Policy
rasp_optional(rasp_20).


%%%%%% Proper ASP statement rewritten
equal(server, server).


%%%%%% Proper ASP statement rewritten
equal(desktop, desktop).


%%%%%% Translation of the rule (fact) rasp_21:
%%		monitor # 25.
rasp_rrule(rasp_21).
%% fact (6)(6'):
rasp_a_atom(rasp_21, 0, monitor, 25).
%% fact (5)(5'):
rasp_fired(rasp_21).
rasp_firings(rasp_21, 1).


%%%%%% Translation of the rule (fact) rasp_22:
%%		mouse # 25.
rasp_rrule(rasp_22).
%% fact (6)(6'):
rasp_a_atom(rasp_22, 0, mouse, 25).
%% fact (5)(5'):
rasp_fired(rasp_22).
rasp_firings(rasp_22, 1).


%%%%%% Translation of the rule (fact) rasp_23:
%%		keyboard # 25.
rasp_rrule(rasp_23).
%% fact (6)(6'):
rasp_a_atom(rasp_23, 0, keyboard, 25).
%% fact (5)(5'):
rasp_fired(rasp_23).
rasp_firings(rasp_23, 1).


%%%%%% Translation of the rule (fact) rasp_24:
%%		motherboard # 30.
rasp_rrule(rasp_24).
%% fact (6)(6'):
rasp_a_atom(rasp_24, 0, motherboard, 30).
%% fact (5)(5'):
rasp_fired(rasp_24).
rasp_firings(rasp_24, 1).


%%%%%% Translation of the rule (fact) rasp_25:
%%		cpu # 29.
rasp_rrule(rasp_25).
%% fact (6)(6'):
rasp_a_atom(rasp_25, 0, cpu, 29).
%% fact (5)(5'):
rasp_fired(rasp_25).
rasp_firings(rasp_25, 1).


%%%%%% Translation of the rule (fact) rasp_26:
%%		scsihd # 30.
rasp_rrule(rasp_26).
%% fact (6)(6'):
rasp_a_atom(rasp_26, 0, scsihd, 30).
%% fact (5)(5'):
rasp_fired(rasp_26).
rasp_firings(rasp_26, 1).


%%%%%% Translation of the rule (fact) rasp_27:
%%		eidehd # 29.
rasp_rrule(rasp_27).
%% fact (6)(6'):
rasp_a_atom(rasp_27, 0, eidehd, 29).
%% fact (5)(5'):
rasp_fired(rasp_27).
rasp_firings(rasp_27, 1).


%%%%%% Translation of the rule (fact) rasp_28:
%%		rammodule # 30.
rasp_rrule(rasp_28).
%% fact (6)(6'):
rasp_a_atom(rasp_28, 0, rammodule, 30).
%% fact (5)(5'):
rasp_fired(rasp_28).
rasp_firings(rasp_28, 1).


%%%%%% Proper ASP statement rewritten
maxneed(server, 2).


%%%%%% Proper ASP statement rewritten
maxneed(desktop, 5).


%%%%%% Proper ASP statement rewritten
pctype(server).


%%%%%% Proper ASP statement rewritten
pctype(desktop).


%%%%%% Cleaning R-Rule from CP-Lists
%% Original R-Rule:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.
%% R-Rule cleaned from CP-Lists:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.


%%%%%% Cleaning R-Rule from P-Sets
%% Original R-Rule:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.
%% R-Rule cleaned from P-Sets:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.


%%%%%% Cleaning R-Rule from P-Lists
%% Original R-Rule:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.
%% R-Rule cleaned from P-Lists:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.


%%%%%% Translation of the rule rasp_29:
%%		[1-1]: taskdone :- computer(server) # 2, computer(desktop) # 5.
rasp_rrule(rasp_29).
rasp_firings(rasp_29, 1..1).
%% rule (6)(6'):
rasp_a_atom(rasp_29, 0, computer(server), -(2)).
%% rule (6)(6'):
rasp_a_atom(rasp_29, 1, computer(desktop), -(5)).
%% rule (3):
taskdone :-
	rasp_fired(rasp_29).
%% Policy
rasp_optional(rasp_29).


%%%%%% Proper ASP statement rewritten
:- not taskdone.


%%%%%% Domain predicates for P-Lists:
rasp_num(0..5).
rasp_iter(1..5).
rasp_grade(1..2).


%%%%%% Engine for P-Lists:
rasp_resource(Pl) :- rasp_auxres(G, Pl), rasp_rrule(G).
rasp_use(G, Idx, R, TEMP) :- TEMP = U * N, rasp_sum_use_pl(G, R, N, Pl), rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G), rasp_allval(N), rasp_a_atom(G, Idx, Pl, U), N != 0.

rasp_sum_use_pl(G, R, N, Pl) :- N = #sum [ rasp_use_pl(G, R, Iter, Q, Pl) : rasp_firings(G, Iter) : rasp_iter(Iter) : rasp_allval(Q) = Q ], rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G), rasp_allval(N), rasp_auxres(G, Pl).
1 { rasp_sum_use_pl(G, R, N, Pl) : rasp_allval(N) } 1 :- rasp_res_pl(G, Pl, R, Grade), rasp_rrule(G).

rasp_auxpred(G, R, I, Q, Pl, Grade) :- rasp_use_pl(G, R, I, Q, Pl),rasp_res_pl(G, Pl, R, Grade),rasp_rrule(G),rasp_auxres(G,Pl),rasp_val(I),rasp_allval(Q),rasp_grade(Grade),rasp_resource(R).
rasp_num_n_choice(Grade, N) :- N { rasp_auxpred(G, R, I, Q, Pl, Grade) : rasp_allval(Q) : rasp_resource(R) : rasp_rrule(G) : rasp_auxres(G,Pl) : rasp_val(I) } N, rasp_allval(N), rasp_grade(Grade).
1 { rasp_num_n_choice(Grade, N) : rasp_val(N) } 1 :- rasp_grade(Grade).
#maximize [ rasp_num_n_choice(2, N) : rasp_val(N) = N ].
#maximize [ rasp_num_n_choice(1, N) : rasp_val(N) = N ].


%%%%%% Domain predicates:
rasp_val(0..30).
rasp_allval(-30..30).
rasp_idx(0..7).


%%%%%% Resources:
rasp_resource(computer(desktop)).
rasp_resource(computer(server)).
rasp_resource(cpu).
rasp_resource(eidehd).
rasp_resource(keyboard).
rasp_resource(mainunit(desktop)).
rasp_resource(mainunit(server)).
rasp_resource(monitor).
rasp_resource(motherboard).
rasp_resource(mouse).
rasp_resource(rammodule).
rasp_resource(rasp_aux_aa_set_11_1_1).
rasp_resource(rasp_aux_aa_set_11_1_2).
rasp_resource(rasp_aux_aa_set_2_1_1).
rasp_resource(rasp_aux_aa_set_2_1_2).
rasp_resource(rasp_aux_if_10_1).
rasp_resource(rasp_aux_if_10_2).
rasp_resource(rasp_aux_if_1_1).
rasp_resource(rasp_aux_if_1_2).
rasp_resource(rasp_pl_11_1).
rasp_resource(rasp_pl_16_1).
rasp_resource(rasp_pl_2_1).
rasp_resource(rasp_pl_7_1).
rasp_resource(rasp_z_aa_set_11_1).
rasp_resource(rasp_z_aa_set_2_1).
rasp_resource(rasp_z_if_10_1).
rasp_resource(rasp_z_if_10_2).
rasp_resource(rasp_z_if_1_1).
rasp_resource(rasp_z_if_1_2).
rasp_resource(scsihd).


%%%%%% Main engine (PAPER):
rasp_res_rrule(Res, Rule) :- rasp_a_atom(Rule, I, Res, Q).
rasp_fired(Rule) :- not rasp_notfired(Rule), rasp_rrule(Rule).
rasp_notfired(Rule) :- not rasp_fired(Rule), rasp_rrule(Rule).
rasp_use(Rule, I, Res, TEMP) :- TEMP = C * Q, rasp_fired(Rule), rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).
rasp_fired(Rule) :- rasp_use(Rule, I, Res, TEMP), TEMP = C * Q, rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).
rasp_notfired(Rule) :- not rasp_use(Rule, I, Res, TEMP), TEMP = C * Q, rasp_counter(Rule, C), rasp_firings(Rule, C), rasp_resource(Res), rasp_a_atom(Rule, I, Res, Q).

rasp_notcounter(G, C) :- rasp_counter(G, D), rasp_firings(G, C), C != D, rasp_rrule(G), rasp_firings(G, D).
rasp_counter(G, C) :- rasp_firings(G, C), rasp_fired(G), not rasp_notcounter(G, C).
:- not rasp_fired(G), rasp_counter(G, C), rasp_rrule(G), rasp_firings(G, C).

rasp_balance(Res, N) :- N = #sum [ rasp_use(Rule, Idx, Res, Q) : rasp_rrule(Rule) : rasp_idx(Idx) : rasp_allval(Q) = Q ], rasp_resource(Res).
:- rasp_balance(Res, N), N < 0, rasp_resource(Res), rasp_allval(N).




%%%%%% Mr.Hyde:
#hide rasp_auxatom.
#hide rasp_cons(X,Y,Z,W).
#hide rasp_consumes(X,Y,Z).
#hide rasp_enabled(X).
#hide rasp_enbld(X,Y).
#hide rasp_firings(X,Y).
#hide rasp_idx(X).
#hide rasp_num(X).
#hide rasp_prod(X,Y,Z,W).
#hide rasp_produces(X,Y,Z).
#hide rasp_resource(X).
#hide rasp_RID.
#hide rasp_rrule(X).
#hide rasp_use_n(X,Y,Z,W).
#hide rasp_use_p(X,Y,Z,W).
#hide rasp_val(X).
#hide rasp_optional(X).
#hide rasp_thrifty(X).
#hide rasp_prodigal(X).
#hide rasp_use(X,Y,Z,W).
#hide rasp_extraneeded(X,Y,Z).
#hide rasp_notcounter(X,Y).
#hide rasp_allval(X).
#hide rasp_res_rrule(X,Y).
#hide rasp_auxres(X,Y).
#hide rasp_use_pl(X,Y,Z,W).
#hide rasp_res_pl(X,Y,Z,W).
#hide rasp_sum_use_pl(X,Y,Z,W).
#hide rasp_num_n_choice(X,Y).
#hide rasp_grade(X).
#hide rasp_iter(X).
#hide rasp_cl(X,Y,Z).
#hide rasp_eq(X,Y,Z).
#hide rasp_idx(X,Y,Z).
#hide rasp_num(X,Y).
#hide rasp_dom(X,Y).
#hide rasp_used_idx(X,Y).
#hide rasp_pset_name(X).
#hide rasp_order(X,Y,Z).
#hide rasp_other(X,Y,Z).
#hide rasp_ordered(X,Y,Z,W,U,V).
#hide rasp_auxpred(X,Y).


%%% END OF THE TRANSLATION %%%

