TSTP Solution File: SWW957+1 by Zipperpin---2.1.9999

View Problem - Process Solution

%------------------------------------------------------------------------------
% File     : Zipperpin---2.1.9999
% Problem  : SWW957+1 : TPTP v8.1.2. Released v7.4.0.
% Transfm  : NO INFORMATION
% Format   : NO INFORMATION
% Command  : python3 /export/starexec/sandbox2/solver/bin/portfolio.lams.parallel.py %s %d /export/starexec/sandbox2/tmp/tmp.mBikwZ0QJa true

% Computer : n010.cluster.edu
% Model    : x86_64 x86_64
% CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 2.10GHz
% Memory   : 8042.1875MB
% OS       : Linux 3.10.0-693.el7.x86_64
% CPULimit : 300s
% WCLimit  : 300s
% DateTime : Fri Sep  1 01:43:32 EDT 2023

% Result   : Theorem 0.91s 0.75s
% Output   : Refutation 0.91s
% Verified : 
% SZS Type : Refutation
%            Derivation depth      :   11
%            Number of leaves      :   31
% Syntax   : Number of formulae    :   79 (  43 unt;  14 typ;   0 def)
%            Number of atoms       :   90 (  29 equ;   0 cnn)
%            Maximal formula atoms :    3 (   1 avg)
%            Number of connectives :  352 (  19   ~;  17   |;   1   &; 308   @)
%                                         (   0 <=>;   7  =>;   0  <=;   0 <~>)
%            Maximal formula depth :    9 (   4 avg)
%            Number of types       :    2 (   0 usr)
%            Number of type conns  :   16 (  16   >;   0   *;   0   +;   0  <<)
%            Number of symbols     :   16 (  14 usr;   5 con; 0-2 aty)
%            Number of variables   :   77 (   0   ^;  77   !;   0   ?;  77   :)

% Comments : 
%------------------------------------------------------------------------------
thf(name_Kab_type,type,
    name_Kab: $i ).

thf(tuple_enc_oracle_out_2_type,type,
    tuple_enc_oracle_out_2: $i > $i > $i ).

thf(constr_RC4_type,type,
    constr_RC4: $i > $i > $i ).

thf(constr_ZERO_type,type,
    constr_ZERO: $i ).

thf(constr_xor_type,type,
    constr_xor: $i > $i > $i ).

thf(name_v_type,type,
    name_v: $i ).

thf(constr_concat_type,type,
    constr_concat: $i > $i > $i ).

thf(constr_C_type,type,
    constr_C: $i > $i ).

thf(tuple_enc_oracle_in_1_type,type,
    tuple_enc_oracle_in_1: $i > $i ).

thf(constr_split_type,type,
    constr_split: $i > $i ).

thf(tuple_2_type,type,
    tuple_2: $i > $i > $i ).

thf(name_objective_type,type,
    name_objective: $i ).

thf(pred_attacker_type,type,
    pred_attacker: $i > $o ).

thf(tuple_B_out_1_type,type,
    tuple_B_out_1: $i > $i > $i ).

thf(co0,conjecture,
    pred_attacker @ name_objective ).

thf(zf_stmt_0,negated_conjecture,
    ~ ( pred_attacker @ name_objective ),
    inference('cnf.neg',[status(esa)],[co0]) ).

thf(zip_derived_cl83,plain,
    ~ ( pred_attacker @ name_objective ),
    inference(cnf,[status(esa)],[zf_stmt_0]) ).

thf(ax82,axiom,
    pred_attacker @ ( tuple_B_out_1 @ name_v @ ( constr_xor @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ) @ ( constr_RC4 @ name_v @ name_Kab ) ) ) ).

thf(zip_derived_cl82,plain,
    pred_attacker @ ( tuple_B_out_1 @ name_v @ ( constr_xor @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ) @ ( constr_RC4 @ name_v @ name_Kab ) ) ),
    inference(cnf,[status(esa)],[ax82]) ).

thf(ax50,axiom,
    ! [VAR_X_8: $i,VAR_Y_9: $i] :
      ( ( constr_xor @ VAR_X_8 @ VAR_Y_9 )
      = ( constr_xor @ VAR_Y_9 @ VAR_X_8 ) ) ).

thf(zip_derived_cl50,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_xor @ X1 @ X0 )
      = ( constr_xor @ X0 @ X1 ) ),
    inference(cnf,[status(esa)],[ax50]) ).

thf(zip_derived_cl216,plain,
    pred_attacker @ ( tuple_B_out_1 @ name_v @ ( constr_xor @ ( constr_RC4 @ name_v @ name_Kab ) @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ) ) ),
    inference(demod,[status(thm)],[zip_derived_cl82,zip_derived_cl50]) ).

thf(ax72,axiom,
    ! [VAR_V_81: $i,VAR_V_82: $i] :
      ( ( pred_attacker @ ( tuple_B_out_1 @ VAR_V_81 @ VAR_V_82 ) )
     => ( pred_attacker @ VAR_V_82 ) ) ).

thf(zip_derived_cl72,plain,
    ! [X0: $i,X1: $i] :
      ( ( pred_attacker @ X0 )
      | ~ ( pred_attacker @ ( tuple_B_out_1 @ X1 @ X0 ) ) ),
    inference(cnf,[status(esa)],[ax72]) ).

thf(zip_derived_cl271,plain,
    pred_attacker @ ( constr_xor @ ( constr_RC4 @ name_v @ name_Kab ) @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ) ),
    inference('s_sup-',[status(thm)],[zip_derived_cl216,zip_derived_cl72]) ).

thf(ax48,axiom,
    ! [VAR_X_11: $i] :
      ( ( constr_xor @ VAR_X_11 @ VAR_X_11 )
      = constr_ZERO ) ).

thf(zip_derived_cl48,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(ax51,axiom,
    ! [VAR_X_0X30: $i,VAR_Y_0X30: $i,VAR_Z_0X30: $i] :
      ( ( constr_xor @ VAR_X_0X30 @ ( constr_xor @ VAR_Y_0X30 @ VAR_Z_0X30 ) )
      = ( constr_xor @ ( constr_xor @ VAR_X_0X30 @ VAR_Y_0X30 ) @ VAR_Z_0X30 ) ) ).

thf(zip_derived_cl51,plain,
    ! [X0: $i,X1: $i,X2: $i] :
      ( ( constr_xor @ X0 @ ( constr_xor @ X1 @ X2 ) )
      = ( constr_xor @ ( constr_xor @ X0 @ X1 ) @ X2 ) ),
    inference(cnf,[status(esa)],[ax51]) ).

thf(zip_derived_cl235,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_xor @ X1 @ ( constr_xor @ X1 @ X0 ) )
      = ( constr_xor @ constr_ZERO @ X0 ) ),
    inference('s_sup+',[status(thm)],[zip_derived_cl48,zip_derived_cl51]) ).

thf(zip_derived_cl50_001,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_xor @ X1 @ X0 )
      = ( constr_xor @ X0 @ X1 ) ),
    inference(cnf,[status(esa)],[ax50]) ).

thf(ax49,axiom,
    ! [VAR_X_10X30: $i] :
      ( ( constr_xor @ VAR_X_10X30 @ constr_ZERO )
      = VAR_X_10X30 ) ).

thf(zip_derived_cl49,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ constr_ZERO )
      = X0 ),
    inference(cnf,[status(esa)],[ax49]) ).

thf(zip_derived_cl218,plain,
    ! [X0: $i] :
      ( ( constr_xor @ constr_ZERO @ X0 )
      = X0 ),
    inference('s_sup+',[status(thm)],[zip_derived_cl50,zip_derived_cl49]) ).

thf(zip_derived_cl242,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_xor @ X1 @ ( constr_xor @ X1 @ X0 ) )
      = X0 ),
    inference(demod,[status(thm)],[zip_derived_cl235,zip_derived_cl218]) ).

thf(ax52,axiom,
    ! [VAR_V_31: $i,VAR_V_32: $i] :
      ( ( ( pred_attacker @ VAR_V_31 )
        & ( pred_attacker @ VAR_V_32 ) )
     => ( pred_attacker @ ( constr_xor @ VAR_V_31 @ VAR_V_32 ) ) ) ).

thf(zip_derived_cl52,plain,
    ! [X0: $i,X1: $i] :
      ( ~ ( pred_attacker @ X0 )
      | ~ ( pred_attacker @ X1 )
      | ( pred_attacker @ ( constr_xor @ X0 @ X1 ) ) ),
    inference(cnf,[status(esa)],[ax52]) ).

thf(zip_derived_cl289,plain,
    ! [X0: $i,X1: $i] :
      ( ~ ( pred_attacker @ X1 )
      | ~ ( pred_attacker @ ( constr_xor @ X1 @ X0 ) )
      | ( pred_attacker @ X0 ) ),
    inference('s_sup+',[status(thm)],[zip_derived_cl242,zip_derived_cl52]) ).

thf(zip_derived_cl365,plain,
    ( ~ ( pred_attacker @ ( constr_RC4 @ name_v @ name_Kab ) )
    | ( pred_attacker @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ) ) ),
    inference('s_sup-',[status(thm)],[zip_derived_cl271,zip_derived_cl289]) ).

thf(ax59,axiom,
    ! [VAR_V_53: $i] :
      ( ( pred_attacker @ VAR_V_53 )
     => ( pred_attacker @ ( tuple_enc_oracle_in_1 @ VAR_V_53 ) ) ) ).

thf(zip_derived_cl59,plain,
    ! [X0: $i] :
      ( ( pred_attacker @ ( tuple_enc_oracle_in_1 @ X0 ) )
      | ~ ( pred_attacker @ X0 ) ),
    inference(cnf,[status(esa)],[ax59]) ).

thf(zip_derived_cl48_002,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(ax47,axiom,
    ! [VAR_X_12: $i,VAR_Y_13: $i] :
      ( ( constr_C @ ( constr_xor @ VAR_X_12 @ VAR_Y_13 ) )
      = ( constr_xor @ ( constr_C @ VAR_X_12 ) @ ( constr_C @ VAR_Y_13 ) ) ) ).

thf(zip_derived_cl47,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_C @ ( constr_xor @ X0 @ X1 ) )
      = ( constr_xor @ ( constr_C @ X0 ) @ ( constr_C @ X1 ) ) ),
    inference(cnf,[status(esa)],[ax47]) ).

thf(zip_derived_cl204,plain,
    ! [X0: $i] :
      ( ( constr_C @ ( constr_xor @ X0 @ X0 ) )
      = constr_ZERO ),
    inference('s_sup+',[status(thm)],[zip_derived_cl48,zip_derived_cl47]) ).

thf(zip_derived_cl48_003,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(zip_derived_cl206,plain,
    ( ( constr_C @ constr_ZERO )
    = constr_ZERO ),
    inference(demod,[status(thm)],[zip_derived_cl204,zip_derived_cl48]) ).

thf(ax81,axiom,
    ! [VAR_M_150X30: $i] :
      ( ( pred_attacker @ ( tuple_enc_oracle_in_1 @ VAR_M_150X30 ) )
     => ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_xor @ ( constr_concat @ VAR_M_150X30 @ ( constr_C @ VAR_M_150X30 ) ) @ ( constr_RC4 @ name_v @ name_Kab ) ) ) ) ) ).

thf(zip_derived_cl81,plain,
    ! [X0: $i] :
      ( ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_xor @ ( constr_concat @ X0 @ ( constr_C @ X0 ) ) @ ( constr_RC4 @ name_v @ name_Kab ) ) ) )
      | ~ ( pred_attacker @ ( tuple_enc_oracle_in_1 @ X0 ) ) ),
    inference(cnf,[status(esa)],[ax81]) ).

thf(zip_derived_cl50_004,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_xor @ X1 @ X0 )
      = ( constr_xor @ X0 @ X1 ) ),
    inference(cnf,[status(esa)],[ax50]) ).

thf(zip_derived_cl279,plain,
    ! [X0: $i] :
      ( ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_xor @ ( constr_RC4 @ name_v @ name_Kab ) @ ( constr_concat @ X0 @ ( constr_C @ X0 ) ) ) ) )
      | ~ ( pred_attacker @ ( tuple_enc_oracle_in_1 @ X0 ) ) ),
    inference(demod,[status(thm)],[zip_derived_cl81,zip_derived_cl50]) ).

thf(zip_derived_cl282,plain,
    ( ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_xor @ ( constr_RC4 @ name_v @ name_Kab ) @ ( constr_concat @ constr_ZERO @ constr_ZERO ) ) ) )
    | ~ ( pred_attacker @ ( tuple_enc_oracle_in_1 @ constr_ZERO ) ) ),
    inference('s_sup+',[status(thm)],[zip_derived_cl206,zip_derived_cl279]) ).

thf(zip_derived_cl48_005,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(ax46,axiom,
    ! [VAR_X1_0X30: $i,VAR_X2_0X30: $i,VAR_Y1_0X30: $i,VAR_Y2_0X30: $i] :
      ( ( constr_xor @ ( constr_concat @ VAR_X1_0X30 @ VAR_Y1_0X30 ) @ ( constr_concat @ VAR_X2_0X30 @ VAR_Y2_0X30 ) )
      = ( constr_concat @ ( constr_xor @ VAR_X1_0X30 @ VAR_X2_0X30 ) @ ( constr_xor @ VAR_Y1_0X30 @ VAR_Y2_0X30 ) ) ) ).

thf(zip_derived_cl46,plain,
    ! [X0: $i,X1: $i,X2: $i,X3: $i] :
      ( ( constr_xor @ ( constr_concat @ X0 @ X2 ) @ ( constr_concat @ X1 @ X3 ) )
      = ( constr_concat @ ( constr_xor @ X0 @ X1 ) @ ( constr_xor @ X2 @ X3 ) ) ),
    inference(cnf,[status(esa)],[ax46]) ).

thf(zip_derived_cl203,plain,
    ! [X0: $i,X1: $i] :
      ( constr_ZERO
      = ( constr_concat @ ( constr_xor @ X1 @ X1 ) @ ( constr_xor @ X0 @ X0 ) ) ),
    inference('s_sup+',[status(thm)],[zip_derived_cl48,zip_derived_cl46]) ).

thf(zip_derived_cl48_006,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(zip_derived_cl48_007,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ X0 )
      = constr_ZERO ),
    inference(cnf,[status(esa)],[ax48]) ).

thf(zip_derived_cl205,plain,
    ( constr_ZERO
    = ( constr_concat @ constr_ZERO @ constr_ZERO ) ),
    inference(demod,[status(thm)],[zip_derived_cl203,zip_derived_cl48,zip_derived_cl48]) ).

thf(zip_derived_cl49_008,plain,
    ! [X0: $i] :
      ( ( constr_xor @ X0 @ constr_ZERO )
      = X0 ),
    inference(cnf,[status(esa)],[ax49]) ).

thf(zip_derived_cl283,plain,
    ( ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_RC4 @ name_v @ name_Kab ) ) )
    | ~ ( pred_attacker @ ( tuple_enc_oracle_in_1 @ constr_ZERO ) ) ),
    inference(demod,[status(thm)],[zip_derived_cl282,zip_derived_cl205,zip_derived_cl49]) ).

thf(zip_derived_cl285,plain,
    ( ~ ( pred_attacker @ constr_ZERO )
    | ( pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_RC4 @ name_v @ name_Kab ) ) ) ),
    inference('s_sup-',[status(thm)],[zip_derived_cl59,zip_derived_cl283]) ).

thf(ax62,axiom,
    pred_attacker @ constr_ZERO ).

thf(zip_derived_cl62,plain,
    pred_attacker @ constr_ZERO,
    inference(cnf,[status(esa)],[ax62]) ).

thf(zip_derived_cl286,plain,
    pred_attacker @ ( tuple_enc_oracle_out_2 @ name_v @ ( constr_RC4 @ name_v @ name_Kab ) ),
    inference(demod,[status(thm)],[zip_derived_cl285,zip_derived_cl62]) ).

thf(ax58,axiom,
    ! [VAR_V_49: $i,VAR_V_50X30: $i] :
      ( ( pred_attacker @ ( tuple_enc_oracle_out_2 @ VAR_V_49 @ VAR_V_50X30 ) )
     => ( pred_attacker @ VAR_V_50X30 ) ) ).

thf(zip_derived_cl58,plain,
    ! [X0: $i,X1: $i] :
      ( ( pred_attacker @ X0 )
      | ~ ( pred_attacker @ ( tuple_enc_oracle_out_2 @ X1 @ X0 ) ) ),
    inference(cnf,[status(esa)],[ax58]) ).

thf(zip_derived_cl321,plain,
    pred_attacker @ ( constr_RC4 @ name_v @ name_Kab ),
    inference('s_sup-',[status(thm)],[zip_derived_cl286,zip_derived_cl58]) ).

thf(zip_derived_cl367,plain,
    pred_attacker @ ( constr_concat @ name_objective @ ( constr_C @ name_objective ) ),
    inference(demod,[status(thm)],[zip_derived_cl365,zip_derived_cl321]) ).

thf(ax45,axiom,
    ! [VAR_X_14: $i,VAR_Y_15: $i] :
      ( ( constr_split @ ( constr_concat @ VAR_X_14 @ VAR_Y_15 ) )
      = ( tuple_2 @ VAR_X_14 @ VAR_Y_15 ) ) ).

thf(zip_derived_cl45,plain,
    ! [X0: $i,X1: $i] :
      ( ( constr_split @ ( constr_concat @ X0 @ X1 ) )
      = ( tuple_2 @ X0 @ X1 ) ),
    inference(cnf,[status(esa)],[ax45]) ).

thf(ax54,axiom,
    ! [VAR_V_34: $i] :
      ( ( pred_attacker @ VAR_V_34 )
     => ( pred_attacker @ ( constr_split @ VAR_V_34 ) ) ) ).

thf(zip_derived_cl54,plain,
    ! [X0: $i] :
      ( ( pred_attacker @ ( constr_split @ X0 ) )
      | ~ ( pred_attacker @ X0 ) ),
    inference(cnf,[status(esa)],[ax54]) ).

thf(zip_derived_cl201,plain,
    ! [X0: $i,X1: $i] :
      ( ( pred_attacker @ ( tuple_2 @ X1 @ X0 ) )
      | ~ ( pred_attacker @ ( constr_concat @ X1 @ X0 ) ) ),
    inference('s_sup+',[status(thm)],[zip_derived_cl45,zip_derived_cl54]) ).

thf(ax74,axiom,
    ! [VAR_V_98: $i,VAR_V_99: $i] :
      ( ( pred_attacker @ ( tuple_2 @ VAR_V_98 @ VAR_V_99 ) )
     => ( pred_attacker @ VAR_V_98 ) ) ).

thf(zip_derived_cl74,plain,
    ! [X0: $i,X1: $i] :
      ( ( pred_attacker @ X0 )
      | ~ ( pred_attacker @ ( tuple_2 @ X0 @ X1 ) ) ),
    inference(cnf,[status(esa)],[ax74]) ).

thf(zip_derived_cl261,plain,
    ! [X0: $i,X1: $i] :
      ( ~ ( pred_attacker @ ( constr_concat @ X1 @ X0 ) )
      | ( pred_attacker @ X1 ) ),
    inference('s_sup-',[status(thm)],[zip_derived_cl201,zip_derived_cl74]) ).

thf(zip_derived_cl369,plain,
    pred_attacker @ name_objective,
    inference('s_sup-',[status(thm)],[zip_derived_cl367,zip_derived_cl261]) ).

thf(zip_derived_cl371,plain,
    $false,
    inference(demod,[status(thm)],[zip_derived_cl83,zip_derived_cl369]) ).


%------------------------------------------------------------------------------
%----ORIGINAL SYSTEM OUTPUT
% 0.00/0.12  % Problem  : SWW957+1 : TPTP v8.1.2. Released v7.4.0.
% 0.00/0.13  % Command  : python3 /export/starexec/sandbox2/solver/bin/portfolio.lams.parallel.py %s %d /export/starexec/sandbox2/tmp/tmp.mBikwZ0QJa true
% 0.13/0.35  % Computer : n010.cluster.edu
% 0.13/0.35  % Model    : x86_64 x86_64
% 0.13/0.35  % CPU      : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz
% 0.13/0.35  % Memory   : 8042.1875MB
% 0.13/0.35  % OS       : Linux 3.10.0-693.el7.x86_64
% 0.13/0.35  % CPULimit : 300
% 0.13/0.35  % WCLimit  : 300
% 0.13/0.35  % DateTime : Sun Aug 27 21:39:34 EDT 2023
% 0.13/0.35  % CPUTime  : 
% 0.13/0.35  % Running portfolio for 300 s
% 0.13/0.35  % File         : /export/starexec/sandbox2/benchmark/theBenchmark.p
% 0.13/0.35  % Number of cores: 8
% 0.20/0.35  % Python version: Python 3.6.8
% 0.20/0.35  % Running in FO mode
% 0.20/0.63  % Total configuration time : 435
% 0.20/0.63  % Estimated wc time : 1092
% 0.20/0.63  % Estimated cpu time (7 cpus) : 156.0
% 0.20/0.70  % /export/starexec/sandbox2/solver/bin/fo/fo6_bce.sh running for 75s
% 0.91/0.75  % /export/starexec/sandbox2/solver/bin/fo/fo13.sh running for 50s
% 0.91/0.75  % /export/starexec/sandbox2/solver/bin/fo/fo3_bce.sh running for 75s
% 0.91/0.75  % /export/starexec/sandbox2/solver/bin/fo/fo1_av.sh running for 75s
% 0.91/0.75  % /export/starexec/sandbox2/solver/bin/fo/fo7.sh running for 63s
% 0.91/0.75  % /export/starexec/sandbox2/solver/bin/fo/fo5.sh running for 50s
% 0.91/0.75  % Solved by fo/fo6_bce.sh.
% 0.91/0.75  % BCE start: 84
% 0.91/0.75  % BCE eliminated: 1
% 0.91/0.75  % PE start: 83
% 0.91/0.75  logic: eq
% 0.91/0.75  % PE eliminated: 2
% 0.91/0.75  % done 122 iterations in 0.039s
% 0.91/0.75  % SZS status Theorem for '/export/starexec/sandbox2/benchmark/theBenchmark.p'
% 0.91/0.75  % SZS output start Refutation
% See solution above
% 0.91/0.75  
% 0.91/0.75  
% 0.91/0.75  % Terminating...
% 1.34/0.84  % Runner terminated.
% 1.34/0.85  % Zipperpin 1.5 exiting
%------------------------------------------------------------------------------